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';
System altered.
SQL> alter system set db_flashback_retention_target=2880;
System altered.
開啓閃回功能
SQL> startup mount exclusive
SQL> alter database flashback on;
Database altered.
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
關閉閃回功能
SQL> startup mount exclusive
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;
Database altered.
SQL> alter database open ;
Database altered.
SQL> alter system set db_recovery_file_dest='';
System altered.
閃回數據庫的步驟
1、關閉數據庫
2、啓動數據庫到mount狀態[exclusive模式]
3、閃回至某個時間點,SCN或還原點
4、使用resetlogs打開數據庫
閃回數據庫的方法
1、sqlplus下基於SCN閃回
FLASHBACK DATABASE [<database_name>] TO SCN <system_change_number>
2、sqlplus下基於時間戳閃回
FLASHBACK DATABASE [<database_name>] TO TIMESTMP <system_timestamp_value>
3、sqlplus下基於還原點閃回
FLASHBACK DATABASE [<database_name>] TO RESTORE POINT <restore_point_name>
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
GET_SYSTEM_CHANGE_NUMBER
------------------------
1069396
SQL> delete from test_flashback where deptno=20; --刪除數據
5 rows deleted.
SQL> commit;
Commit complete.
SQL> startup mount exclusive --啓動到mount exclusive狀態
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> 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 方式打開檢查數據庫是否閃回成功,如不成功考慮其他形式的閃回
Database altered.
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
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.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open resetlogs;
Database altered.
--閃回數據庫之後,最後做一次全備