본문 바로가기

work/oracle

[Oracle] commit 데이터 복구

오라클 DB를 사용중 delete문을 잘못 이용하여 지워야 하지 말아야 할 데이터를 지웠을 경우..
거기다가 commit 까지 완료했을 경우 다행이 복구 할 수 있는 방법이 존재했다.

SELECT * FROM TEST AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '30' MINUTE);

위의 명령어를 사용하면 TEST 테이블에 30분전의 상태를 보여주게 된다.
만약 DATA를 삭제한 시간이 30분이 지나지 않았다면 삭제하기 전의 DATA를 확인 할 수 있을 것이다.
그렇다면 위의 명령어를 서브쿼리로 하여 INSERT 해주면 된다.

INSERT INTO TEST
SELECT * FROM TEST AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '30' MINUTE);

이렇게 하면 DATA가 30분전 상태로 복구 될 것이다.
정확하진 않지만 Oracle에서 허용하는 시간은 2시간 이나 3시간 정도라고 하는것 같다.
그 이후에는 복구하고 싶어도 복구 할 수 없다는 뜻이다.
최대한 빠른 시간에 구하는 것이 안전하고, 처음부터 쿼리와 Data를 잘 확인하여 이런일이 발생하지 않게 하는것이 가장 좋겠다.

출처 : http://jinuws.tistory.com/149