1. 옮길 Tablespace의 용량 확인
- tablespace 여유공간이 부족하면 진행하다 에러 발생
select sum(bytes)/1024/1024/1024
from dba_segments
where tablespace_name = '테이블스페이스명';
- 만약 tablespace가 없다면 만들고, 용량 부족하면 늘리기
-- tablespace 신규 생성
create tablespace 테이블스페이스명 datafile '/경로/테이블스페이스파일명.dbf'
size 초기용량(100m,1g 등) autoextend [on/off] maxsize 용량;
-- tablespace 용량 추가
alter database datafile '특정파일' autoextend [on/off] maxsize 용량;
2. Table 옮기기
- 우선 파티션이 있는지, 압축이 되었는지 확인해야함.
2-1. 파티션X + 압축X
SELECT 'ALTER TABLE ' || OWNER ||'.'|| TABLE_NAME || ' MOVE TABLESPACE 테이블스페이스명 NOLOGGING PARALLEL 16;'
FROM dba_tables
WHERE compression <> 'ENABLED'
AND partitioned = 'NO';
2-2. 파티션O + 압축X
-- PARTITION 있는 경우
SELECT 'ALTER TABLE ' || OWNER ||'.'|| TABLE_NAME || ' MOVE PARTITION ' || PARTITION_NAME || ' TABLESPACE 테이블스페이스명 NOLOGGING PARALLEL 16;'
FROM dba_tab_partitions
WHERE SUBPARTITION_COUNT = 0;
-- SUBPARTITION 있는 경우
SELECT 'ALTER TABLE ' || OWNER ||'.'|| TABLE_NAME || ' MOVE SUBPARTITION ' || PARTITION_NAME || ' TABLESPACE 테이블스페이스명 NOLOGGING PARALLEL 16;'
FROM dba_tab_subpartitions;
2-3. 파티션O + 압축O
-- PARTITION 있는 경우
SELECT 'ALTER TABLE ' || OWNER ||'.'|| TABLE_NAME || ' MOVE PARTITION ' || PARTITION_NAME || ' COMPRESS FOR ' || COMPRESS_FOR ||' TABLESPACE 테이블스페이스명 NOLOGGING PARALLEL 16;'
FROM dba_tab_partitions a
WHERE compression = 'ENABLED'
AND table_name in (select table_name from dba_part_tables c
where a.owner=c.owner and a.table_name=c.table_name and c.subpartitioning_type='NONE');
-- SUBPARTITION 있는 경우
SELECT 'ALTER TABLE ' || OWNER ||'.'|| TABLE_NAME || ' MOVE SUBPARTITION ' || PARTITION_NAME || ' COMPRESS FOR ' || COMPRESS_FOR ||' TABLESPACE 테이블스페이스명 NOLOGGING PARALLEL 16;'
FROM dba_tab_subpartitions;
3. Lobs 옮기기
3-1. 파티션X
SELECT 'ALTER TABLE ' || OWNER ||'.'|| TABLE_NAME || ' MOVE TABLESPACE ' || TABLESPACE_NAME || ' LOB(' || COLUMN_NAME || ') STORE AS (TABLESPACE 옮길테이블스페이스명) PARALLEL 16;'
FROM dba_lobs
WHERE compression <> 'ENABLED'
AND partitioned = 'NO';
3-2. 파티션O
-- PARTITION 있는 경우
SELECT 'ALTER TABLE ' || OWNER ||'.'|| TABLE_NAME || ' MOVE PARTITION ' || PARTITION_NAME || ' TABLESPACE || TABLESPACE_NAME || LOB(' || COLUMN_NAME || ') STORE AS (TABLESPACE 옮길테이블스페이스명) PARALLEL 16;'
FROM dba_lob_partitions
WHERE SUBPARTITION_COUNT = 0;
-- SUBPARTITION 있는 경우
SELECT 'ALTER TABLE ' || OWNER ||'.'|| TABLE_NAME || ' MOVE SUBPARTITION ' || SUBPARTITION_NAME || ' TABLESPACE || TABLESPACE_NAME || LOB(' || COLUMN_NAME || ') STORE AS (TABLESPACE 옮길테이블스페이스명) PARALLEL 16;'
FROM dba_lob_subpartitions;
4. Index 옮기기
4-1. 파티션X
SELECT 'ALTER INDEX ' || INDEX_OWNER ||'.'|| INDEX_NAME || ' REBUILD TABLESPACE 옮길테이블스페이스명 NOLOGGING PARALLEL 16;'
FROM dba_indexes
WHERE partitioned = 'NO'
AND index_name not like 'SYS_IL%';
4-2. 파티션O
-- PARTITION 있는 경우
SELECT 'ALTER INDEX ' || A.INDEX_OWNER ||'.'|| A.INDEX_NAME || ' REBUILD PARTITION ' || A.PARTITION_NAME || ' TABLESPACE 옮길테이블스페이스명 NOLOGGING PARALLEL 16;'
FROM dba_ind_partition A, dba_indexes C
WHERE A.index_name = C.index_name
AND A.index_owner = C.owner
AND A.subpartition_count = 0
AND A.index_name NOT LIKE 'SYS_IL%';
-- SUBPARTITION 있는 경우
SELECT 'ALTER INDEX ' || A.INDEX_OWNER ||'.'|| A.INDEX_NAME || ' REBUILD SUBPARTITION ' || A.SUBPARTITION_NAME || ' TABLESPACE 옮길테이블스페이스명 NOLOGGING PARALLEL 16;'
FROM dba_ind_subpartition A, dba_indexes C
WHERE A.index_name = C.index_name
AND A.index_owner = C.owner
AND A.index_name NOT LIKE 'SYS_IL%';
5. NOLOGGING+PARALLEL을 LOGGING+NOPARALLEL로 바꾸기
5-1. Table
SELECT 'ALTER TABLE ' || OWNER ||'.'|| TABLE_NAME || ' LOGGING NOPARALLEL;'
FROM dba_tables;
5-2. Lobs
SELECT 'ALTER TABLE ' || OWNER ||'.'|| TABLE_NAME || ' MODIFY LOB(' || COLUMN_NAME || ') (NOCACHE LOGGING) NOPARALLEL;'
FROM dba_lobs;
5-3. Index
SELECT 'ALTER INDEX ' || INDEX_OWNER ||'.'|| TABLE_NAME || ' LOGGING NOPARALLEL;'
FROM dba_indexes;
6. Default Tablespace 확인
6-1. Table
-- PARTITION 없는 경우
SELECT 'ALTER TABLE ' || OWNER ||'.'|| TABLE_NAME || ' MODIFY DEFUALT ATTRIBUTES FOR PARTITION ' || PARTITION_NAME || ' TABLESPACE 옮길테이블스페이스명;'
FROM DBA_PART_TABLES;
-- PARTITION 있는 경우(하위 세그먼트가 있는 경우만 진행 -> SUBPARTITION은 하위 세그먼트 없어서 안함 )
SELECT 'ALTER TABLE ' || OWNER ||'.'|| TABLE_NAME || ' MODIFY DEFUALT ATTRIBUTES TABLESPACE 옮길테이블스페이스명;'
FROM DBA_TAB_PARTITIONS
WHERE A.SUBPARTITION_COUNT = 0;
-- SUBPARTITION TEMPLATE 있음
6-2 Lobs
-- PARTITION 없는 경우
SELECT 'ALTER TABLE ' || OWNER ||'.'|| TABLE_NAME || ' MODIFY DEFUALT ATTRIBUTES LOB(' || COLUMN_NAME || ') ( TABLESPACE 옮길테이블스페이스명);'
FROM DBA_LOBS;
-- PARTITION 있는 경우
SELECT 'ALTER TABLE ' || OWNER ||'.'|| TABLE_NAME || ' MODIFY DEFUALT ATTRIBUTES FOR PARTITION ' || PARTITION_NAME || ' LOB(' || COLUMN_NAME || ') ( TABLESPACE 옮길테이블스페이스명);'
FROM DBA_LOB_PARTITIONS;
6-3. Index
-- PARTITION 없는 경우
SELECT 'ALTER INDEX ' || INDEX_OWNER ||'.'|| INDEX_NAME || ' MODIFY DEFUALT ATTRIBUTES TABLESPACE 옮길테이블스페이스명;'
FROM DBA_PART_INDEXES;
-- PARTITION 있는 경우
SELECT 'ALTER INDEX ' || INDEX_OWNER ||'.'|| INDEX_NAME || ' MODIFY DEFUALT ATTRIBUTES FOR PARTITION ' || PARTITION_NAME || ' TABLESPACE 옮길테이블스페이스명;'
FROM DBA_IND_PARTITIONS;
7. Quota 확인
SELECT 'GRANT UNLIMITED TABLESPACE TO ' || USERNAME || ';' || CHR(10) ||
'ALTER USER ' || USERNAME || ' QUOTA 0 ON 새로옮긴테이블스페이스명;'
FROM DBA_TS_QUOTAS;
'Oracle' 카테고리의 다른 글
[Oracle] Tablespace 개념 및 생성/추가/Resize/용량 확인 (0) | 2025.05.14 |
---|---|
[Oracle] 오라클 파라미터 파일 : 환결설정 파일 spfile, pfile 알아보기 (0) | 2025.05.13 |
[Oracle] DBLink를 이용한 impdp 사용하기 (0) | 2025.05.04 |
[Oracle] 데이터 이동 Datapump impdp로 dump file 가져오기 (0) | 2025.05.04 |
[Oracle] 데이터 이동 Datapump expdp로 dump file 추출하기 (0) | 2025.05.04 |