새싹 DBA/Scripts
[오라클] 파티션 테이블 테이블스페이스 변경, 인덱스 리빌드
LIMMI
2024. 10. 11. 16:31
1. 파티션 테이블 조회
SELECT * FROM DBA_PART_TABLES
WHERE OWNER IN ('OWNER');
2. 파티션 테이블의 파티션 조회
SELECT *
FROM DBA_TAB_PARTITIONS
WHERE TABLE_OWNER IN ('OWNER');
3. 파티션 인덱스 조회
SELECT *
FROM DBA_PART_INDEXES
WHERE OWNER = 'OWNER';
4. 파티션 별 로컬 인덱스 조회
SELECT *
FROM DBA_IND_PARTITIONS
WHERE INDEX_OWNER = 'OWNER';
5. 글로벌 파티션 조회
SELECT *
FROM DBA_INDEXES
WHERE TABLE_NAME = 'TABLENAME';
6. 파티션 테이블의 DEFAULT TABLESPACE 변경
ALTER TABLE OWNER.TABLE명 MODIFY DEFAULT ATTRIBUTES TABLESPACE 테이블스페이스명;
7. 파티션 테이블 INDEX TABLESPACE DEFAULT 변경
ALTER INDEX 인덱스명 MODIFY DEFAULT ATTRIBUTES TABLESPACE 테이블스페이스명;
8. 이미 생성된 파티션의 테이블 스페이스 변경
-- 한번에 바꿀 수 없음--
SELECT 'ALTER TABLE '||'TABLE_NAME||' MOVE PARTITION '||PARTITION_NAME ||' TABLESPACE 테이블스페이스명;'
FROM DBA_TAB_PARTITIONS
WHERE TABLE_NAME = '테이블명'
ORDER BY PARTITION_NAME;
9. 인덱스 STATUS 조회 ( UNUSABLE, 리빌드가 필요한 인덱스)
--로컬 인덱스
SELECT *
FROM DBA_IND_PARTITIONS A
, DBA_PART_INDEXES B
WHERE A.INDEX_OWNER = '인덱스오너명'
AND A.INDEX_NAME = B.INDEX_NAME
AND A.STATUS <> 'USABLE'
--AND B.TABLE_NAME = '테이블명';
-- 글로벌 인덱스
SELECT *
FROM DBA_INDEXES
WHERE STATUS <> 'VALID';
10. 인덱스 리빌드
--글로벌 인덱스 리빌드
ALTER INDEX 소유자.인덱스명 REBUILD; -- TABLESPACE 테이블스페이스명;
-- 로컬 인덱스 리빌드 / 한번에 안됨
SELECT 'ALTER INDEX 소유자.'||A.INDEX_NAME||' REBUILD PARTITION '||A.PARTITION_NAME||';'
FROM DBA_IND_PARTITIONS A
, DBA_PART_INDEXES B
WHERE B.TABLE_NAME = '테이블명'
AND A.INDEX_NAME = B.INDEX_NAME
AND A.STATUS = 'UNUSABLE'
ORDER BY A.INDEX_NAME, A.PARTITION_NAME;