DB - DAY 9

NewTypeAsuka·2023년 3월 16일
0

DB@

목록 보기
10/15

오늘은 드디어 데이터베이스 마지막날이다.

어제는 예비군 훈련 때문에 하루 결석했지만 동영상 강의로 쉽게 내용을 보충할 수 있었다.

슬슬 이번 주말에는 시간을 내서 방통대 DB 진도도 끝내야겠다.

1. VIEW

VIEW

  • SELECT 쿼리의 실행 결과를 화면에 저장한 논리적 가상 테이블
  • 실제 테이블과는 다르게 실질적 데이터를 저장하고 있진 않지만
    사용자는 테이블을 사용하는 것과 동일하게 사용 가능
  • VIEW의 사용 목적
    • 복잡한 SELECT문을 쉽게 재사용하기 위해 사용
    • 테이블의 진짜 모습을 감출 수 있어 보안상 유리
  • VIEW 사용시 주의사항
    • 가상의 테이블(실체 X)이기 때문에 ALTER 구문 사용 불가
    • VIEW를 이용한 DML(INSERT, UPDATE, DELETE)이 가능한 경우도 있지만
      제약이 많이 따르기 때문에 조회(SELECT) 용도로 대부분 사용


VIEW 옵션

  • 1) OR REPLACE 옵션:
    생성한 뷰가 존재하면 뷰를 갱신함
    2) FORCE/NOFORCE 옵션:
    FORCE옵션은 기본 테이블이 존재하지 않더라도 뷰 생성
    NOFORCE 옵션이 기본 값으로 지정되어 있음
    3) WITH CHECK OPTION 옵션:
    옵션을 설정한 컬럼의 값을 수정 불가능하게 함(삭제는 가능)
    4) WITH READ ONLY 옵션:
    뷰에 대해 조회만 가능하고 삽입, 수정, 삭제 등은 불가능하게 함
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰이름 [컬럼 별칭]
AS 서브쿼리(SELECT)
[WITH CHECK OPTION]
[WITH READ ONLY]

2. SEQUENCE

SEQUENCE

  • 순차적으로 정수 값을 자동으로 생성하는 객체로 자동 번호 발생기 역할을 함
CREATE SEQUENCE SEQ_TEST_NO
START WITH 100 -- 100번부터 시작
INCREMENT BY 5 -- 5씩 증가
MAXVALUE 150   -- 최대값 150
NOMINVALUE	   -- 최소값 없음
NOCYCLE		   -- 반복 X
NOCACHE;       -- 미리 만들어두는 숫자 없음(캐시메모리 사용 X)
UPDATE TB_TEST
SET TEST_NO = SEQ_TEST_NO.NEXTVAL,
	TEST_NAME = '고길동' || SEQ_TEST_NO.CURRVAL
WHERE TEST_NO = (SELECT MAX(TEST_NO)
				 FROM TB_TEST);


3. INDEX

INDEX

  • SQL명령문의 처리 속도를 향상시키기 위해서 컬럼에 대해 생성하는 오라클 객체
  • 내부 구조는 B*트리(이진 트리) 형식으로 구성되어 있음
  • 장점:
    검색 속도가 빨라지고 시스템에 걸리는 부하를 줄여 시스템 전체 성능 향상
  • 단점:
    인덱스를 위한 추가 저장 공간이 필요하고 인덱스를 생성하는데 시간이 걸리고
    DML 작업(INSERT/UPDATE/DELETE)이 자주 일어날 경우 오히려 성능 저하
CREATE [UNIQUE] INDEX 인덱스 명
ON 테이블 명(컬럼 명, 컬럼 명 | 함수 명, 함수 계산식);
  • PK 또는 UNIQUE 제약조건이 설정된 컬럼에 대해 UNIQUE INDEX가 자동 생성된다.
  • DML 작업이 적고 SELECT를 많이 사용하는 테이블에 INDEX를 사용하는 것이 효율적이다.

인덱스의 구조

4. DCL(Data Control Language)

DCL

  • 사용자에 DB 또는 DB 객체에 대한 접근 권한을 부여(GRANT)하고 회수(REVOKE)하는 언어

사용자 구분

  • 1) 관리자 계정:
    데이터베이스의 생성과 관리를 담당하는 계정
    모든 권한과 책임을 가지는 계정
    • SYS: 최고 관리자
    • SYSTEM: SYS에서 권한 일부가 제외된 부관리자
  • 2) 사용자 계정:
    데이터베이스에 대하여 질의, 갱신, 보고서 작성 등의 작업을 수행할 수 있는 계정
    업무에 필요한 최소한의 권한만을 가지는 것을 원칙으로 함

권한의 종류

  • 1) 시스템 권한:
    DB접속, 객체 생성 권한
    관리자 계정 또는 관리자 권한이 있는 계정
    • CREATE SESSION: 데이터베이스 접속 권한
    • CREATE TABLE: 테이블 생성 권한
    • CREATE VIEW: 뷰 생성 권한
    • CREATE SEQUENCE: 시퀀스 생성 권한
    • CREATE PROCEDURE: 함수(프로시져) 생성 권한
    • CREATE USER: 사용자(계정) 생성 권한
    • DROP USER: 사용자(계정) 삭제 권한
    • DROP ANY TABLE: 임의 테이블 삭제 권한
      등 아주 많은 권한이 있음
  • 2) 객체 권한: 특정 객체를 조작할 수 있는 권한
    • 객체: TABLE, VIEW, INDEX, SEQUENCE, USER 등
GRANT 권한[, 권한, 권한] TO 계정명; -- 시스템 권한 부여
GRANT 권한[, 권한, 권한] ON 객체명 TO 계정명; -- 객체 권한 부여
REVOKE 권한[, 권한, 권한] FROM 계정명; -- 시스템 권한 회수
REVOKE 권한[, 권한, 권한] ON 객체명 FROM 계정명; -- 객체 권한 회수

ROLE

  • 여러 권한을 하나로 묶어둠(권한의 묶음)
  • 어려운 권한명을 쉽게 변경
  • RESOURCE:
    DB 사용을 위한 기본 객체 생성 권한의 묶음(8개의 권한)
GRANT CREATE CREATE SEQUENCE
	  CREATE PROCEDURE
	  CREATE CLUSTER
      CREATE INDEXTYPE
	  CREATE OPERATOR
	  CREATE TYPE
	  CREATE TRIGGER
	  CREATE TABLE TO lsj_sample;
-- 8개의 권한을 ROLE을 이용해서 간단히 부여/회수
GRANT RESOURCE TO lsj_sample;
REVOKE RESOURCE FROM lsj_sample;
-- 사용자에게 부여된 롤 조회
SELECT * FROM DBA_ROLE_PRIVS
WHERE GRANTEE = 'LSJ_SAMPLE';

  • CONNECT:
    CREATE SESSION(DB 접속 권한) 하나만을 가지고 있는 ROLE
-- 앞으로 사용자 계정 권한을 생성할 경우 권한 부여 구문
GRANT CONNECT, RESOURCE, CREATE VIEW TO 계정명;

0개의 댓글