본문 바로가기

db

Oracle FlashBack

DB를 다루는 개발자라면 아래와 같은 경험을 한번쯤 경험해봤을 것이다.

특정조건을 만족할때 특정 컬럼을 변경할때... 혹은 특종조건을 만족할때 해당 로우를 삭제할때
쿼리를 작성한다면 아래와 같을 것이다.

UPDATE TABLE SET C = 1 WHERE NUM = 1;
DELETE FROM TABLE WHERE NUM = 1;

하지만 본인은 어제 술을 엄청먹어서 술도 안깬 상태에서 일은 엄청많다 스트레스도 엄청받고 있는 상태에서
해당 쿼리를 작성할 경우... 한번쯤 실수(?)를 할 수 있지 않을까? 아래와 같이 말이다.

UPDATE TABLE SET C = 1;
DELETE FROM TABLE;

물론 COMMIT을 하지 않았다면 ROLLBACK을 하면 되겠지만...

작성한 쿼리가 문제없는지 확인할세도 없이 다른 업무가 주어져 COMMIT을 해버렸다고 가정하자.

자... 조금 정신차리고 보니까 WHERE절을 주지 않았다... 그때 부터 패틱상태가 되는거다. @.@;

하지만 다행이도 복구할 수 있는 방법이 있다..Oracle FlashBack이라는 기능이다.

FlashBack란 과거의 특정 시점으로 복구시키는 오라클 기능이다.

FlashBack 사용법을 간단히 정리하면 아래와 같다.

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

여기서 INTERVAL '30' MINUTE은 30분 이전의 해당 테이블의 데이터를 가져오라는 내용이다.

위 쿼리를 이용하면 실수(?)로 인한 패닉상태를 벗어날 수 있게 된다.

더 자세한 내용은 아래를 참고 하기 바란다.

Oracle Undo log 사용법 및 flash back 사용방법

  1258333339_Flashback_query.pdf

 참고로 10g의 신기능

  1258333339_10g_r2의_신기능.pdf



'db' 카테고리의 다른 글

MySQL(MariaDB) 사분위수 구하기  (1) 2014.09.02
DB 파티셔닝  (0) 2011.03.07
READPAST 그리고 WITH(NOLOCK)  (0) 2009.12.19