본문 바로가기

Oracle/SQL

SQL - Flashback 데이터 복구 query 복구

QUERY 복구 
백업을 복구하지 않고, 과거 시점의 데이터를 조회하는 방법 
과거시점의 데이터를 조회해서 그 데이터를 새로 create as table 해준다. 

테이블을 플래쉬백 할 수 있는 골든 타임은 기본적으로 15 분이다. ( 회사마다 설정된 시간이 조금 씩 다름 ) 

시간 확인해보는 쿼리문 

select name, value 
from v$PARAMETER
where name = 'undo_retention' ;

value 값에 초단위로 적힌 시간을 확인하면 플래쉬백 할 수 있는 기본 시간을 확인 해 볼 수 있다.


table 을 지우고 commit 까지 해버린 상황

delete from emp;

commit ;

현재시간확인

select systimestamp from dual;

→복붙하기 21/11/26 15:10:18

현재시간에서 10분전에 emp 테이블의 상태를 확인
as of timestamp 절 다음에 과거 시점을 적는것이다. 

select *
from emp
as of timestamp to_timestamp ('21/11/26 15:00:00', 'RR/MM/DD HH24:MI:SS');

 

현재시간과 다르게 10 분전으로 설정해 주었다. 
여기까지가 과거시점의 데이터를 조회하는 방법이다. 

또는 시간을 직접 적지 않고 

select *
from emp
as of timestamp to_timestamp (systimestamp - interval '10' minute);

현재시간에서 10 분을 뺀 식으로 작성 해 줄 수 있다. 

 

그다음 위의 SQL 결과를 EMP_PAST_DATA 라는 이름으로 백업해보겠다. 

create table emp_past_data
as
select *
from emp
as of timestamp to_timestamp ('21/11/26 15:00:00', 'RR/MM/DD HH24:MI:SS');

→ 2번을 확인할 수 있는 시간의 기본값이 15 분이므로 15분 지나기전에 과거의 데이터를 일단 백업한다.

insert 문을 이용하여 지워진 emp 테이블에 emp_past_data 의 데이터를 복사해 놓는다.

insert into emp
select *
from emp_past_data;

→ insert 문의 서브쿼리 사용