作者:admin 日期:2023-10-16 瀏覽: 次
Oracle備份恢復之Flashback
如果說flashback query用來恢復指定時間的記錄,flashback table可用來恢復被刪除或者指定時間的表,那么
flashback database直接提供一個數據庫級別的恢復,可以直接將整個數據庫恢復到指定時間,相比于錢兩者,粒度更大。
flashback database可以不借助備份的情況下,將數據庫向前恢復。oracle為了實現flashback database特性,另外引入一組新日志文件:flashback logs。其實flashback lohs與所有的日志文件功能一樣,用來計記錄日志的,只不過這個日志保存的信息有些特別,并不是記錄你的操作,而是記錄操作前要修改的數據,就是數據塊的錢影像,這些信息被寫入這個專用的存儲區,就是flash recovery area,簡稱FRA。
1、使用閃回數據庫不能解決媒介故障;
2、如果控制文件已被重建,不能使用閃回數據庫;
3、不能完成刪除表空間的恢復。
1、配置閃回恢復區;
2、數據庫要求運行在歸檔模式下;
3、需要在Mount狀態下使用alter database flashback on啟動。
開啟flashback database的必備條件:
1.數據庫必須處于歸檔模式
2.數據庫必須指定flash recovery area(db_recovery_file_dest指定路徑和
db_recovery_file_dest_size指定大小)
3.數據庫必須啟動特性flashback database
4.初始化參數:
db_flashback_retention_target 后面的值是時間,單位分鐘,默認是1440
5.啟用force logging
語法:
FLASHBACK [STANDBY] DATABASE
{TO [SCN | TIMESTAMP]
舉例:
使用FLASHBACK DATABASE 閃回數據庫到SCN 55444 mount 模式下
SQL>flashback database to scn 55444;
用resetlogs選項打開數據庫
SQL>alter database open resetlogs
閃回數據庫局限性:
如下情形不能進行閃回數據庫操作:
1)控制文件被恢復或重新創建
2)表空間被 drop 掉
3)數據文件被壓縮
要想使用 Flashback Database, 必須使用 Flash Recovery Area,因為 FlashbackDatabase Log 只能保存在這里。 要配置的 2 個參數如下,一個是大小,一個是位置。如果數據庫是 RAC,flash recovery area 必須位于共享存儲中。數據庫必須處于 archivelog 模式。
1) 更改閃回區大小:
SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=20GSCOPE=BOTH;
2) 更改閃回區路徑:
SQL>ALTER SYSTEM SET DB _RECOVERY_FILE_DEST=' /u01/app/oracle/flashback/orcl/' SCOPE=BOTH;
對于 Flash Recovery Area,Oracle 是這樣建議的,flash recovery area 設置的越大,flashback database 的恢復能力就越強,因此建議 flash recovery area 能夠放的下所有的數據文件,增量備份,以及所有尚未備份的歸檔文件,當然還有它自己產生的 flashback logs。
在數據庫運行過程中,oracle 自動向該區域寫入文件,當剩余空間不足 15%的時候,它就會在 alert 中增加警告,提示你空間不足。但此時不會影響數據庫的正常運轉,直到所有空間統統被用掉之后,oracle 首先嘗試刪除尋些過期的文件,冗余文件或備份過的文件,如果這些做完了,還是沒有空閑空間的話,數據庫就被 hang 住了。
1). 數據庫啟動到 mount 狀態
SQL> startup mount;
2). 檢查 Flashback 功能, 缺省時功能是關閉的。
SQL> select name, current _scn, flashback_on from v$database;
NAME CURRENT_SCN FLASHBACK_ON
-------- ----------- ------------------
DBA 945715 NO
3). 啟動 Flashback 功能
SQL> alter database flashback on;
數據庫已更改。
4). 設置初始化參數:
DB_FLASHBACK_RETENTION_TARGET
SQL>alter system set db_flashback_retention_target=1440 scope=both;
ps:該參數用來控制 flashback log 數據保留的時間。
5). 啟動數據庫
SQL>alter database open;
1. V$database
這個視圖可以查看是否啟用了 Flashback database 功能
SQL> select flashback _on from v$database;
常州數據恢復2. V$flashback_database_log
Flashback Database 所能回退到的最早時間,取決與保留的 Flashback Database Log 的多少, 該視圖就可以查看許多有用的信息。
Oldest_flashback_scn / Oldest_flashback_time : 這兩列用來記錄可以恢復到最早的時點
Flashback_size: 記錄了當前使用的 Flash Recovery Area 空間的大小
Retention_target: 系統定義的策略
Estimated_flashback_size: 根據策略對需要的空間大小的估計值
SQL> select oldest _flashback_scn os, to_char(oldest_flashback_time,'yy-mm-dd hh2
4:mi:ss') ot, retention_target rt,flashback_size fs, estimated_flashback_size es
from v$flashback_database_log;
3. V$flashback_database_stat
這個視圖用來對 Flashback log 空間情況進行更細粒度的記錄和估計。 這個視圖以小時為單位記錄單位時間內數據庫的活動量,Flashback_Data 代表 Flashback log 產生數量,DB_Date 代表數據改變數量,Redo_Date 代表日志數量,通過這 3 個數量可以反映出數的活動特點,更準確的預計 Flash Recovery Area 的空間需求
SQL> alter session set nls _date_format='hh24:mi:ss';
SQL> select *from v$flashback_database_stat;
因為沒開閃回,這里也就不做演示了,大家有空可以自己測試下。
后面會分享更多關于devops和DBA方面內容,感興趣的朋友可以關注下!