flashback database閃回資料庫
使用閃回資料庫可以将資料庫快速的閃回到過去某個時間點。在啟用閃回資料時,會将修改過的塊的前映像作為閃回資料庫日志儲存在閃回恢複區中,如出現邏輯壞塊或使用者錯誤操作需要恢複到過去的時間點,閃回資料庫将還原資料庫的前映像,然後使用歸檔日志和redo前滾到期望恢複的時間點,因為無需還原資料庫的資料檔案,所有此過程速度比較傳統的還原恢複通常快很多。
啟動閃回資料庫時,會将前映像資料儲存在“閃回緩沖區”中,然後由恢複寫入器(recovery writer,rvwr)背景程序,将閃回緩沖區的前映像資料儲存在閃回恢複區的閃回資料庫日志中。
配置閃回資料庫相關參數:
db_recovery_file_dest 決定閃回恢複區路徑
db_recovery_file_dest_size 決定閃回恢複區大小
db_flashback_retention_target 保留恢複最近多長時間的資料,機關為分鐘。
閃回資料庫必須在歸檔模式下
開啟歸檔
1、sql> alter system set log_archive_dest_1='location=+oradg/b1/recovery/' scope=both;
2、sql> shutdown immediate
3、sql> startup mount
4、sql> alter database archivelog;
5、sql> alter database open;
6、sql> archive log list
設定閃回區大小,路徑,閃回保留時間
sql> alter system set db_recovery_file_dest_size=5g;
system altered.
sql> alter system set db_recovery_file_dest='+oradg';
sql> alter system set db_flashback_retention_target=2880;
開啟閃回功能
sql> startup mount exclusive
sql> alter database flashback on;
database altered.
sql> select flashback_on from v$database;
yes
關閉閃回功能
oracle instance started.
total system global area 839282688 bytes
fixed size 2217992 bytes
variable size 557844472 bytes
database buffers 276824064 bytes
redo buffers 2396160 bytes
database mounted.
sql> ?alter database flashback off;
sql> alter database open ;
sql> alter system set db_recovery_file_dest='';
閃回資料庫的步驟
1、關閉資料庫
2、啟動資料庫到mount狀态[exclusive模式]
3、閃回至某個時間點,scn或還原點
4、使用resetlogs打開資料庫
閃回資料庫的方法
1、sqlplus下基于scn閃回
flashback database [] to scn
2、sqlplus下基于時間戳閃回
flashback database [] to timestmp
3、sqlplus下基于還原點閃回
flashback database [] to restore point
4、rman下基于時間戳閃回
rman> flashback database to time = "to_date('2013-10-10 19:25:21','yyyy-mm-dd hh24:mi:ss')";
5、rman下基于scn閃回
rman> flashback database to scn=1121679;
6、rman下基于:歸檔序号
rman> flashback database to sequence=56 thread=1;
運用閃回功能示例:
示例1:删除表的部分資料後,使用閃回資料庫的方法恢複
sql> create table test_flashback as select * from emp; --建立表
table created.
sql> select dbms_flashback.get_system_change_number from dual; --記錄删除資料前scn
1069396
sql> delete from test_flashback where deptno=20; --删除資料
5 rows deleted.
sql> commit;
commit complete.
sql> startup mount exclusive --啟動到mount exclusive狀态
sql> flashback database to scn 1069396; --閃回到删除資料之前,還可以用時間戳閃回如:
flashback complete. --flashback database to to_timestamp('2013-10-8 18:02:34','yyyy-mm-dd hh24:mi:ss')
sql> alter database open read only; ?--以read only 方式打開檢查資料庫是否閃回成功,如不成功考慮其他形式的閃回
sql> select * from scott.test_flashback where deptno=20;
empno ename job mgr hiredate sal comm deptno
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 smith clerk 7902 17-dec-80 800 20
7566 jones manager 7839 02-apr-81 2975 20
7788 scott analyst 7566 19-apr-87 3000 20
7876 adams clerk 7788 23-may-87 1100 20
7902 ford analyst 7566 03-dec-81 3000 20
sql> startup
ora-01589: must use resetlogs or noresetlogs option for database open
sql> alter database open resetlogs;
--閃回資料庫之後,最後做一次全備