반응형

LOB 정보가 기간이 지나 삭제가 필요할때...

LOB 정보가 있는 테이블 : LOB_TABLE
LOB 정보가 있는 필드 : LOB_DATA

-- LOB_TABLE 있는 LOG_DATA 필드의 값을 모두 없는 것으로 처리
UPDATE LOB_TABLE
     SET LOG_DATA = EMPTY_CLOB()
 WHERE 조건

-- LOB 공간 SHRINK 할수 있도록 데이터 압축해 놓기
ALTER TABLE LOB_TABLE
MODIFY LOB(LOB_DATA) (SHRINK SPACE COMPACT);

* 만약 에러가 나면 ROW MOVEMENT ENABLE 설정을 참고 !

-- LOB 공간 실제 SHRINK 하기
ALTER TABLE LOB_TABLE
MODIFY LOB(LOB_DATA) (SHRINK SPACE);
반응형
반응형

기존에는 테이블을 새로 작성(reorg)  작업을 통해

커진 테이블 스페이스 크기를 복구 가능하였으나

10g 부터는 shrink 기능을 이용하여 손쉽게 테이블을 줄일수 있게 되었다.

Shrink 기능은 HWM(High Water Mark)를 줄일수 있는 기능이다.


- 사전 확인 사항

init.ora 파일내에 compatible = 10.2 이상인것을 확인

ASSM (Automatic Segment Space Management) 테이블 스페이스여만 가능

각 테이블 조회 방법은

SELECT obj.owner
,obj.table_name
,(CASE WHEN NVL(idx.cnt, 0) < 1 THEN 'YES' ELSE 'NO' END) shrinkable
FROM dba_tables obj,
(SELECT table_name, COUNT(rownum) cnt
FROM dba_indexes
WHERE index_type LIKE 'FUN%'
GROUP BY table_name) idx
WHERE obj.table_name = idx.table_name(+)
AND obj.tablespace_name = upper('&1')

쿼리를 통해 (테이블 스페이스 명을 인자값으로)

확인 가능하다.

1. 테이블 검색 방법

SELECT * FROM TABLE(DBMS_SPACE.ASA_RECOMMENDATIONS());

아래와 같이 테이블의 DBA_SEGMENTS에서 볼수 있는 크기와

축소 가능 크기가 조회된다.

SEGMENT_OWNER SEGMENT_NAME SEGMENT_TYPE PARTITION_NAME ALLOCATED_SPACE USED_SPACE RECLAIMABLE_SPACE
MAX_TI SMR_IF_LOG TABLE 6761793074 5910149080 851643994
MAX_TI SMR_IF_LOG_I01 INDEX 478455081 420139142 58315939
MAX_TI SMR_IF_LOG_I02 INDEX 411921243 398204079 13717164


2. 축소하기

가장 먼저 행들을 이동 가능하도록 변경한다.

위의 SMR_IF_LOG 테이블을 기준으로 설명하겠다.

ALTER TABLE SMR_IF_LOG ENABLE ROW MOVEMENT;

--> 반대로는 ALTER TABLE SMR_IF_LOG DISABLE ROW MOVEMENT; 이다..

이제 SHRINK 기능을 수행할수 있으며

다음 3가지 형태로 가능하다

① ALTER TABLE SMR_IF_LOG SHRINK SPACE; 
    -- SMR_IF_LOG 테이블의 공간만 TABLESPACE로 환원

② ALTER TABLE SMR_IF_LOG SHRINK SPACE CASCADE;
    -- 모든 관련 OBJECT까지 TABLESPACE으로 공간 환원

③ ALTER TABLE SMR_IF_LOG SHRINK SPACE COMPACT;
   -- 행들만 이동시킴.



※ SHRINK 를 적용 시킬  없는 테이블
UNDO segments
temporary segments
clustered tables
tables with a column of datatype LONG
LOB indexes
IOT mapping tables and IOT overflow segmnets
tables with MVIEWS with ON COMMIT
tables with MVIEWS which are based on ROWIDs.
반응형
반응형

 Oracle 10g Table 데이터 삭제후 size변경관련
Oracle>기타 1427
정종필(miso177150) 2007-12-10 14:21:15.0

안녕하세요.

Oracle 10g를 사용하구있구요..특정 Table 편의를위해 "A"라고하겠습니다.

A 테이블에 성능Data가 들어가있습니다. 2006년 6월부터 현재까지의  data가 들어가있는데

정책변경으로 인해서,최근 3달만 보관하기로해서..2007년 8월까지의 data는 모두삭제를 했습니다.

삭제하기전 table사이즈는 100G였고,삭제한후에도 여전히 100G입니다.

 

Reorg를 통해서만,Table의 사이즈를 현재 data가 저장된 용량으로 만들수 있나요??

Reorg를 하지 않고,삭제된 data만큼 table사이즈를 갱신할 수 있는 방법이 있으면 알려주시기 바랍니다.

고수님들의 답변 부탁드리겠습니다.

김민수(minsu74) 07/12/10
 Oracle 10g Table 데이터 삭제후 size변경관련

Oracle 10g 를 사용하시면 Online Segment Shrink 기능을 이용하셔서

HWM 의 조정이 가능하여 Table Size를 줄이실 수 있습니다.

대량의 데이터를 삭제하는 것 보다는 새롭게 테이블을 Reorg 하는 작업이 더 빠르지만,

이미 오래된 데이터를 delete 로 삭제하신 것 같네요...^^

 

먼저 확인해야 할 사항은

Init.ora 파라미터인 'Compatible' 값이 10.0 이상이여야 하며,

Shrinking 하려는 대상 Segment 는 ASSM(Auto Segment Space Managed) Tablespace 내에

존재해야 합니다.

 

실제 실행 방법은

1. 테이블의 row movement 기능을 활성화

 SQL> ALTER TABLE scott.emp ENABLE ROW MOVEMENT;

2. 테이블과 HWM 를 shrink

 SQL> ALTER TABLE scott.emp SHRINK SPACE;

 

cf) 테이블 및 관련된 인덱스를 모두 shrink

 SQL > ALTER TABLE scott.emp SHRINK SPACE CASCADE;

 

Online Segment Shrink 적용 대상 세그먼트는

Normal Table, Index, Lob, IOT, MView 이며,

Segment Shrink 할 때의 Online 처리는 DML-Shared Lock 을 사용하기 때문에

Shrink 를 처리하는 동안에도 DML 작업이 가능하지만, parallel DML 은 수행될 수 없습니다.

또한, space-relase/HWM 조정을 하는 단계에서는 exclusive 모드로 lock 이 걸립니다.

하지만, 이 단계는 매우 짧은 시간이 소요되므로, 객체에 대한 가용성에 미치는 영향은 최소화 됩니다.

 

기타 자세한 사항이나 제약 사항들은 관련 메뉴얼을 참고하세요...



출처 : http://www.dbguide.net/dbqa/dbqa111003.jsp?catenum=27&page=1&idx=8574
반응형

+ Recent posts