Skill/Oracle

Oracle 중급 7 : Flashback

steadilee 2022. 5. 10. 20:14

예제 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를 작성하여 순서대로 확인 가능