partittion 테이블에서 글로벌 인덱스를 조회하는 방법이 있을까요?
아무리 찾아봐도 알 수 없어서 여기 질문드립니다.
질문의 의도를 파악하기 힘드네요. 어떤 상황이시고, 어떤 문제를 해결하고 싶으신지, 좀더 구체적으로 기술해주세요.
dba_indexes, dba_part_indexes 에서 인덱스를 조회해보면
local 만 조회가 가능합니다.
근대 global 인덱스를 찾아야 하는 경우가 종종 있는데,
정확히 global 인덱스를 찾는 뷰나 방법이 있는지를 문의하는 겁니다.
dba_part_indexes는 partition된 local index의 partition 정보를 포함하고 있으므로 global index정보는 찾을수 없지만, dba_indexes는 global index를 포함한 모든 index 목록을 가지고 있습니다. dba_indexes.partitioned 컬럼의 값을 가지고 global인지 local인지 확인할수 있구요.
SQL> SQL> create table sales_range 2 ( 3 salesman_id number(5), 4 salesman_name varchar2(30), 5 sales_amount number(10), 6 sales_date date 7 ) 8 partition by range(sales_date) 9 ( 10 partition sales_jan2000 values less than(to_date('02/01/2000','dd/mm/yyyy')), 11 partition sales_feb2000 values less than(to_date('03/01/2000','dd/mm/yyyy')), 12 partition sales_mar2000 values less than(to_date('04/01/2000','dd/mm/yyyy')), 13 partition sales_apr2000 values less than(to_date('05/01/2000','dd/mm/yyyy')) 14 ); Table created. SQL> SQL> SQL> create index sales_range_salesman_gidx on sales_range ( salesman_id ); Index created. SQL> SQL> create index sales_range_sales$_date_lidx on sales_range( sales_amount, sales_date) local; Index created. SQL> SQL> select index_name, table_name, partitioned 2 from user_indexes where table_name = 'SALES_RANGE'; INDEX_NAME TABLE_NAME PAR ------------------------------ ------------------------------ --- SALES_RANGE_SALESMAN_GIDX SALES_RANGE NO SALES_RANGE_SALES$_DATE_LIDX SALES_RANGE YES
감사합니다. 이렇게 찾으면 될 거 같네요 ^^
select owner, table_name, index_name, index_type, partitioned from dba_indexes
where 1=1
AND PARTITIONED = 'NO'
AND (TABLE_OWNER, TABLE_NAME) IN (
SELECT OWNER, TABLE_NAME FROM DBA_TABLES
WHERE PARTITIONED = 'YES'
AND OWNER NOT IN
(
'RMAN','SYS', 'SYSTEM', 'S_VIEW', 'CTXSYS', 'DBSNMP' ,
'WMSYS', 'XDB', 'OLAPSYS', 'QUEST', 'MDSYS', 'WKSYS',
....
)
ORDER BY 1,2,3
;