--1. Flashback 이란

사용자의 논리적인 오류 (delete, truncate,update 등)를 undo data , flashback logfile 를 사용하여 빠르게 복구해내는 기능
 
*한계
 1) 물리적인 장애 (file 삭제) 에는 효과 없음
  2) control file 이 재생성 되면 flashback database 명령어 사용불가 ( scn 초기화 되므로)
  3) alter table로 테이블 구조가 변경 되면 (column 변경 등) 데이터 복구불가 
 
 

--2. Flashback 종류

 

1) Row Level Flashback

-> 특정 테이블의 특정 row만 flashback
 
1. 운영 중 잘못된 DML 발생
 
 
 kim->NEW KIM 으로 잘못 변경한 데이터를 KIM으로 원복시켜야 하는데 commit이 완료 된 상황
 
*Flashback Version Query과 Flashback Transaction Query
-> Flashback Version Query : 해당 데이터의 과거 변경이력을 찾는 쿼리
   Flashback Transaction Query : 변경사항을 취소시켜 이전 값으로 돌려주는 쿼리
 
2.  Flashback Version Query   조회
 
   
 ( FLASHBACK_TEST 의 데이터 변경이력 조회 결과 화면)
  -- 원복 되어야 할 데이터 KIM은  SCN 값이 4512639 ~ 4512654 까지만 유효하다는 의미
  -- SCN 6512654 부터는 NEW KIM으로 UPDATE 됨.
  -- VERSION_ENDSCN 값이 공백인 이유 : 해당 데이터의 변경된 이력이 없기 때문
   
   
3. FLASHBACK_TRANSACTION_QUERY 조회
 
 
   FLASHBACK_TRANSACTION_QUERY 의 결과로, KIM->NEW KIM 변경에 대한 UNDO_SQL이 결과로 출력됨
 
 
4. 출력된 UNDO_SQL을 수행 후, 데이터 원복 확인   
 
   
 
 
5.    FLASHBACK_TRANSACTION_QUERY가 공백이면??
 
   
 
    supplemental logging 활성화 
 
  
   
   
   
   ※ Supplemental logging
 - disable : redo log에 변경된 칼럼 정보만 기록
 - enable : 하나의 칼럼이 변경되더라도 전체 row의 정보를 모두 redo log에 저장
 
ORACLE 9i R2 버전부터 supplemental logging 기능의 기본값 : disable
이유 : 사용하게 되면 redo log의 양이 커지기 때문에 성능저하 우려
       → 실제 크게 차이 안난다 = 사용하는게 유리함 
주의 : 활성화 시키고 난 후부터 생성된 redo lgo 만 분석이 되고 이 기능을 화성화 시키기 이전에 생성된 redo log는 분석 제한있음.
 
출처: http://dinggur.tistory.com/159 [아무도없는세계]
 
  

2) Table Level Flashback

-> ROW LEVEL FLASHBACK이 특정 ROW만 변경하였다면 TABLE LEVEL FLASHBACK 은 특정 테이블 전체의 내용을 변경함
 
1) SCN으로 DML 에러 복구
 
2) 시간으로 DML 에러 복구
 
 
 
 
 

3) Database Level Flashback

->DB 전체를 과거의 특정 시점으로 돌리는 것으로 불완전 복구와 비슷하나

전통적인 불완전 복구의 백업 파일 복원 과정 없이 flashback logfile 적용만으로 DB를 복구하기 때문에 훨씬 더 빠름

 

1. Flashback database를 사용하기 위한 사전 준비사항

 
1.1 flashback on mode 로 변경 필요 (pfile 이용) -> 재기동 필요
 
 
 
1.1 flashback on mode 로 변경 필요 (spfile 이용)
 
 
 
2. 운영 중 truncate 장애 발생
 
 
 
3. flashback database 기능을 사용하기 위해 mount 모드로 전환
 
 
4.  mount 모드에서 재시도