본문
- 데이터베이스의 데이터들 중 순서가 필요할 경우가 있음 (EX. 주문번호, 학번, 게시글 번호 등)
- SEQUENCE : 연속적인 번호의 생성이 필요할 경우를 위해서 오라클에서도 연속적인 번호를
자동으로 만들어 주는 기능
- SYNONYM : 테이블에 별명을 만들어서 부르는 기능
1. SEQUENCE (시퀀스)
- SEQUENCE 는 마치 은행의 번호표처럼 연속적인 일련 번호를 만들어 주는 기능
- 문 법:
CREATE SEQUENCE sequence_name |
- 사용 예) 아래의 조건으로 제품 주문번호를 생성하기 위해 사용할 SEQUENCE 를 만드세요.
* SEQUENCE 명: seq_jumun_no
* 시작 번호: 1000
* 끝 번 호: 1010
* 증 가 값: 1
* 반복 되고 캐싱은 2개씩 되도록 하세요.
SCOTT> CREATE SEQUENCE seq_jumun_no |
- 위에서 생성한 SEQUENCE 는 CURRVAL과 NEXTVAL을 사용하여 조회 및 사용할 수 있음
- CURRVAL은 현재까지 생성된 번호, 즉 가장 마지막 번호를 보여줌
- NEXTVAL은 다음에 나올번호를 보여줌
- SEQUENCE 에서 중요한 부분은 6번 라인에 있는 CACHE기능입니다.
ex) 평소 판매가격이 100만원인 제품을 선착순 1 천 명에게만 10만원에 판매하는 이벤트를 한다고
미리 공지를 하고 주문을 받을 경우 1초에도 아주 많은 주문이 들어 올 것입니다.
이때 주문 테이블의 주문 번호를 SEQUENCE 로 생성 할 경우 SEQUENCE에서 번호를 생성하는
시간이 걸리므로 SEQUENCE 번호를 기다리는 대기(WAIT) 현상이 발생하게 될 것이고
이로 인해 성능이 저하
이런 경우를 조금이라도 개선하기 위해 SEQUENCE 번호를 미리 메모리상에 만들어두고(CACHE)
SEQUENCE 번호 요청이 들어오면 즉시 번호를 할당하게 된 것
1) SEQUENCE 생성 및 옵션 확인하기
Step 1: 예제로 사용할 jumun 테이블을 아래와 같이 생성하고 데이터를 입력하겠습니다. SCOTT> CREATE TABLE jumun Step 2. 데이터를 입력합니다. SCOTT> INSERT INTO jumun
1001 BBBB
Step 3. MAXVALUE / MINVALUE 항목과 CYCLE 값을 테스트 합니다. SCOTT> BEGIN
1001 BBBB 1002 ldXB
※ 11건의 데이터가 모두 입력되고 SEQUENCE 번호도 1000-1010번 까지 모두 소진 됨
SCOTT> INSERT INTO jumun 1001 BBBB 1002 ldXB
※ MAXVALUE 값을 다 사용한 상태에서 CYCLE 로 설정이 되면 다시 돌아가는 데 그 시작번호는 MINVALUE로 설정된 값임을 알 수 있습니다. |
Step 4. NOCYCLE 설정과 CACHE 설정을 테스트 합니다. SCOTT> CREATE TABLE jumun2
> 데이터를 1건 만 입력한 후 데이터베이스를 강제 종료 SCOTT> INSERT INTO jumun2 SCOTT> COMMIT;
SYS> CONN scott/tiger
102 BBBB 원래 101 번이 입력되어야 하지만 시퀀스 생성할때 CACHE 값을 2로 주어서 100, 101 번이 캐싱되 어있다가 서버가 비정상 종료되어서 캐싱되었던 |
- Seq_jumun2_no 시퀀스는 생성될 때 CYCLE 라는 옵션을 주지 않았습니다.
이 옵션을 주지 않고 생성하면 기본값은 NOCYCLE 입니다.
아래와 같이 MAXVALUE 를 초과하여 값을 요청하면 에러를 발생하게 됩니다
SCOTT> INSERT INTO jumun2 |
2) 값이 감소하는 SEQUENCE 생성 및 사용하기
SCOTT>CREATE SEQUENCE s_rev
|
3) SEQUENCE 조회 및 수정하기
위에서 생성한 seq_jumun2_no 시퀀스를 최대값을 110 번으로 하고 CACHE 값을 5로 수정하세요.
SCOTT> COL 이름 FOR a15 ;
※ SEQUENCE 를 변경할 때 START WITH 값은 변경이 안 됩니다.
|
4) SEQUENCE 삭제하기
위에서 생성한 seq_jumun2_no 시퀀스를 최대값을 110 번으로 하고 CACHE 값을 5로 수정하세요.
SCOTT> DROP SEQUENCE seq_jumun2_no ; |
- SEQUENCE를 사용하는 DM이 ROLLBACK되어도 SEQUENCE는 다시 ROLLBACK 되지 않기 때문에
만약 이럴 경우 입력되는 번호의 차이가 생길 수 있다는 점도 꼭 기억!!
2. SYNONYM(동의어)
- 동의어란 테이블에 붙이는 별명입니다.
- 이유 : 보안상 목적이나 사용자의 편의성 때문
1) 문 법:
CREATE [PUBLIC] SYNONYM synonym이름 |
- SYNONYM 도 스키마 오브젝트이므로 만든 사람만 사용할 수 있습니다.
(SCOTT 이 어떤 SYNONYM 을 생성하게 되면 SCOTT만 사용할 수 있다는 뜻)
- 다른 사용자도 다 쓸 수 있게 생성하려면 PUBLIC 이란 키워드를 사용해서 생성
- 동의어를 생성하려면 CREATE SYNONYM 권한 필요
SCOTT> CONN / AS SYSDBA
|
2) 생성 예 :
1. Scott 사용자의 emp2 테이블의 동의어를 e2로 생성
SCOTT> CREATE SYNONYM e2 FOR emp2 ; |
2. Scott 사용자의 department 테이블의 동의어를 d2 로 생성하되 모든 사용자들이 사용 할 수있도록 생성
SCOTT> CREATE PUBLIC SYNONYM d2 FOR department ; |
3) SYNONYM 조회하기
SCOTT> SELECT synonym_name, table_owner , table_name |
4) SYNONYM 삭제하기
SCOTT> DROP SYNONYM e2 ; |
'Oracle > Oracle_SQL' 카테고리의 다른 글
[10장] VIEW(뷰) (0) | 2014.10.31 |
---|---|
[9장] INDEX(인덱스) (0) | 2014.10.30 |
[8장] 제약조건 (0) | 2014.10.29 |
[7장] DDL 문장과 딕셔너리 (0) | 2014.10.24 |
[6장] DML (0) | 2014.10.23 |