Flashback 정리
DB를 restore 하지 않고, 과거 특정 시점의 data를 조회하는 기술로, backup된 db를 restore하는 것과는 다르다
(flashback이란? : https://www.oracle.com/kr/database/technologies/high-availability/flashback.html)
(flashback transaction, total recall은 보고 있던 책에 예제가 없어서 따로 정리하지 않음)
- flashback query : 특정 시점의 테이블의 데이터 조회
- flashback version query : 특정 기간의 테이블의 데이터 버전 조회
- flashback transaction query : 특정 기간의 트랜잭션에 의한 변경정보 조회
- flashback table : 특정시점으로 테이블을 되돌림
- flashback drop : 삭제된 테이블을 원하는 시점으로 복원
- flashback database : DB를 지정한 시점으로 되돌림 (과거에 생성한 backup db를 restore하는 것과는 다름)
참고로 각 기능은 아래에 정리된 저장소(?) 또는 log의 정보를 기반으로 동작한다. (불친절한 SQL 프로그래밍 921p에서 발췌)
- undo segment 사용 : flashback query, version query, transaction query, table
- 때문에 만약 undo segment 공간이 재사용 될 경우, error가 발생할 수 있다. (ora-08180)
- 이 경우 flashback으로도 해당 시점의 내용을 조회할 수 없게 된다. (다른 방법이 있는지는 찾아보지 않음)
- recyclebin 사용 : flashback drop
- flashback log 사용 : flashback database
flashback table 생성 및 사용방법 (flashback query, flashback version query 사용법 정리)
- flashback 기능을 사용하기 위해서는 table 생성시 enable row movement를 포함하여 생성해야 한다.
(ex : create table t1 (col number) enable row movement;) - data를 insert 혹은 delete해준다. (insert 혹은 delete시 commit 잘 해줄것)
- 다음의 query 형식으로 조회하며, 아래의 timestamp는 scn 변경하여도 조회 가능.
- flashback query (as of timestamp 절을 이용)
ex : select * from [table name]as of timestamp timestamp 'yyyy-mm-dd hh:mi24:ss'; - flashback version query (versions between timestamp 절을 이용)
ex : select * from t1 versions between timestamp timestamp 'yyyy-mm-dd hh:mi24:ss' and [timestamp 혹은 maxvalue];
- flashback query (as of timestamp 절을 이용)
flashback transaction query 조회 방법 (단 dba 권한 필요)
: select * from flashback_transaction_query;
flashback table 사용 방법
: flashback table [table name] to timestamp timestamp 'yyyy-mm-dd hh:mi24:ss';
flashback drop 사용 방법
: flashback table [복원할 table name] to before drop rename to [rename할 table name];
※ 참고 : 복원할 table이 recyclebin에 남아 있는지 확인하는 방법 : select * from user_recyclebin;
flashback database 사용 방법
- 관련 옵션 활성화 (dba 권한 필요)
- shutdown immediate
- startup mount
- alter database archivelog;
- alter database flashback on;
- alter database open;
- 되돌리기
- shutdown immediate
- startup mount
- ex : (DB를 10분전으로 되돌림) flashback database to timestamp (systimestamp - interval '10' minute);