[ORACLE] DELETE 데이터 완전 삭제 방법 0 4 4,261

by kimyh8779 [Oracle Admin] DELETE DATAFILE RECYCLEBIN [2020.09.11 17:03:36]


안녕하세요 ORACLE DB 에서 DELETE 된 데이터를 완전 삭제하는 방법에 대해 문의드립니다.

 

현재 프로그램이 실시간으로 구동되며 분 당 약 10개의 ROW 를 DELETE 하는 상황입니다. (DELETE 테이블에 데이터가 50Gb 이상 쌓여있음)

DELETE FROM $(TABLENAME)
WHERE TIME < $(STD_TIME)

테이블에 데이터가 너무 많이 쌓여 DELETE 문으로 삭제 중인 상황인데 디스크 사용량 (DATAFILE) 이 줄어들지 않는 것 같습니다. (15분 정도 감시)

구동 중인 프로그램이라 쿼리문을 수정할 수는 없는 상황입니다.

 

PURGE 명령을 찾아보긴 했는데 DELETE 문으로 삭제한 데이터는 RECYCLEBIN 으로 옮겨지지 않는 것 같네요.

혹시 DELETE 문으로 삭제한 데이터가 완전히 디스크에서 삭제되는 TRIGGER or 완전삭제 주기 or 완전삭제 방법 등이 있는지 궁금합니다.

by pajama [2020.09.11 17:30:36]

Delete후에 지워진 공간을 반환받으려면 테이블을 새로 생성해서 데이터를 마이그레이션해야합니다. (reorg) 공간이 확보되면 resize로 데이터파일 크기를 줄일수 있고요..


by 우리집아찌 [2020.09.12 18:39:35]

다른 테이블에 INSERT 하시고 RENAME 후 기존 테이블 drop table purge ;


by 트랭크스 [2020.09.14 16:20:11]

DELETE 문으로 삭제한 데이터는 UNDO TABLESPACE 에 남아 복구(?)를 위해 활용이 가능합니다. UNDO TABLESPACE 는 순환구조이므로 해당 블록이 재사용되면 delete 된 부분도 복구를 할수 없겠지요.

그렇다면 db백업 본으로 복구를 하거나, 로그마이너 같은 방법으로 delete 문을 복구할수도 있지요. 즉 오라클 DB는 어떠한 상황에서도 (dba관점에서) 데이터를 복구할 수 있도록 설계되어 있습니다.

RECYCLEBIN 에 저장되는 거는 DROP 된 테이블이 보관됩니다.

쓰니분이 의도하시는 "하드디스크 완전 삭제" 같이 하는 방법은 없습니다. 

권한으로 조절하시거나 위의분 처럼 테이블에 insert 하고 purge로 drop 하시는게 나을것같네요.

 

분당 10row를 지우는데 테이블이 50G라면 REORG 한번 해보시는게 좋으실것 같네요.

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