1. SHRINK 작업의 정의
- SEGMENT에 할당된 EXTENT를 TABLESPACE로 반환하는 작업
- SHRINK 작업으로 SEGMENT의 용량은 줄어들고, TABLESPACE의 용량은 줄어들지 않음(TABLESPACE의 용량은 축소시키기 위해서는 RESIZE 작업이 필요함)
- 장점: INSERT,DELETE를 통해 데이터를 이동하기 때문에 추가적인 공간이 필요하지 않음
- 단점: 일부 데이터만 이동하기 때문에 Row Migration이나 Chaining이 전체적으로 해결되지 않음
(출처: http://www.slideshare.net/ashilo/getting-to-know-oracle-database-objects-iot-mviews-clusters-and-more)
- 빈 공간이 있는 데이터 블록의 데이터를 다른 빈 공간이 있는 데이터 블록에 적재(INSERT)
- 기존 데이터 삭제(DELETE)
- 고수위 이동
[작업 전 주의사항]
- Oracle 10g 이상 가능
- 관리 방식이 ASSM인 세그먼트에 대해서만 가능
- SHRINK 작업 대상 테이블의 ROWID를 사용하는 오브젝트에 대해서 DISABLE 후 진행 또는 진행 후 재구성 필요
- 데이터 블록 변경 작업이 INSERT, DELETE이기 때문에 Undo TABLESPACE를 사용. 따라서 변경 대상만큼의 Undo TABLESPACE 확장이 필요함
[작업순서]
- SHRINK 대상 테이블 선정
- 대상 테이블의 인덱스 삭제
- 대상 테이블 NOLOGGING 변경
- 테이블에 걸린 TRGGIER DISABLE 변경
- 테이블의 ROW MOVEMENT를 ENABLE로 변경
- SHRINK 작업 진행
- 테이블의 ROW MOVEMENT를 DISABLE로 변경
- 대상 테이블 LOGGING 변경
- 삭제한 인덱스 생성
- 테이블에 걸린 TRIGGER ENABLE 변경
4. 테스트
4.1. 테이블스페이스 생성
CREATE TABLESPACE TEST_DATA DATAFILE 'C:\TABLESPACE\DATA\TEST_01.DBF' SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED ;
4.2. 테이블스페이스 용량 확인
SELECT TABLESPACE_NAME, BYTES / 1024 / 1024 MB, FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'TEST_DATA';
|
4.3. 테이블 생성
CREATE TABLE SHRINK_TEST(VAL1 NUMBER ,VAL2 VARCHAR2(100) ) TABLESPACE TEST_DATA;
4.4. 데이터 적재
DECLARE BEGIN FOR I IN 1..1000000 LOOP INSERT INTO SHRINK_TEST(VAL1,VAL2) VALUES(I,'TEST'||I); IF MOD(I,10000) = 0 THEN COMMIT; END IF; END LOOP; END; /
4.5. DATAFILE과 SEGMENT 용량 확인
SELECT TABLESPACE_NAME, BYTES / 1024 / 1024 MB, FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'TEST_DATA';
SELECT SEGMENT_NAME, BYTES/1024/1024 AS "SIZE(MB)" FROM DBA_SEGMENTS WHERE SEGMENT_NAME = 'SHRINK_TEST' ;
|
4.6. 데이터 삭제
DELETE SHRINK_TEST WHERE VAL1 BETWEEN 2000 AND 400000 ; COMMIT;
4.7.테이블 NOLOGGING 변경
ALTER TABLE SHRINK_TEST NOLOGGING;
4.8. SHRINK 작업
ALTER TABLE SHRINK_TEST ENABLE ROW MOVEMENT; ALTER TABLE SHRINK_TEST SHRINK SPACE ;
4.9. DATAFILE과 SEGMENT 용량 확인
|
|
4.10. 테이블 LOGGING 변경
ALTER TABLE SHRINK_TEST LOGGING;
ALTER TABLE SHRINK_TEST DISABLE ROW MOVEMENT;
'Oracle > Admin' 카테고리의 다른 글
[Oracle][Admin] SQL을 활용하여 오라클 데이터 파일 축소 작업 (0) | 2017.02.06 |
---|---|
[Admin] 컨트롤파일, 데이터파일, 리두로그파일 경로 변경 (0) | 2016.11.01 |
Oracle Hot backup 시 scn 확인 (0) | 2015.10.30 |
ORACLE AUDIT (0) | 2015.07.06 |
USER 및 PROFILE 생성 (0) | 2015.07.01 |