PK 제약조건은 생성시 사용할 수 있는 인덱스가 없는 경우 인덱스가 자동으로 생성된다. 1
테스트를 위해 아래와 같이 테이블을 생성하자.
-- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER);
아래 예제에서 t1_pk, t1_u1인덱스는 자동으로 생성된다. 이런 경우 인덱스에 대한 obj$ 테이블의 spare1 값이 0으로 표시된다. 제약조건 삭제시 인덱스도 함께 삭제된다.
-- 2-1 ALTER TABLE t1 ADD CONSTRAINT t1_pk PRIMARY KEY (c1); ALTER TABLE t1 ADD CONSTRAINT t1_u1 UNIQUE (c2); SELECT name, spare1 FROM sys.obj$ WHERE name LIKE 'T1_%'; NAME SPARE1 ----- ------ T1_PK 0 T1_U1 0 2 행이 선택되었습니다. -- 2-2 ALTER TABLE t1 DROP CONSTRAINT t1_pk; ALTER TABLE t1 DROP CONSTRAINT t1_u1; SELECT name, spare1 FROM sys.obj$ WHERE name LIKE 'T1_%'; 선택된 레코드가 없습니다.
별도로 인덱스를 생성한 경우에는 spare1 값이 6으로 표시되며 제약조건을 삭제하더라도 인덱스가 유지된다. 운영의 안정성 측면에서 별도로 인덱스를 생성하는 편이 유리하다.
-- 3-1 CREATE UNIQUE INDEX t1_pk ON t1 (c1); CREATE UNIQUE INDEX t1_u1 ON t1 (c2); ALTER TABLE t1 ADD CONSTRAINT t1_pk PRIMARY KEY (c1) USING INDEX t1_pk; ALTER TABLE t1 ADD CONSTRAINT t1_u1 UNIQUE (c2) USING INDEX t1_u1; SELECT name, spare1 FROM sys.obj$ WHERE name LIKE 'T1_%'; NAME SPARE1 ----- ------ T1_PK 6 T1_U1 6 2 행이 선택되었습니다. -- 3-2 ALTER TABLE t1 DROP CONSTRAINT t1_pk; ALTER TABLE t1 DROP CONSTRAINT t1_u1; SELECT name, spare1 FROM sys.obj$ WHERE name LIKE 'T1_%'; NAME SPARE1 ----- ------ T1_PK 6 T1_U1 6 2 행이 선택되었습니다.
제약조건 삭제시 KEEP INDEX 옵션을 사용하면 인덱스 생성 유형과 관계없이 인덱스를 유지할 수 있다.
-- 4 ALTER TABLE t1 DROP CONSTRAINT t1_pk [KEEP INDEX | DROP INDEX];
- UNIQUE 제약조건도 마찬가지다. [본문으로]
'Oracle > Administration' 카테고리의 다른 글
오라클 에러 조회 함수 (0) | 2018.03.04 |
---|---|
오라클 에러 테이블 (0) | 2018.03.01 |
INVISIBLE 칼럼 (0) | 2014.05.03 |
NUMBER 타입 테스트 (0) | 2014.03.07 |
세션 정보 변경 (0) | 2012.06.25 |