** 시퀀스
CREATE SEQUENCE sequence_name
[INCREMENT BY int]
[START WITH int]
[MAXVALUE int | NOMAXVALUE]
[MINVALUE int | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE int | NOCACHE];
* 시퀀스 생성
DEPT 테이블의 기본 키에 대해 사용되는 DEPT_DEPTNO 시퀀스를
생성한다.
CYCLE 옵션을 사용해서는 안된다.
SQL> CREATE SEQUENCE dept_deptno_seq
INCREMENT BY 1
START WITH 91
MAXVALUE 100
NOCACHE
NOCYCLE;
* 시퀀스 확인
USER_SEQUENCES 데이터 사전 테이블에서 시퀀스 값을 검사한다.
SQL> SELECT sequence_name, min_value, max_value
increment_by, last_number
FROM user_sequences;
LAST_NUMBER 열은 다음 이용 가능한 시퀀스 넘버를 디스플레이
한다.
NEXTVAL과 CURRVAL 의사열
NEXTVAL은 다음 사용 가능한 시퀀스 값을 반환한다. 시퀀스가 참조
될 때마다, 다른 사용자에게 조차도 유일 값을 반환한다.
CURRVAL은 현재 시퀀스 값을 얻는다. CURRVAL이 참조되기 전에
NEXTVAL이 이용되어야 한다.
SQL> SELECT dept_deptno_seq.NEXTVAL FROM dual;
SQL> SELECT dept_deptno_seq.CURRVAL FROM dual;
* 시퀀스 사용
샌디에고에 “MARKETING”이라는 새로운 부서를 삽입한다.
SQL> INSERT INTO dept(deptno, dname, loc)
VALUES (dept_deptno_seq.NEXTVAL,
‘MARKETING’, ‘SAN DIEGO’);
DEPT_DEPTNO 시퀀스에 대한 현재 값을 본다.
SQL> SELECT dept_deptno_seq.CURRVAL
FROM dual;
* 시퀀스 수정
증가값, 최대값, 최소값, 사이클 옵션 또는 캐쉬 옵션을 변경한다.
SQL> ALTER SEQUENCE dept_deptno_seq
INCREMENT BY 1
MAXVALUE 999999
NOCACHE
NOCYCLE;
시퀀스 수정 지침
시퀀스에 대한 ALTER 권한을 가지거나 소유자여야 한다.
이후의 시퀀스 번호만 영향을 받는다.
시퀀스는 다른 번호에서 시퀀스를 다시 시작하기 위해서는
제거하고 다시 생성되어야 한다.
( 즉 ,start with 값은 변경할 수 없고 변경 필요시 시퀀스를
다시 만든다)
유효한 검사를 수행한다.
* 시퀀스 제거
DROP SEQUENCE 문장을 사용하여 데이터 사전에서 시퀀스를 제
거한다.
한번 제거되었다면 시퀀스는 더 이상 참조될 수 없다.
SQL> DROP SEQUENCE dept_deptno_seq;
** 인덱스란?
* 스키마 객체
포인터를 사용하여 행의 검색을 촉진하기 위해 오라클 서버가 사용 한다.
빠르게 데이터를 찾기 위해 빠른 경로 액세스 방법을 사용하여 디스크 I/O를 경감시킨다.
인덱스하는 테이블에 대해 독립적이다.
오라클 서버에 의해 자동적으로 사용되고 유지된다.
* 인덱스를 생성하는 방법은?
자동으로
- 유일 인덱스는 테이블 정의의 PRIMARY KEY 또는 UNIQUE KEY
제약조건을 정의할 때 자동으로 생성된다.
수동으로
- 사용자는 행에 대한 액세스 시간을 향상 시키기 위해 열에서 유일
하지 않은 인덱스를 생성할 수 있다.
* 인덱스 생성
하나 이상의 열의 인덱스를 작성한다.
CREATE INDEX index
ON table (column[, column]…);
EMP 테이블의 ENAME 열의 질의 액세스 속도를 향상시킨다.
SQL> CREATE INDEX emp_ename_idx
ON emp(ename);
* 인덱스 생성 지침
열이 WHERE 절이나 조인 조건에서 자주 사용된다.
열이 광범위한 값을 포함한다.
열이 많은 수의 null 값을 포함한다.
둘 또는 이상의 열들은 WHERE 절 또는 조인 조건에서 자주 함께 사용된다.
테이블이 대형이며 대부분의 질의들이 행의 2-4%보다 적게 읽어들 일 것으로 예상된다.
인덱스 생성 지침
아래 경우라면 인덱스를 생성하지 마시오.
테이블이 작다.
열이 질의의 조건으로 자주 사용되지 않는다.
대부분의 질의들이 행의 2-4% 이상을 읽어들일 것으로 예상된다.
테이블이 자주 갱신된다.
* 인덱스 확인
USER_INDEXES 데이터 사전 뷰는 인덱스의 이름과 그것의 유일성을 포함한다.
USER_IND_COLUMNS 뷰는 인덱스명, 테이블명, 열명을 포함한다.
SQL> SELECT ic.index_name, ic.column_name,
ic.column_position col_pos, ix.uniqueness
FROM user_indexes ix, user_ind_column ic
WHERE ic.index_name = ix.index_name
AND ic.table_name = ‘EMP’;
* 인덱스 제거
데이터 사전에서 인덱스를 제거한다.
SQL> DROP INDEX index;
데이터 사전에서 EMP_ENAME_IDX 인덱스를 제거한다.
SQL> DROP INDEX emp_ename_idx;
인덱스를 제거하기 위해, 인덱스의 소유자이거나 DROP ANY
INDEX 권한을 가지고 있어야 한다.
** 동의어
동의어(객체의 다른 이름)를 생성하여 객체에 대한 액세스를 단순화 한다.
다른 사용자가 소유한 테이블을 참조한다.
객체이름의 길이를 단축한다.
CREATE [PUBLIC] SYNONYM synonym
FOR object;
* 동의어 생성과 제거
DEPT_SUM_VU뷰에 대해 단축명을 생성한다.
SQL> CREATE SYNONYM d_sum
FOR dept_sum_vu;
동의어를 제거한다.
SQL> DROP SYNONYM d_sum;
** 사용자 접근 제어
사용자 생성
DBA는 CREATE USER 문장을 사용하여 사용자를 생성한다.
CREATE USER user
IDENTIFIED BY passwd;
SQL> CREATE USER scott
IDENTIFIED BY tiger;
*** 사용자 생성시 반드시 default tablespace와