作者:admin 日期:2023-10-16 瀏覽: 次
Oracle備份恢復(fù)之Flashback
如果說flashback query用來恢復(fù)指定時(shí)間的記錄,flashback table可用來恢復(fù)被刪除或者指定時(shí)間的表,那么
flashback database直接提供一個(gè)數(shù)據(jù)庫(kù)級(jí)別的恢復(fù),可以直接將整個(gè)數(shù)據(jù)庫(kù)恢復(fù)到指定時(shí)間,相比于錢兩者,粒度更大。
flashback database可以不借助備份的情況下,將數(shù)據(jù)庫(kù)向前恢復(fù)。oracle為了實(shí)現(xiàn)flashback database特性,另外引入一組新日志文件:flashback logs。其實(shí)flashback lohs與所有的日志文件功能一樣,用來計(jì)記錄日志的,只不過這個(gè)日志保存的信息有些特別,并不是記錄你的操作,而是記錄操作前要修改的數(shù)據(jù),就是數(shù)據(jù)塊的錢影像,這些信息被寫入這個(gè)專用的存儲(chǔ)區(qū),就是flash recovery area,簡(jiǎn)稱FRA。
1、使用閃回?cái)?shù)據(jù)庫(kù)不能解決媒介故障;
2、如果控制文件已被重建,不能使用閃回?cái)?shù)據(jù)庫(kù);
3、不能完成刪除表空間的恢復(fù)。
1、配置閃回恢復(fù)區(qū);
2、數(shù)據(jù)庫(kù)要求運(yùn)行在歸檔模式下;
3、需要在Mount狀態(tài)下使用alter database flashback on啟動(dòng)。
開啟flashback database的必備條件:
1.數(shù)據(jù)庫(kù)必須處于歸檔模式
2.數(shù)據(jù)庫(kù)必須指定flash recovery area(db_recovery_file_dest指定路徑和
db_recovery_file_dest_size指定大?。?/p>
3.數(shù)據(jù)庫(kù)必須啟動(dòng)特性flashback database
4.初始化參數(shù):
db_flashback_retention_target 后面的值是時(shí)間,單位分鐘,默認(rèn)是1440
5.啟用force logging
語(yǔ)法:
FLASHBACK [STANDBY] DATABASE
{TO [SCN | TIMESTAMP]
舉例:
使用FLASHBACK DATABASE 閃回?cái)?shù)據(jù)庫(kù)到SCN 55444 mount 模式下
SQL>flashback database to scn 55444;
用resetlogs選項(xiàng)打開數(shù)據(jù)庫(kù)
SQL>alter database open resetlogs
閃回?cái)?shù)據(jù)庫(kù)局限性:
如下情形不能進(jìn)行閃回?cái)?shù)據(jù)庫(kù)操作:
1)控制文件被恢復(fù)或重新創(chuàng)建
2)表空間被 drop 掉
3)數(shù)據(jù)文件被壓縮
要想使用 Flashback Database, 必須使用 Flash Recovery Area,因?yàn)?FlashbackDatabase Log 只能保存在這里。 要配置的 2 個(gè)參數(shù)如下,一個(gè)是大小,一個(gè)是位置。如果數(shù)據(jù)庫(kù)是 RAC,flash recovery area 必須位于共享存儲(chǔ)中。數(shù)據(jù)庫(kù)必須處于 archivelog 模式。
1) 更改閃回區(qū)大?。?/p>
SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=20GSCOPE=BOTH;
2) 更改閃回區(qū)路徑:
SQL>ALTER SYSTEM SET DB _RECOVERY_FILE_DEST=' /u01/app/oracle/flashback/orcl/' SCOPE=BOTH;

對(duì)于 Flash Recovery Area,Oracle 是這樣建議的,flash recovery area 設(shè)置的越大,flashback database 的恢復(fù)能力就越強(qiáng),因此建議 flash recovery area 能夠放的下所有的數(shù)據(jù)文件,增量備份,以及所有尚未備份的歸檔文件,當(dāng)然還有它自己產(chǎn)生的 flashback logs。
在數(shù)據(jù)庫(kù)運(yùn)行過程中,oracle 自動(dòng)向該區(qū)域?qū)懭胛募?,?dāng)剩余空間不足 15%的時(shí)候,它就會(huì)在 alert 中增加警告,提示你空間不足。但此時(shí)不會(huì)影響數(shù)據(jù)庫(kù)的正常運(yùn)轉(zhuǎn),直到所有空間統(tǒng)統(tǒng)被用掉之后,oracle 首先嘗試刪除尋些過期的文件,冗余文件或備份過的文件,如果這些做完了,還是沒有空閑空間的話,數(shù)據(jù)庫(kù)就被 hang 住了。
1). 數(shù)據(jù)庫(kù)啟動(dòng)到 mount 狀態(tài)
SQL> startup mount;
2). 檢查 Flashback 功能, 缺省時(shí)功能是關(guān)閉的。
SQL> select name, current _scn, flashback_on from v$database;
NAME CURRENT_SCN FLASHBACK_ON
-------- ----------- ------------------
DBA 945715 NO
3). 啟動(dòng) Flashback 功能
SQL> alter database flashback on;
數(shù)據(jù)庫(kù)已更改。
4). 設(shè)置初始化參數(shù):
DB_FLASHBACK_RETENTION_TARGET
SQL>alter system set db_flashback_retention_target=1440 scope=both;
ps:該參數(shù)用來控制 flashback log 數(shù)據(jù)保留的時(shí)間。
5). 啟動(dòng)數(shù)據(jù)庫(kù)
SQL>alter database open;
1. V$database
這個(gè)視圖可以查看是否啟用了 Flashback database 功能
SQL> select flashback _on from v$database;
常州數(shù)據(jù)恢復(fù)2. V$flashback_database_log
Flashback Database 所能回退到的最早時(shí)間,取決與保留的 Flashback Database Log 的多少, 該視圖就可以查看許多有用的信息。
Oldest_flashback_scn / Oldest_flashback_time : 這兩列用來記錄可以恢復(fù)到最早的時(shí)點(diǎn)
Flashback_size: 記錄了當(dāng)前使用的 Flash Recovery Area 空間的大小
Retention_target: 系統(tǒng)定義的策略
Estimated_flashback_size: 根據(jù)策略對(duì)需要的空間大小的估計(jì)值
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
這個(gè)視圖用來對(duì) Flashback log 空間情況進(jìn)行更細(xì)粒度的記錄和估計(jì)。 這個(gè)視圖以小時(shí)為單位記錄單位時(shí)間內(nèi)數(shù)據(jù)庫(kù)的活動(dòng)量,F(xiàn)lashback_Data 代表 Flashback log 產(chǎn)生數(shù)量,DB_Date 代表數(shù)據(jù)改變數(shù)量,Redo_Date 代表日志數(shù)量,通過這 3 個(gè)數(shù)量可以反映出數(shù)的活動(dòng)特點(diǎn),更準(zhǔn)確的預(yù)計(jì) Flash Recovery Area 的空間需求
SQL> alter session set nls _date_format='hh24:mi:ss';
SQL> select *from v$flashback_database_stat;
因?yàn)闆]開閃回,這里也就不做演示了,大家有空可以自己測(cè)試下。
后面會(huì)分享更多關(guān)于devops和DBA方面內(nèi)容,感興趣的朋友可以關(guān)注下!