행위

"글로벌 인덱스 관리"의 두 판 사이의 차이

DB CAFE

(파티션 태이블 글로벌 인덱스 관리)
(update global indexes 테스트)
6번째 줄: 6번째 줄:
 
# 19C '''update global indexes''' 옵션 추가되어  unusable index문제 해결 (12C는 확인 ?)
 
# 19C '''update global indexes''' 옵션 추가되어  unusable index문제 해결 (12C는 확인 ?)
  
=== update global indexes 테스트 ===
+
=== global indexes unusable 테스트 ===
 
* global index unusable 로 되는경우 테스트
 
* global index unusable 로 되는경우 테스트
 
<source lang=sql>
 
<source lang=sql>
42번째 줄: 42번째 줄:
 
Table altered.
 
Table altered.
 
-- 파티션 테이블 구조를 변경했기 때문이 로컬 인덱스는 변경 사항없고 글로벌 인덱스는 UNUSABLE 됨.
 
-- 파티션 테이블 구조를 변경했기 때문이 로컬 인덱스는 변경 사항없고 글로벌 인덱스는 UNUSABLE 됨.
 +
SQL>
 +
SQL> select index_name, partition_name, status
 +
  2  from user_ind_partitions
 +
  3  where index_name like 'IX%';
 +
 +
INDEX_NAME                    PARTITION_NAME      STATUS
 +
------------------------------ -------------------- --------
 +
IX_LOCAL                      P1                  USABLE
 +
IX_LOCAL                      P2A                  UNUSABLE
 +
IX_LOCAL                      P2B                  UNUSABLE
 +
 +
3 rows selected.
 +
 +
SQL>
 +
SQL> select index_name, status
 +
  2  from user_indexes
 +
  3  where index_name like 'IX%';
 +
 +
INDEX_NAME                    STATUS
 +
------------------------------ --------
 +
IX_GLOBAL                      UNUSABLE
 +
IX_LOCAL                      N/A
 +
 +
2 rows selected.
 +
</source>
 +
 +
=== update global indexes 테스트 ===
 +
* update global indexes 옵션추가 하여 global index usable 유지토록 테스트
 +
<source lang=sql>
 +
-- 테이블 삭제
 +
drop table t purge;
 +
-- 파티션 테이블 생성
 +
SQL> create table t (x int, y int, z int )
 +
  2  partition by range (x)
 +
  3  (
 +
  4    partition p1 values less than (4000),
 +
  5    partition p2 values less than (8000)
 +
  6  );
 +
 +
Table created.
 +
 +
-- 데이터 입력
 +
SQL> insert into t
 +
select q*1000,rownum,rownum
 +
  from dba_objects
 +
    , ( select rownum q
 +
          from dual
 +
      connect by level < 8);
 +
SQL> commit;
 +
Commit complete.
 +
 +
-- 로컬 인덱스 생성
 +
SQL> create index ix_local on t ( y ) local;
 +
Index created.
 +
 +
-- 글로벌 인덱스 생성
 +
SQL> create index ix_global on t ( z ) ;
 +
Index created.
 +
 +
-- update global indexes 옵션을 추가하여
 +
-- alter 명령으로 파티션 테이블 구성을 변경(p2a ,p2b  파티션을 추가하고  글로벌 인덱스가 usable 상태를 유지하는지  확인)
 +
SQL> alter table t split partition p2 at (6000)
 +
  2    into ( partition p2a, partition p2b )
 +
update global indexes; -- 옵션추가
 +
Table altered.
 +
 +
-- 글로벌 인덱스 상태 확인.
 
SQL>
 
SQL>
 
SQL> select index_name, partition_name, status
 
SQL> select index_name, partition_name, status

2023년 1월 19일 (목) 16:21 판

thumb_up 추천메뉴 바로가기


1 파티션 태이블 글로벌 인덱스 관리[편집]

  1. 인덱스는 기본적으로 열의 키(값)를 테이블의 해당 행의 물리적 위치에 매핑하는 구조
  2. 따라서 행을 이동 하는 경우(즉, 행의 물리적 위치 변경) 해당 행의 인덱스 항목을 업데이트해야 함
  3. 그렇지 않으면 인덱스를 더 이상 사용할 수 없습니다.
  4. 파티션 테이블에 로컬 인덱스 와 글로벌 인덱스를 모두 있는 경우 alter table 명령 으로 파티션을 추가 하거나 삭제시 글로벌 인덱스는 invalid 로 되어 unusable 상태가 됨(즉 사용할수 없는 상태가 됨)
  5. 19C update global indexes 옵션 추가되어 unusable index문제 해결 (12C는 확인 ?)

1.1 global indexes unusable 테스트[편집]

  • global index unusable 로 되는경우 테스트
-- 파티션 테이블 생성
SQL> create table t (x int, y int, z int )
  2  partition by range (x)
  3  (
  4    partition p1 values less than (4000),
  5    partition p2 values less than (8000)
  6  );

Table created.

-- 데이터 입력
SQL> insert into t 
select q*1000,rownum,rownum 
  from dba_objects
    , ( select rownum q 
          from dual 
       connect by level < 8);
SQL> commit;
Commit complete.

-- 로컬 인덱스 생성
SQL> create index ix_local on t ( y ) local;
Index created.

-- 글로벌 인덱스 생성
SQL> create index ix_global on t ( z ) ;
Index created.

-- alter 명령으로 파티션 테이블 구성을 변경(p2a ,p2b  파티션을 추가하여 글로벌 인덱스가 unusable 되는지 확인)
SQL> alter table t split partition p2 at (6000)
  2    into ( partition p2a, partition p2b ) ;
Table altered.
-- 파티션 테이블 구조를 변경했기 때문이 로컬 인덱스는 변경 사항없고 글로벌 인덱스는 UNUSABLE 됨.
SQL>
SQL> select index_name, partition_name, status
  2  from user_ind_partitions
  3  where index_name like 'IX%';

INDEX_NAME                     PARTITION_NAME       STATUS
------------------------------ -------------------- --------
IX_LOCAL                       P1                   USABLE
IX_LOCAL                       P2A                  UNUSABLE
IX_LOCAL                       P2B                  UNUSABLE

3 rows selected.

SQL>
SQL> select index_name, status
  2  from user_indexes
  3  where index_name like 'IX%';

INDEX_NAME                     STATUS
------------------------------ --------
IX_GLOBAL                      UNUSABLE
IX_LOCAL                       N/A

2 rows selected.

1.2 update global indexes 테스트[편집]

  • update global indexes 옵션추가 하여 global index usable 유지토록 테스트
-- 테이블 삭제
drop table t purge;
-- 파티션 테이블 생성
SQL> create table t (x int, y int, z int )
  2  partition by range (x)
  3  (
  4    partition p1 values less than (4000),
  5    partition p2 values less than (8000)
  6  );

Table created.

-- 데이터 입력
SQL> insert into t 
select q*1000,rownum,rownum 
  from dba_objects
    , ( select rownum q 
          from dual 
       connect by level < 8);
SQL> commit;
Commit complete.

-- 로컬 인덱스 생성
SQL> create index ix_local on t ( y ) local;
Index created.

-- 글로벌 인덱스 생성
SQL> create index ix_global on t ( z ) ;
Index created.

-- update global indexes 옵션을 추가하여
-- alter 명령으로 파티션 테이블 구성을 변경(p2a ,p2b  파티션을 추가하고  글로벌 인덱스가 usable 상태를 유지하는지  확인)
SQL> alter table t split partition p2 at (6000)
  2    into ( partition p2a, partition p2b ) 
update global indexes; -- 옵션추가 
Table altered.

-- 글로벌 인덱스 상태 확인.
SQL>
SQL> select index_name, partition_name, status
  2  from user_ind_partitions
  3  where index_name like 'IX%';

INDEX_NAME                     PARTITION_NAME       STATUS
------------------------------ -------------------- --------
IX_LOCAL                       P1                   USABLE
IX_LOCAL                       P2A                  UNUSABLE
IX_LOCAL                       P2B                  UNUSABLE

3 rows selected.

SQL>
SQL> select index_name, status
  2  from user_indexes
  3  where index_name like 'IX%';

INDEX_NAME                     STATUS
------------------------------ --------
IX_GLOBAL                      UNUSABLE
IX_LOCAL                       N/A

2 rows selected.