새싹 DBA/Scripts

[오라클] 인덱스 PK 재생성

LIMMI 2024. 9. 13. 10:01

프로시저를 통해 CTAS 로 테이블 복사 후 index 및 constraint 를 추가하는 작업을 진행하던 중 index owner가 잘못 설정되어 drop 후 다시 생성해야 하는 문제가 발생. 보통 pk를 추가해줄때 unique 인덱스를 사용하는데 pk 먼저 떨궈야 index 도 떨굴수 있다.

1. drop PK

ALTER TABLE [TABLE_OWNER].[TABLE_NAME] DROP PRIMARY KEY CASCADE;

2. drop Index

DROP INDEX [INDEX_OWNER].[INDEX_NAME];

3. Create Index

CREATE UNIQUE INDEX [INDEX_OWNER].[INDEX_NAME] ON [TABLE_OWNER].[TABLE_NAME](COL1,COL2);
-- COL1, COL2 는 INDEX 를 구성할 컬럼을 나열한 것.

4. Add Constraint

ALTER TABLE [TABLE_OWNER].[TABLE_NAME] 
  ADD CONSTRAINT [PK_NAME] PRIMARY KEY(COL1,COL2) 
USING INDEX [INDEX_OWNER].[INDEX_NAME];

-- 보통 PK_NAME 은 PK_INDEX와 이름이 같다.

 

5. 생성된 Index 잘 타는지 조회 (힌트 사용)

SELECT /*+ INDEX([TABLE_NAME] [INDEX_NAME] */ *
  FROM [TABLE_OWNER].[TABLE_NAME];