[오라클팁] 커밋 후 특정시간내 삭제한 자료 복원하기

실수로 디비 테이블을 날려먹고 아뿔싸... 하는 생각을 하신 분들이 꽤 되실 거라 생각 듭니다.

 

개발자로서 일을 처음 시작할 때 저 역시 작업하다 데이터를 날려먹고 사수한테 엄청 혼났던 기억도 났고, 후임으로 들어온 신입이 패스워드 칼럼을 전부 날려먹어서 복원했던 기억도 납니다. 롤백하면 되겠지 생각했는데 이미 커밋까지 다 해버렸고, 신입은 혼자서 어쩌지 하면서 시간을 보내고 있었네요^^

 

이런 경험 들은 전부 가지고 계시죠?

 

오라클은 데이터를 FLASHBACK이라는 임시 저장소를 가지고 있습니다. 자료가 쌓이는 로그죠. 그래서 일정 시간 이내의 자료들은 어느 정도 복구가 가능합니다.

 

기준자료의 데이터가 바뀐 경우 TIMESTAMP라는 함수를 써서 아주 쉽게 복원할 수 있습니다. 하지만 테이블의 칼럼을 변경 처리하거나 DROP 한 후

PUERGE를 한 경우에는 복원을 할 수가 없습니다.

 

복원 쿼리 안내

 

제가 쓰는 복원 쿼리입니다.

select *
    from 테이블명 as of timestamp(systimestamp - interval '100' minute)

   where 조회 조건 ;

 

눈치 빠른 분들은 한 번에 알아보시겠죠. 100분 이내의 자료를 조회하는 쿼리입니다. 시간은 무한정 늘어나는 건 아니며 오라클 서버의 메모리 세팅에 따라 달라지니 참고 하시기 바랍니다.

 

쿼리만 셀렉트 한다고 될 건 아니죠.. 잘못된 칼럼을 수정하려면 업데이트를 해줘야 하는데 어려워하시는 분들을 위해 업데이트 쿼리도 만들어 보았습니다.

update

 테이블명 aa

      set  칼럼 =

            ( select 컬럼

                 from (select 칼럼, 기준값

                           from 테이블

   as of timestamp(systimestamp - interval '100' minute))bb                 where aa.기준값 =  bb.기준값);

 

칼럼은 데이터가 변경된 칼럼이며, 기준값은 유일 키로서 ROW의 기준이 되는 값이어야 합니다.