[ORACLE] 파티션 테이블 split 진행 시 인덱스 unusable 상태 변화


    파티션 SPLIT 작업 시 MAXVALUE 파티션에 데이터 유무에 따라 인덱스가 UNUSABLE 상태로 변경 테스트


    테스트 테이블 생성

    -- 서브파티션 테이블 생성
    CREATE TABLE SK.P_TAB1 
    (C1 NUMBER, C2 NUMBER)
    PARTITION BY RANGE (C1)
    SUBPARTITION BY HASH(C2) SUBPARTITIONS 4
    ( PARTITION P1000 VALUES LESS THAN (1001) TABLESPACE TS_DATA,
    PARTITION P2000 VALUES LESS THAN (2001) TABLESPACE TS_DATA,
    PARTITION P3000 VALUES LESS THAN (3001) TABLESPACE TS_DATA,
    PARTITION P_MAX VALUES LESS THAN (MAXVALUE) TABLESPACE TS_DATA
    ) 
    ;
    
    
    INSERT INTO sk.p_tab1 SELECT LEVEL, LEVEL FROM dual CONNECT BY LEVEL <= 4000 ;
    commit ;
    
    CREATE INDEX sk.p_tab1_gbl ON sk.p_tab1(c1) ;
    CREATE INDEX sk.p_tab1_loc ON sk.p_tab1(c1, c2 ) LOCAL ;
    
    
    
    -- 파티션 테이블 생성
    CREATE TABLE SK.P_TAB2 
    (C1 NUMBER, C2 NUMBER)
    PARTITION BY RANGE (C1)
    ( PARTITION P1000 VALUES LESS THAN (1001) TABLESPACE TS_DATA,
    PARTITION P2000 VALUES LESS THAN (2001) TABLESPACE TS_DATA,
    PARTITION P3000 VALUES LESS THAN (3001) TABLESPACE TS_DATA,
    PARTITION P_MAX VALUES LESS THAN (MAXVALUE) TABLESPACE TS_DATA
    ) 
    ;
    
    INSERT INTO sk.p_tab2 SELECT LEVEL, LEVEL FROM dual CONNECT BY LEVEL <= 4000 ;
    commit ;
    
    CREATE INDEX sk.p_tab2_gbl ON sk.p_tab2(c1) ;
    CREATE INDEX sk.p_tab2_loc ON sk.p_tab2(c1, c2 ) LOCAL ;
    
    -- 인덱스 상태 확인
    SELECT TABLE_OWNER, TABLE_NAME, INDEX_OWNER, INDEX_NAME, PARTITION_NAME, SUBPARTITION_NAME, STATUS
    FROM (
    SELECT I.OWNER INDEX_OWNER, I.INDEX_NAME, '' PARTITION_NAME, '' SUBPARTITION_NAME, TO_NUMBER('') POSITION, TO_NUMBER('') SUB_POSITION,I.TABLE_OWNER, I.TABLE_NAME, I.STATUS
    FROM DBA_INDEXES I, DBA_PART_TABLES T
    WHERE I.TABLE_NAME=T.TABLE_NAME
    AND I.TABLE_OWNER=T.OWNER
    AND I.PARTITIONED='NO'
    UNION ALL
    SELECT A.OWNER INDEX_OWNER, A.INDEX_NAME, B.PARTITION_NAME, '' SUBPARTITION_NAME, B.PARTITION_POSITION, TO_NUMBER('') SUB_POSITION, A.TABLE_OWNER, A.TABLE_NAME, B.STATUS
    FROM DBA_INDEXES A, DBA_IND_PARTITIONS B
    WHERE A.OWNER = B.INDEX_OWNER
    AND A.INDEX_NAME = B.INDEX_NAME
    AND A.PARTITIONED = 'YES'
    AND B.SUBPARTITION_COUNT = 0
    UNION ALL
    SELECT A.OWNER INDEX_OWNER, A.INDEX_NAME, B.PARTITION_NAME, B.SUBPARTITION_NAME,B.PARTITION_POSITION, SUBPARTITION_POSITION, A.TABLE_OWNER, A.TABLE_NAME, B.STATUS
    FROM DBA_INDEXES A, DBA_IND_SUBPARTITIONS B
    WHERE A.OWNER = B.INDEX_OWNER
    AND A.INDEX_NAME = B.INDEX_NAME
    AND A.PARTITIONED = 'YES'
    )
    WHERE 1=1
    AND TABLE_OWNER NOT IN (SELECT USERNAME FROM DBA_USERS WHERE ORACLE_MAINTAINED = 'Y')
    AND INDEX_NAME NOT LIKE 'SYS_IL%'
    ORDER BY TABLE_OWNER, TABLE_NAME, INDEX_NAME, POSITION, SUB_POSITION
    
    
    TABLE_OWNER|TABLE_NAME|INDEX_OWNER|INDEX_NAME|PARTITION_NAME|SUBPARTITION_NAME|STATUS|
    -----------+----------+-----------+----------+--------------+-----------------+------+
    SK         |P_TAB1    |SK         |P_TAB1_GBL|              |                 |VALID |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP560      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP561      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP562      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP563      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP564      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP565      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP566      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP567      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP568      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP569      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP570      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP571      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP572      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP573      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP574      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP575      |USABLE|
    SK         |P_TAB2    |SK         |P_TAB2_GBL|              |                 |VALID |
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P1000         |                 |USABLE|
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P2000         |                 |USABLE|
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P3000         |                 |USABLE|
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P_MAX         |                 |USABLE|
    
    22 row(s) fetched.
    


    SPLIT 진행(인덱스 상태 변경없음)

    -- SPLIT
    ALTER TABLE sk.P_TAB1 SPLIT PARTITION P_MAX AT (4001) INTO (PARTITION P4000, PARTITION P_MAX) 
    0 row(s) modified.
    
    ALTER TABLE sk.P_TAB2 SPLIT PARTITION P_MAX AT (4001) INTO (PARTITION P4000, PARTITION P_MAX) 
    0 row(s) modified.
    
    -- 인덱스 상태 변경 없음, p_max의 모든 데이터가 신규파티션인 P4000으로 들어갔기 때문에
    SELECT TABLE_OWNER, TABLE_NAME, INDEX_OWNER, INDEX_NAME, PARTITION_NAME, SUBPARTITION_NAME, STATUS
    FROM (
    SELECT I.OWNER INDEX_OWNER, I.INDEX_NAME, '' PARTITION_NAME, '' SUBPARTITION_NAME, TO_NUMBER('') POSITION, TO_NUMBER('') SUB_POSITION,I.TABLE_OWNER, I.TABLE_NAME, I.STATUS
    FROM DBA_INDEXES I, DBA_PART_TABLES T
    WHERE I.TABLE_NAME=T.TABLE_NAME
    AND I.TABLE_OWNER=T.OWNER
    AND I.PARTITIONED='NO'
    UNION ALL
    SELECT A.OWNER INDEX_OWNER, A.INDEX_NAME, B.PARTITION_NAME, '' SUBPARTITION_NAME, B.PARTITION_POSITION, TO_NUMBER('') SUB_POSITION, A.TABLE_OWNER, A.TABLE_NAME, B.STATUS
    FROM DBA_INDEXES A, DBA_IND_PARTITIONS B
    WHERE A.OWNER = B.INDEX_OWNER
    AND A.INDEX_NAME = B.INDEX_NAME
    AND A.PARTITIONED = 'YES'
    AND B.SUBPARTITION_COUNT = 0
    UNION ALL
    SELECT A.OWNER INDEX_OWNER, A.INDEX_NAME, B.PARTITION_NAME, B.SUBPARTITION_NAME,B.PARTITION_POSITION, SUBPARTITION_POSITION, A.TABLE_OWNER, A.TABLE_NAME, B.STATUS
    FROM DBA_INDEXES A, DBA_IND_SUBPARTITIONS B
    WHERE A.OWNER = B.INDEX_OWNER
    AND A.INDEX_NAME = B.INDEX_NAME
    AND A.PARTITIONED = 'YES'
    )
    WHERE 1=1
    AND TABLE_OWNER NOT IN (SELECT USERNAME FROM DBA_USERS WHERE ORACLE_MAINTAINED = 'Y')
    AND INDEX_NAME NOT LIKE 'SYS_IL%'
    ORDER BY TABLE_OWNER, TABLE_NAME, INDEX_NAME, POSITION, SUB_POSITION
    
    
    TABLE_OWNER|TABLE_NAME|INDEX_OWNER|INDEX_NAME|PARTITION_NAME|SUBPARTITION_NAME|STATUS|
    -----------+----------+-----------+----------+--------------+-----------------+------+
    SK         |P_TAB1    |SK         |P_TAB1_GBL|              |                 |VALID |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP560      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP561      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP562      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP563      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP564      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP565      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP566      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP567      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP568      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP569      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP570      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP571      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P4000         |SYS_SUBP576      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P4000         |SYS_SUBP577      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P4000         |SYS_SUBP578      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P4000         |SYS_SUBP579      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP572      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP573      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP574      |USABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP575      |USABLE|
    SK         |P_TAB2    |SK         |P_TAB2_GBL|              |                 |VALID |
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P1000         |                 |USABLE|
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P2000         |                 |USABLE|
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P3000         |                 |USABLE|
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P4000         |                 |USABLE|
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P_MAX         |                 |USABLE|
    
    
    
    SELECT count(*) FROM sk.p_tab1 PARTITION(p_max) 
    COUNT(*)|
    --------+
           0|
    1 row(s) fetched.
    
    SELECT count(*) FROM sk.p_tab2 PARTITION(p_max) 
    COUNT(*)|
    --------+
           0|
    1 row(s) fetched.
    


    SPLIT 진행(인덱스 상태 변경됨)

    -- split 테스트(인덱스 깨짐 상황)
    -- MAX파티션에 데이터 적재
    INSERT INTO sk.p_tab1
    SELECT * FROM (
    SELECT LEVEL c1 , LEVEL c2 FROM dual CONNECT BY LEVEL <= 5500
    )
    WHERE c1 >= 4001
    ;
    COMMIT ;
    
    INSERT INTO sk.p_tab2
    SELECT * FROM (
    SELECT LEVEL c1 , LEVEL c2 FROM dual CONNECT BY LEVEL <= 5500
    )
    WHERE c1 >= 4001
    ;
    
    COMMIT ;
    
    
    -- 확인
    SELECT count(*) FROM sk.p_tab1 PARTITION(p_max) 
    
    COUNT(*)|
    --------+
        1500|
    
    1 row(s) fetched.
    
    
    SELECT count(*) FROM sk.p_tab2 PARTITION(p_max) 
    
    COUNT(*)|
    --------+
        1500|
    
    1 row(s) fetched.
    
    
    
    -- MAX파티션 테이터가 분리되도록 SPLIT
    ALTER TABLE sk.P_TAB1 SPLIT PARTITION P_MAX AT (5001) INTO (PARTITION P5000, PARTITION P_MAX) 
    
    1500 row(s) modified.
    
    ALTER TABLE sk.P_TAB2 SPLIT PARTITION P_MAX AT (5001) INTO (PARTITION P5000, PARTITION P_MAX) 
    1500 row(s) modified.
    
    SELECT count(*) FROM sk.p_tab1 PARTITION(p_max) 
    COUNT(*)|
    --------+
         500|
    
    1 row(s) fetched.
    
    
    SELECT count(*) FROM sk.p_tab2 PARTITION(p_max) 
    
    COUNT(*)|
    --------+
         500|
    
    1 row(s) fetched.
    
    -- 인덱스 상태 확인, UNUSABLE로 변경됨
    SELECT TABLE_OWNER, TABLE_NAME, INDEX_OWNER, INDEX_NAME, PARTITION_NAME, SUBPARTITION_NAME, STATUS
    FROM (
    SELECT I.OWNER INDEX_OWNER, I.INDEX_NAME, '' PARTITION_NAME, '' SUBPARTITION_NAME, TO_NUMBER('') POSITION, TO_NUMBER('') SUB_POSITION,I.TABLE_OWNER, I.TABLE_NAME, I.STATUS
    FROM DBA_INDEXES I, DBA_PART_TABLES T
    WHERE I.TABLE_NAME=T.TABLE_NAME
    AND I.TABLE_OWNER=T.OWNER
    AND I.PARTITIONED='NO'
    UNION ALL
    SELECT A.OWNER INDEX_OWNER, A.INDEX_NAME, B.PARTITION_NAME, '' SUBPARTITION_NAME, B.PARTITION_POSITION, TO_NUMBER('') SUB_POSITION, A.TABLE_OWNER, A.TABLE_NAME, B.STATUS
    FROM DBA_INDEXES A, DBA_IND_PARTITIONS B
    WHERE A.OWNER = B.INDEX_OWNER
    AND A.INDEX_NAME = B.INDEX_NAME
    AND A.PARTITIONED = 'YES'
    AND B.SUBPARTITION_COUNT = 0
    UNION ALL
    SELECT A.OWNER INDEX_OWNER, A.INDEX_NAME, B.PARTITION_NAME, B.SUBPARTITION_NAME,B.PARTITION_POSITION, SUBPARTITION_POSITION, A.TABLE_OWNER, A.TABLE_NAME, B.STATUS
    FROM DBA_INDEXES A, DBA_IND_SUBPARTITIONS B
    WHERE A.OWNER = B.INDEX_OWNER
    AND A.INDEX_NAME = B.INDEX_NAME
    AND A.PARTITIONED = 'YES'
    )
    WHERE 1=1
    AND TABLE_OWNER NOT IN (SELECT USERNAME FROM DBA_USERS WHERE ORACLE_MAINTAINED = 'Y')
    AND INDEX_NAME NOT LIKE 'SYS_IL%'
    ORDER BY TABLE_OWNER, TABLE_NAME, INDEX_NAME, POSITION, SUB_POSITION
    
    
    TABLE_OWNER|TABLE_NAME|INDEX_OWNER|INDEX_NAME|PARTITION_NAME|SUBPARTITION_NAME|STATUS  |
    -----------+----------+-----------+----------+--------------+-----------------+--------+
    SK         |P_TAB1    |SK         |P_TAB1_GBL|              |                 |UNUSABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP560      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP561      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP562      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP563      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP564      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP565      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP566      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP567      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP568      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP569      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP570      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP571      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P4000         |SYS_SUBP576      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P4000         |SYS_SUBP577      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P4000         |SYS_SUBP578      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P4000         |SYS_SUBP579      |USABLE  |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P5000         |SYS_SUBP580      |UNUSABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P5000         |SYS_SUBP581      |UNUSABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P5000         |SYS_SUBP582      |UNUSABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P5000         |SYS_SUBP583      |UNUSABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP572      |UNUSABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP573      |UNUSABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP574      |UNUSABLE|
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP575      |UNUSABLE|
    SK         |P_TAB2    |SK         |P_TAB2_GBL|              |                 |UNUSABLE|
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P1000         |                 |USABLE  |
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P2000         |                 |USABLE  |
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P3000         |                 |USABLE  |
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P4000         |                 |USABLE  |
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P5000         |                 |UNUSABLE|
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P_MAX         |                 |UNUSABLE|
    
    32 row(s) fetched.
    


    인덱스 rebuild 진행

    alter index SK.P_TAB1_GBL rebuild tablespace USERS online 
    0 row(s) modified.
    
    alter index SK.P_TAB1_LOC rebuild SUBPARTITION SYS_SUBP572 tablespace TS_DATA online 
    0 row(s) modified.
    
    alter index SK.P_TAB1_LOC rebuild subpartition SYS_SUBP580 tablespace TS_DATA online 
    0 row(s) modified.
    
    alter index SK.P_TAB1_LOC rebuild subpartition SYS_SUBP581 tablespace TS_DATA online 
    0 row(s) modified.
    
    alter index SK.P_TAB1_LOC rebuild subpartition SYS_SUBP582 tablespace TS_DATA online 
    0 row(s) modified.
    
    alter index SK.P_TAB1_LOC rebuild subpartition SYS_SUBP583 tablespace TS_DATA online 
    0 row(s) modified.
    
    alter index SK.P_TAB1_LOC rebuild subpartition SYS_SUBP573 tablespace TS_DATA online 
    0 row(s) modified.
    
    alter index SK.P_TAB1_LOC rebuild subpartition SYS_SUBP574 tablespace TS_DATA online 
    0 row(s) modified.
    
    alter index SK.P_TAB1_LOC rebuild subpartition SYS_SUBP575 tablespace TS_DATA online 
    0 row(s) modified.
    
    alter index SK.P_TAB2_GBL rebuild tablespace USERS online 
    0 row(s) modified.
    
    alter index SK.P_TAB2_LOC rebuild partition P5000 tablespace TS_DATA online 
    0 row(s) modified.
    
    alter index SK.P_TAB2_LOC rebuild partition P_MAX tablespace TS_DATA online 
    0 row(s) modified.
    
    SELECT TABLE_OWNER, TABLE_NAME, INDEX_OWNER, INDEX_NAME, PARTITION_NAME, SUBPARTITION_NAME, STATUS, tablespace_name
    FROM (
    SELECT I.OWNER INDEX_OWNER, I.INDEX_NAME, '' PARTITION_NAME, '' SUBPARTITION_NAME, TO_NUMBER('') POSITION, TO_NUMBER('') SUB_POSITION,I.TABLE_OWNER, I.TABLE_NAME, I.STATUS, i.tablespace_name
    FROM DBA_INDEXES I, DBA_PART_TABLES T
    WHERE I.TABLE_NAME=T.TABLE_NAME
    AND I.TABLE_OWNER=T.OWNER
    AND I.PARTITIONED='NO'
    UNION ALL
    SELECT A.OWNER INDEX_OWNER, A.INDEX_NAME, B.PARTITION_NAME, '' SUBPARTITION_NAME, B.PARTITION_POSITION, TO_NUMBER('') SUB_POSITION, A.TABLE_OWNER, A.TABLE_NAME, B.STATUS, b.tablespace_name
    FROM DBA_INDEXES A, DBA_IND_PARTITIONS B
    WHERE A.OWNER = B.INDEX_OWNER
    AND A.INDEX_NAME = B.INDEX_NAME
    AND A.PARTITIONED = 'YES'
    AND B.SUBPARTITION_COUNT = 0
    UNION ALL
    SELECT A.OWNER INDEX_OWNER, A.INDEX_NAME, B.PARTITION_NAME, B.SUBPARTITION_NAME,B.PARTITION_POSITION, SUBPARTITION_POSITION, A.TABLE_OWNER, A.TABLE_NAME, B.STATUS, b.tablespace_name
    FROM DBA_INDEXES A, DBA_IND_SUBPARTITIONS B
    WHERE A.OWNER = B.INDEX_OWNER
    AND A.INDEX_NAME = B.INDEX_NAME
    AND A.PARTITIONED = 'YES'
    )
    WHERE 1=1
    AND TABLE_OWNER NOT IN (SELECT USERNAME FROM DBA_USERS WHERE ORACLE_MAINTAINED = 'Y')
    AND INDEX_NAME NOT LIKE 'SYS_IL%'
    ORDER BY TABLE_OWNER, TABLE_NAME, INDEX_NAME, POSITION, SUB_POSITION
    
    
    TABLE_OWNER|TABLE_NAME|INDEX_OWNER|INDEX_NAME|PARTITION_NAME|SUBPARTITION_NAME|STATUS|TABLESPACE_NAME|
    -----------+----------+-----------+----------+--------------+-----------------+------+---------------+
    SK         |P_TAB1    |SK         |P_TAB1_GBL|              |                 |VALID |USERS          |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP560      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP561      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP562      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P1000         |SYS_SUBP563      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP564      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP565      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP566      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P2000         |SYS_SUBP567      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP568      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP569      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP570      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P3000         |SYS_SUBP571      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P4000         |SYS_SUBP576      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P4000         |SYS_SUBP577      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P4000         |SYS_SUBP578      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P4000         |SYS_SUBP579      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P5000         |SYS_SUBP580      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P5000         |SYS_SUBP581      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P5000         |SYS_SUBP582      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P5000         |SYS_SUBP583      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP572      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP573      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP574      |USABLE|TS_DATA        |
    SK         |P_TAB1    |SK         |P_TAB1_LOC|P_MAX         |SYS_SUBP575      |USABLE|TS_DATA        |
    SK         |P_TAB2    |SK         |P_TAB2_GBL|              |                 |VALID |USERS          |
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P1000         |                 |USABLE|TS_DATA        |
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P2000         |                 |USABLE|TS_DATA        |
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P3000         |                 |USABLE|TS_DATA        |
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P4000         |                 |USABLE|TS_DATA        |
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P5000         |                 |USABLE|TS_DATA        |
    SK         |P_TAB2    |SK         |P_TAB2_LOC|P_MAX         |                 |USABLE|TS_DATA        |
    
    32 row(s) fetched.
    
    

    댓글