안녕하세요.
오라클 DB 관련하여 궁금한 점이 생겨 찾아왔습니다.
우선 상황 설명을 드리자면..
현재 서비스 중인 시스템의 오라클 DB 중 성능향상을 목표로 특정 테이블의 데이터를 정리하고 싶은데요.
대략 2천만건 정도가 있는 테이블이고 그 중에 1900만건 정도를 별도 테이블에 백업 후 삭제할 예정입니다.
CREATE TABLE AAA_BACKUP_날짜
AS SELECT * FROM AAA WHERE 조건
으로 삭제할 데이터 백업은 간단하게 해결했는데요..
문제는 이제 AAA 테이블에서 1900만건 삭제 시
DELETE FROM AAA WHERE 조건
쿼리를 사용할 경우 속도는 물론이거니와 redo 로그? 사이즈 문제 때문에 걱정이 됩니다. (전문 분야가 아니라 자세히 알지는 못합니다ㅠ)
실제로 과거 같은 DB에서 비슷한 작업 (대량의 데이터 delete)을 진행하다가 로그 사이즈 full로 인하여 DB가 아예 뻗어버리는... (실 운영중인 서비스ㅠ)
불상사가 발생하기도 했구요..
구글링을 좀 해보았습니다만..
유지할 데이터 (위 예시의 경우 약 100만건)를 CTAS를 사용하여 임시테이블에 복사한 후 -> 기존 테이블 삭제(truncate) -> 임시테이블명을 기존 테이블명으로 변경
하는 방법이 성능면에서 가장 추천되는 방법이라고 들었는데요.
지금같은 경우 서비스 중지가 어려운 상황이라.. 서비스 중인 상태에서 위 작업을 진행해야 하며
undo로그나 redo로그 롤백 세그먼트 등 DBMS 관리 측면의 부분들은 제가 DBA도 아닐뿐더러 권한이 없어 수정 등의 작업이 어려운 상황입니다..
혹시 대량 데이터 delete 시 좋은 다른 방법이 없을까요??
질문드리다 보니 글이 길어졌는데 읽어주셔서 감사합니다.!
|