본문 바로가기

Oracle/SQL

SQL - Flashback 데이터 table 복구

특정과거시점의 데이터로 테이블을 되돌려 놓는것 

앞서 배웠던 query 복구는 플래시백 하여서 그 결과값을 새로 백업 파일로 만들어
만든 backup table 을 다시  원래 테이블로 데이터 insert 하는 과정을 거쳤다면 

지금하는 Table 복구는 복구 할 시점부터 현재까지 수행했던 DML 작업 ( insert,update,delete, merge )  을
반대로 수행하며 과거로 돌리는 것이다. 
그런데 만약 복구할 시점부터 현재시점 사이에 DDL(create, alter, drop, truncate, rename)과 , DCL (grant, revoke ) 문이 수행되었다면, 해당 flashback table 명령어가 수행되지 않고 에러가 발생합니다. 

delete 후 commit 된 테이블 

delete from emp14;

commit;

 

복구시작 

1. 현재시간확인

select systimestamp from dual;

2. 테이블이 FLASHBACK 이 가능한상태인지 확인

select table_name, row_movement
from user_tables
where table_name='테이블명'; 

테이블명 (대문자로적을것)

→ 확인해보면 ROW_MOVEMENT 가 disable 로 되어있다.

이것을 enable 형태로 바꾸어야한다.

3. enable 하는방법 (*************)

alter table 테이블명 enable row movement;

후에 다시 2번의 식을 쿼리해보면

→ row_movement 가 enable 형태로 변경 되었다.

 

21/11/26 15:24:29 시간(1분전)으로 테이블을 되돌린다.

flashback table 테이블명 to timestamp
to_timestamp('21/11/26 15:25:29','RR/MM/DD HH24:MI/SS');

15분이 지나도 복구가 가능한 이유는 db 에 별 작업 (ddl, dcl ) 이 없었기때문!! 

SELECT 해보면 복구된거 확인 가능하다