내맘대로긍정이 알려주는
Oracle 23ai 신기능
무료 세미나 발표자료
OS환경 : Oracle Linux 7.6 (64bit)
DB 환경 : Oracle Database 19.3.0.0
에러 : ORA-14086: a partitioned index may not be rebuilt as a whole
파티션 테이블의 파티션 인덱스를 rebuild 하려고 할때 발생한 메세지
1
2
3
4
5
|
SQL> alter index PT_IX01 rebuild;
alter index PT_IX01 rebuild
*
ERROR at line 1:
ORA-14086: a partitioned index may not be rebuilt as a whole
|
해결 방법 : 파티션 인덱스의 경우 개별 인덱스를 rebuild 진행
파티션 인덱스의 경우 개별 인덱스를 rebuild 진행해줘야함
현재 해당 인덱스 파티션 조회
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
SQL>
set lines 200 pages 1000
col index_owner for a10
col index_name for a20
col partition_name for a20
select index_owner, index_name, partition_name, status
from dba_ind_partitions
where index_name in (select index_name from dba_part_indexes where table_name ='PTABLE');
INDEX_OWNE INDEX_NAME PARTITION_NAME STATUS
---------- -------------------- -------------------- --------
IMSI PT_IX01 P202101 UNUSABLE
IMSI PT_IX01 P202102 UNUSABLE
IMSI PT_IX01 P202103 UNUSABLE
IMSI PT_IX01 P202104 UNUSABLE
IMSI PT_IX01 P202105 UNUSABLE
IMSI PT_IX01 P202106 UNUSABLE
IMSI PT_IX01 P202107 UNUSABLE
IMSI PT_IX01 P202108 UNUSABLE
IMSI PT_IX01 P202109 UNUSABLE
IMSI PT_IX01 P202110 UNUSABLE
IMSI PT_IX01 P202111 UNUSABLE
IMSI PT_IX01 P202112 UNUSABLE
IMSI PT_IX01 P_MAX UNUSABLE
13 rows selected.
|
모두 unusable 상태임
파티션별로 인덱스 리빌드 진행
1
2
3
|
SQL> alter index PT_IX01 rebuild partition P_MAX;
Index altered.
|
파티션 인덱스 재확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
SQL>
set lines 200 pages 1000
col index_owner for a10
col index_name for a20
col partition_name for a20
select index_owner, index_name, partition_name, status
from dba_ind_partitions
where index_name in (select index_name from dba_part_indexes where table_name ='PTABLE');
INDEX_OWNE INDEX_NAME PARTITION_NAME STATUS
---------- -------------------- -------------------- --------
IMSI PT_IX01 P202101 UNUSABLE
IMSI PT_IX01 P202102 UNUSABLE
IMSI PT_IX01 P202103 UNUSABLE
IMSI PT_IX01 P202104 UNUSABLE
IMSI PT_IX01 P202105 UNUSABLE
IMSI PT_IX01 P202106 UNUSABLE
IMSI PT_IX01 P202107 UNUSABLE
IMSI PT_IX01 P202108 UNUSABLE
IMSI PT_IX01 P202109 UNUSABLE
IMSI PT_IX01 P202110 UNUSABLE
IMSI PT_IX01 P202111 UNUSABLE
IMSI PT_IX01 P202112 UNUSABLE
IMSI PT_IX01 P_MAX USABLE
13 rows selected.
|
정상적으로 usable 상태로 변함
나머지 인덱스의 파티션들도 모두 rebulid 진행
구문 출력
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
SQL>
set lines 200 pages 1000
col sql for a70
select 'alter index '|| index_owner || '.' || index_name ||' rebuild partition '|| partition_name || ' online;' "SQL"
from dba_ind_partitions
where index_name in (select index_name from dba_part_indexes where table_name ='PTABLE')
and status = 'UNUSABLE';
SQL
----------------------------------------------------------------------
alter index IMSI.PT_IX01 rebuild partition P202101 online;
alter index IMSI.PT_IX01 rebuild partition P202102 online;
alter index IMSI.PT_IX01 rebuild partition P202103 online;
alter index IMSI.PT_IX01 rebuild partition P202104 online;
alter index IMSI.PT_IX01 rebuild partition P202105 online;
alter index IMSI.PT_IX01 rebuild partition P202106 online;
alter index IMSI.PT_IX01 rebuild partition P202107 online;
alter index IMSI.PT_IX01 rebuild partition P202108 online;
alter index IMSI.PT_IX01 rebuild partition P202109 online;
alter index IMSI.PT_IX01 rebuild partition P202110 online;
alter index IMSI.PT_IX01 rebuild partition P202111 online;
alter index IMSI.PT_IX01 rebuild partition P202112 online;
12 rows selected.
|
해당 쿼리 실행
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SQL>
alter index IMSI.PT_IX01 rebuild partition P202101 online;
alter index IMSI.PT_IX01 rebuild partition P202102 online;
alter index IMSI.PT_IX01 rebuild partition P202103 online;
alter index IMSI.PT_IX01 rebuild partition P202104 online;
alter index IMSI.PT_IX01 rebuild partition P202105 online;
alter index IMSI.PT_IX01 rebuild partition P202106 online;
alter index IMSI.PT_IX01 rebuild partition P202107 online;
alter index IMSI.PT_IX01 rebuild partition P202108 online;
alter index IMSI.PT_IX01 rebuild partition P202109 online;
alter index IMSI.PT_IX01 rebuild partition P202110 online;
alter index IMSI.PT_IX01 rebuild partition P202111 online;
alter index IMSI.PT_IX01 rebuild partition P202112 online;
|
파티션 인덱스 재확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
SQL>
set lines 200 pages 1000
col index_owner for a10
col index_name for a20
col partition_name for a20
select index_owner, index_name, partition_name, status
from dba_ind_partitions
where index_name in (select index_name from dba_part_indexes where table_name ='PTABLE');
INDEX_OWNE INDEX_NAME PARTITION_NAME STATUS
---------- -------------------- -------------------- --------
IMSI PT_IX01 P202101 USABLE
IMSI PT_IX01 P202102 USABLE
IMSI PT_IX01 P202103 USABLE
IMSI PT_IX01 P202104 USABLE
IMSI PT_IX01 P202105 USABLE
IMSI PT_IX01 P202106 USABLE
IMSI PT_IX01 P202107 USABLE
IMSI PT_IX01 P202108 USABLE
IMSI PT_IX01 P202109 USABLE
IMSI PT_IX01 P202110 USABLE
IMSI PT_IX01 P202111 USABLE
IMSI PT_IX01 P202112 USABLE
IMSI PT_IX01 P_MAX USABLE
13 rows selected.
|
모두 정상화됨
원인 : 파티션 인덱스를 개별 인덱스 레벨로 rebuild 하지 않고 전체 인덱스를 rebuild 하려해서 발생한 문제
파티션 인덱스를 개별 인덱스 레벨로 rebuild 하지 않고 전체 인덱스를 rebuild 하려해서 발생한 문제
파티션 인덱스의 경우 개별 인덱스를 rebuild 진행해줘야함
근본적으로 unusable 상태로 빠진 인덱스들은
인덱스가 글로벌 파티션 인덱스로 생성된 상태에서 파티션 구조 변경이 발생한것이 원인임
글로벌 파티션 인덱스의 경우 파티션 구조변경이 일어났을때 인덱스가 unusable 상태로 변함
이 경우 인덱스를 제대로 사용하지 못함
파티션 작업시 항상 글로벌 파티션 인덱스가 존재하는지 확인 후 작업을 진행해야함
글로벌 파티션 인덱스 여부 확인
1
2
3
4
5
6
7
8
9
10
11
|
SQL>
select di.index_name, di.uniqueness, di.partitioned, dpi.locality, dpi.alignment
from dba_indexes di, dba_part_indexes dpi
where di.table_name= 'PTABLE'
and dpi.table_name(+) = di.table_name
and dpi.index_name(+) = di.index_name
order by 1;
INDEX_NAME UNIQUENES PAR LOCALI ALIGNMENT
-------------------- --------- --- ------ ------------
PT_IX01 NONUNIQUE YES GLOBAL PREFIXED
|
locality 컬럼이 GLOBAL임=> 글로벌 파티션 인덱스
참조 :
오라클 19c 파티션 테이블 add 작업 시 인덱스 영향도 확인 ( https://positivemh.tistory.com/999 )
오라클 19c 파티션 테이블 drop 작업 시 인덱스 영향도 확인 ( https://positivemh.tistory.com/1000 )
오라클 19c 파티션 테이블 exchange 작업 시 인덱스 영향도 확인 ( https://positivemh.tistory.com/1001 )
오라클 19c 파티션 테이블 merge 작업 시 인덱스 영향도 확인 ( https://positivemh.tistory.com/1002 )
오라클 19c 파티션 테이블 move 작업 시 인덱스 영향도 확인 ( https://positivemh.tistory.com/1003 )
오라클 19c 파티션 테이블 rename 작업 시 인덱스 영향도 확인 ( https://positivemh.tistory.com/1004 )
오라클 19c 파티션 테이블 split 작업 시 인덱스 영향도 확인 ( https://positivemh.tistory.com/1005 )
오라클 19c 파티션 테이블 truncate 작업 시 인덱스 영향도 확인 ( https://positivemh.tistory.com/1006 )
'ORACLE > Trouble Shooting' 카테고리의 다른 글
AHF-00074: Required Perl Modules not found : Net::Ping (0) | 2024.03.21 |
---|---|
ORA-12638 : credential retrieval failed (0) | 2024.02.18 |
ORA-39151: Table exists. All dependent metadata and data will be skipped due to table_exists_action of skip (0) | 2024.01.10 |
ORA-02185: a token other than WORK follows COMMIT (0) | 2024.01.10 |
ORA-00932: inconsistent datatypes: expected CHAR got LONG (0) | 2023.12.13 |