天天看點

閃回資料庫(Flashback Database)

 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;

  --閃回資料庫之後,最後做一次全備