02.Oracle/DataBase2009. 4. 28. 13:51
반응형
나른한 점심시간.
비몽사몽중에 다음과 같은 업무요건가 들어왔다.
A 라는 테이블에서 errcode 가 309 이고 pt_no 가 3 이상인 모든 데이터를 지워라.

sql 로 표현하면 다음과 같은 쿼리가 나온다.

delete from A where errcode = '309' and pt_no >= 3;
commit;

하지만 쿼리를 다음과 같이 잘못 작성한 무대리.
delete from A where pt_no >= 3;
commit;

commit 하고 담배를 피고 와서 select 를 해보니
아뿔사!! pt_no 가 3 이상인 모든 데이터가 지워진 것이다.
commit 까지 했으니 돌릴 방법이 없을 것 같아
조용히 도망치는 무대리!!

하지만 다음 쿼리로 commit 까지 마친 delete 컬럼에 대해서 복구를 할 수 있다.

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

현재 시간 기준으로 15분 이내의 데이터들을 모두 복구하는 쿼리!

멋지다 오라클!

 hanho9@nate.com
Posted by 1010