기술 정보
home
채널 소개
home

인덱스 온라인 빌드 실패 후 리빌드 시 7249 에러

문서 유형
장애 해결
분야
관리/환경설정
키워드
dbms_repair
INDEX
online
rebuild
적용 제품 버전
6FS06
6FS07
6FS07PS
7FS02
7FS02PS
오류코드
7249

현상

인덱스 온라인 빌드 실패 후 리빌드 시, 7249 에러가 발생합니다.
참고
TBR-7249: The index is being built or rebuilt.
현상 발생 시나리오
--현상 발생을 위한 테이블, 인덱스, 데이터 생성 SQL> DROP TABLE T PURGE; CREATE TABLE T( C1 NUMBER, C2 VARCHAR2(10), C3 VARCHAR2(20) ); INSERT INTO T SELECT LEVEL C1 , '2014'||(LPAD(TRUNC(DBMS_RANDOM.VALUE(1,12)), 2,'0'))||(LPAD(TRUNC(DBMS_RANDOM.VALUE(1,30)), 2,'0')) C2 , 'TEST'|| LEVEL FROM DUAL CONNECT BY LEVEL <= 5000000; COMMIT; CREATE INDEX IDX_T ON T(C1, C2); --7249 에러 발생을 위한 인덱스 리빌드 실패 시나리오 --rebuild 온라인 수행 후 약 5초 뒤 수행 취소 (Ctrl+c) 진행 SQL> ALTER INDEX IDX_T REBUILD ONLINE; ^C Trying to cancel the current statement by user's request. TBR-12040: Statement canceled. --인덱스 리빌드 재수행 → TBR-7249 에러 발생되어 인덱스 리빌드 실패됨 SQL> ALTER INDEX IDX_T REBUILD ONLINE; TBR-7249: Index 'IDX_T' is being built or rebuilt.
SQL
복사

원인

인덱스 온라인 빌드 실패 시 journal table이 삭제되지않고 존재하여 7429 에러가 발생합니다.
 BMS_REPAIR 수행 대상 오브젝트 조회
--rebuild 중인 인덱스 오브젝트 조회 SQL> SELECT * FROM SYS._DD_IDXRE; OBJ_ID SGMT_ID PCTFREE_BYTES INITRANS FLAGS ---------- ---------- ------------- ---------- ---------- 173705 173708 819 2 0 --온라인 옵션으로 생성한 인덱스 오브젝트 조회 SQL> SELECT * FROM SYS._DD_IDXON; OBJ_ID TYPE_NO FLAGS ---------- ---------- ---------- 173705 1 0LAGS --위의 내용을 종합하여 DBMS_REPAIR 패키지 수행이 필요한 인덱스 이름 조회 SQL> SELECT A.OWNER, A.OBJECT_NAME, A.OBJECT_TYPE, C.TABLE_NAME FROM DBA_OBJECTS A, SYS._DD_IDXRE B, DBA_INDEXES C WHERE A.OBJECT_ID=B.OBJ_ID AND A.OBJECT_NAME=C.INDEX_NAME AND A.OWNER=C.OWNER; OWNER OBJECT_NAM OBJECT_TYP TABLE_NAME ---------- ---------- ---------- ------------------------------ TIBERO IDX_T INDEX T
SQL
복사

해결

journal table을 삭제하는 drop 절차를 수행합니다.
1.
journal table 삭제 스크립트 수행
SQL> set serveroutput on DECLARE cleaned BOOLEAN; BEGIN cleaned := false; WHILE cleaned = false LOOP cleaned := DBMS_REPAIR.ONLINE_INDEX_CLEAN(DBMS_REPAIR.ALL_INDEX_ID, DBMS_REPAIR.LOCK_WAIT); END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE ); DBMS_OUTPUT.PUT_LINE('SQL MESSAGE: ' || SQLERRM(SQLCODE)); END; / PSM completed.
SQL
복사
2.
인덱스 오브젝트 조회
스크립트 수행 후 이전에 수행했었던 인덱스 오브젝트를 조회합니다.
SQL> SELECT * FROM SYS._DD_IDXRE; 0 row selected. SQL> SELECT * FROM SYS._DD_IDXON; 0 row selected.
SQL
복사
3.
인덱스 온라인 리빌드 수행
이후, 인덱스 온라인 리빌드 수행하여 정상 수행되는지 확인합니다.
SQL> ALTER INDEX IDX_T REBUILD ONLINE; Index 'IDX_T' altered.
SQL
복사
참고
DBMS_REPAIR 패키지 수행 시 락 점유 하므로, DML 부하가 적은 시간대에 수행할 것을 권장합니다.