Programming/Oracle

오라클 블록의 단편화 해결방법(테이블 move편)

초록깨비 2024. 7. 9. 14:03
728x90

 

오라클에서 블록의 단편화 해결 방법 3가지

 

대표사진 삭제

블록의 단편화 해결 방안

이중에서 두번째 방법인 테이블 move편 입니다

 

 

1) 데이터 삭제

DELETE FROM employees WHERE department_id = 10;

COMMIT;

 

2) 테이블 MOVE(오라클 8i (8.1.5) 이상) : 테이블을 물리적 재배치

ALTER TABLE employees MOVE;

 

ALTER TABLE ... MOVE 명령은 오라클 8i (8.1.5) 버전부터 사용할 수 있습니다.

이 명령은 테이블을 이동하여 블록 단편화를 줄이고 테이블의 물리적 구조를 최적화하는 데 사용됩니다.

 

* 파티션 테이블 이동 :

테이블이 파티션 되어 있다면! 파티션 단위로 이동 가능합니다(오라클 8i (8.1.5) 이상)

 

ALTER TABLE 테이블명 MOVE PARTITION 파티션명;

 

* 온라인 이동 :

데이터베이스가 가동 중인 동안에도 작업을 수행 가능(오라클 12c (12.1) 이상)

ALTER TABLE 테이블명 MOVE ONLINE;

 

* 특정 테이블스페이스로 테이블 이동 :

ALTER TABLE employees MOVE TABLESPACE new_tablespace_name;

 

3) 인덱스 리스트 조회

SELECT 'ALTER INDEX ' || index_name || ' REBUILD;'

FROM user_indexes

WHERE table_name = 'EMPLOYEES';

 

4) 인덱스를 재구성 명령어 실행(해당 테이블의 인덱스 모두를 REBUILD)

ALTER INDEX emp_name_idx REBUILD;

 

테이블을 MOVE한 후에는 해당 테이블에 연결된 인덱스가 UNUSABLE 상태가 됩니다.

따라서 인덱스를 재구성해야 합니다.

 

5) 통계정보 갱신(옵션)

SQL> exec dbms_stats.gather_table_stats('EMPLOYEES', cascade=>true)

 

 

 

[ 변화 및 효과 ]

1. 블록 단편화 해결

- 테이블을 MOVE하면 블록 단편화가 줄어들고, 테이블의 물리적 구조가 최적화 됩니다 -> 테이블 성능 향상

2. 행이동

- 테이블의 모든 행이 새로운 위치로 이동합니다

- 기존 행의 ROWID가 변경 됩니다

3. 공간 재사용

- MOVE 작업 후 원래 테이블 공간의 빈 블록이 다시 사용 가능합니다

 

[ 제약 사항 및 고려 사항]

1. 인덱스 상태

- 테이블 MOVE 후 해당 테이블에 연결된 인덱스는 UNUABLE 상태가 됩니다

- 인덱스 재구성(REBUILD) 해야 합니다

2. ROWID 변경

- ROWID를 사용하는 애플리케이션이 있으면 수정해야 할 수 있습니다

3. 테이블 LOCK

- 테이블에 락을 걸어 다른 작업을 중단 시킵니다

- ALTER TABLE ... MOVE ONLINE을 사용하면 락 문제를 완화할수 있지만

오라클 12C 이상에서만 가능합니다

4. 가용성

- MOVE하는 동안 해당 테이블에 대한 DML 작업이 불가능합니다

- 온라인 이동을 사용하면 테이블 가용성을 유지할 수 있습니다

5. 권한 및 제한

- 테이블을 MOVE 하려면 해당 테이블에 대한 ALTER 권한이 필요합니다

 

728x90