Oracle 중급 7 : Flashback
예제 99. 데이터 복구 : FLASHBACK QUERY
- commit까지 완료한 삭제작업 에 대해 복구
- 5분전 테이블 상태 보기
select *
from 테이블명
as of timestamp(systimestamp - interval '5' minute);
- 위의 select문을 서브쿼리로 사용하여 갱신 및 삽입(MERGE, INSERT,...)
cf. systimestamp : 현재날짜 시간 보는 것.
select systimestamp from dual;
- show parameter undo; 에서
undo_retention 의 시간(초 단위) 까지만 가능
( 이 시간은 회사마다 다름)
예제100. 데이터 복구 : FLASHBACK TABLE
- 테이블을 어떤 시간 전 상태로 되돌리기
alter table 테이블명 enable row movement;
flashback table 테이블명 to timestamp(systimestamp - interval '5' minute) ;
commit;
1. alter table 테이블명 enable row movement; --> flashback 가능한 상태로 만들기
2. flashback table 테이블명 to timestamp(systimestamp - interval '5' minute) ;
--> 5분전 상태로 flashback
3. comit;
--> 새로 insert 한 것이므로 commit 해야함
- 이 또한, undo_retention 시간에 따라 가능한 시간이 제한됨.
예제101. FLASHBACK DROP
- drop 하면 휴지통으로 들어감
- drop은 구조도 사라지는 것
select *
from user_recyclebin
order by droptime desc;
order by droptime desc
: drop한 시간에 따라 휴지통 볼 수 있음
flashback table 테이블명 to before drop;
cf. 휴지통 비우기
purge recyclebin;
예제102. FLASHBACK VERSION QUERY
- 테이블의 변경 history확인
- 이 때, version 업데이트 이력(변경 이력)은 commit이 이루어진 것에 대해만 볼 수 있음.
(commit이 되어야 version업데이트 됨)
- 과거 어떤시간부터 현재까지 데이터의 변경, 변경유형(UPDATE(U), DELETE(D)), 시간보기
select 컬럼명, versions_starttime, versions_endtime, versions_operation
from 테이블명
VERSIONS BETWEEN TIMESTAMP to_timestamp( '22/05/10 15:19:10', 'RRRR-MM-DD HH24:MI:SS')
AND MAXVALUE
WHERE 조건
ORDER BY versions_starttime NULLS FIRST;
- between timestamp에서 종료지점도 설정가능
- maxvalue 는 현재시간 의미
- version_starttime은 초기값이 null로 되어있으므로,
order by에서 nulls first를 작성하여 순서대로 확인 가능