반응형

 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
반응형
반응형

# sqlldr oracleID/passwd@SID control=test.ctl log=test.log data=test.csv

    

    control : sqlldr 수행에 필요한 여러가지 옵션 사항을 기술한 control파일 위치 기술
    log : 작업 결과를 저장할 log파일 기술

    data : 데이터 파일 기술
 

    LOAD DATA         

        INFILE 데이터파일

        REPLACE       IMPORT방식

        INTO TABLE 테이블명   

        FIELDS TERMINATED BY '필드구분자'     

        OPTIONALLY ENCLOSED BY '"'

        (필드1, 필드2, 필드3, ... 필드9) 

 

    * IMPORT방식
       - REPLACE : 테이블의 기존행을 DELETE하고 INSERT
       - TRUNCATE : 테이블의 기존 데이타를 truncate하고 INSERT
       - APPEND : 기존 데이타의 다음부터 추가
       - INSERT 비어있는 테이블에 넣을때 사용(최초 사용시 사용)

 

ex)

LOAD DATA
    INFILE test.csv
    INTO TABLE TEST
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(TEST1, TEST2, TEST3)

 

test.csv 의 내용

1,2,3

3,4,5

6,7,8

 

결과 적으로 사용하는 방법은

 

1. test.ctl 이라는 파일을 만듭니다.

2. test.ctl 파일에는 위의 LOAD DATA 쿼리가 들어가게 됩니다.

3. 데이터 파일을 위치 시킵니다.( 위의 예로 test.csv 파일을 가리킵니다. )

4. sqlldr 명령어를 사용합니다.

$ sqlldr  아이디/패스워드@SID control=컨트롤파일(test.ctl) data=데이터파일(test.csv)

 

위의 방식대로 하시면 손쉽게 대량의 데이터를 오라클 DB에 insert 하실수 있으실것입니다.

 

저는 test.ctl 파일과 test.csv 파일을 같은 디렉토리에 위치시키고 실행하였습니다.

 

그럼 손쉬운 오라클 insert 가 되었으면 합니다.

 

Reference URL

http://www.cyworld.com/exodus_youngsik/196484

반응형
반응형

ORA-00054: 자원이 사용중이고, NOWAIT가 지정되어 있습니다 해결 방법

테이블명이 WOONJIN의 LOCK 걸려있는 SID와 SERIAL을 찾는다.

select a.sid, a.serial#
from v$session a, v$lock b, dba_objects c
where a.sid=b.sid and
b.id1=c.object_id and
b.type='TM' and
c.object_name='JOONI';


SID SERIAL#
--- -------
82   8210


alter system kill session '82, 8210';

반응형

+ Recent posts