Oracle 대량 데이터 삭제 진행 방법 0 4 320

by 고수로. [SQL Query] [2018.02.12 09:56:51]


안녕하세요. 데이터 삭제 관련 문의 드립니다.

몇몇 테이블 관련 예전 데이터를 삭제진행을 앞두고 있습니다.

삭제 대상 데이터가 생각 외로, 상당히 많네요.(각 테이블별 1억건정도?..)

해당 테이블들은 사용 빈도수가 빈번하여 어떤식으로 이 많은 데이터 삭제를 진행해야 할지 고민입니다.

고수님들의 좋은 조언 부탁 드립니다....(제가 고민되는 부분은 혹시 일괄로 삭제를 할경우 시간도 오래 걸릴뿐더러 락이 걸리지 않을까 걱정입니다.)

소중한 답변 기다리겠습니다. (__)

by 우리집아찌 [2018.02.12 10:56:58]

시간도 오래 걸릴뿐더러 락이 걸리지 않을까 걱정입니다. <=일단 야간에 작업하셔할겁니다.

파티션 테이블로 되어있으신가요? <= 파티션이 되어있으면 의외로 간단해질수있습니다.

삭제후 얼마 남아있는 데이터가 얼마 안된다. <= 삭제보다 INSERT 후  테이블 명을 바꾸는게 나을수 있습니다. 물론 인덱스명도 같이 바꿔주셔야합니다.

이도저도 아니다. 

ALTER TALBE 테이블명 NOLOGGING;

DELETE FROM 테이블명 

WHERE 조건...

이정도 밖에 못해드리겠네요.

 

 

 

 

 


by 고수로. [2018.02.12 11:09:08]

Procedure를 생성해서 삭제를 진행할 예정인데요. 커서를 이용하여 루프를 돌면서 10만건정도씩 Commit 을 했을경우에도 Lock이 발생할 확률이 있을까요..

(추가적으로 삭제할 대상 데이터는 예전 자료이기에 해당 Row들이 실제 운영상에 사용될일은 없다는 가정입니다.)


by 우리집아찌 [2018.02.12 11:23:18]

일단 데이터 변동이 없는 새벽에 하시는게 제일 안전할거 같고요.

DELETE를 커서 돌려서 삭제해본적이 없긴한데..  INSERT시에는 보통 1000건 단위로 작업했습니다.

시간이랑 락이 문제시면 테이블 SWITCHING(RENAME) 하시는것도 고려해보세요. 전 이걸 많이 쓰고 있습니다.


by 미스틱매니아 [2018.02.12 14:21:36]

저도 CTAS로 테이블 만들고 증강분을 업무외 시간에 옮긴뒤에 이름 바꾸는거 추천합니다. 그리고 Procedure로 Cursor Fetch 하면서 delete 하는 방식이면 bulk collect 반드시 사용해야 합니다. 1억건을 건건으로 delete 했다간 밤새도 안끝날수 있습니다 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입