테이블을 파티션으로 분할하고, 인덱스도 LOCAL 로 만들어서 사용하려고 합니다.
데이터 입력전에 삭제하는 부분이 기존에는 DELETE여서 속도를 좀 높이려고 TRUNCATE로 변경했습니다.
그랬더니 INSERT 단계에서 UNUSABLE 에러가 발생하더군요.
그래서 TRUNCATE 후 아래처럼 PK 재구성을 했더니 에러는 안생깁니다.
EXEC SQL ALTER INDEX HBRT_L2_PK REBUILD NOLOGGING;
그런데 Rebuild 하는데 시간이 넘 오래걸려 속도 단축의 의미가 없어졌습니다.
왜 이런현상이 생기는거죠? 같은 로직을 9i에서 돌릴때는 에러가 안났는데 10g에서는 에러가 나네요 -_-;;
아래처럼.. LOCAL 인덱스는 영향이 없으나 PK라서 그런건가요?
Operation
|
인덱스
|
UNUSABLE 상태 변경
|
ADD
|
LOCAL
|
새로 생성되므로 영향없음
|
GLOBAL
|
파티션만 ADD되므로 영향없음
|
DROP
|
LOCAL
|
함께 DROP되므로 영향없음
|
GLOBAL
|
모든 GLOBAL INDEX가 UNUSABLE
|
SPLIT
|
LOCAL
|
SPLIT된 파티션 인덱스 UNUSABLE
|
GLOBAL
|
모든 GLOBAL INDEX가 UNUSABLE
|
MERGE
|
LOCAL
|
MERGE되어 남는 파티션 인덱스 UNUSABLE
|
GLOBAL
|
모든 GLOBAL INDEX가 UNUSABLE
|
RENAME
|
LOCAL
|
실제 변경이 없으므로 영향없음
|
GLOBAL
|
실제 변경이 없으므로 영향없음
|
MOVE
|
LOCAL
|
MOVE된 파티션 인덱스 UNUSABLE
|
GLOBAL
|
모든 GLOBAL INDEX가 UNUSABLE
|
TRUNCATE
|
LOCAL
|
남은 ROW가 없으므로 영향없음
|
GLOBAL
|
모든 GLOBAL INDEX가 UNUSABLE
|
EXCHANGE
|
LOCAL
|
EXCHANGE 한 파티션 인덱스 UNUSABLE
|
GLOBAL
|
모든 GLOBAL INDEX가 UNUSABLE
|
※ ROWID가 변경되는 Operation의 경우 인덱스가 UNUSABLE되므로 Index Rebuild가 필요 |