之前其實有提到閃回的一些概念,里面比較重要的其實是閃回數據庫、閃回查詢、閃回drop,今天單獨對閃回數據庫做一下介紹,幫助大家理解下這塊內容。
Flashback Database 功能非常類似與RMAN的不完全恢復, 它可以把整個數據庫回退到過去的某個時點的狀態, 這個功能依賴于Flashback log 日志,而且比RMAN更快速、高效。 因此Flashback Database 可以看作是不完全恢復的替代技術。 但它也有某些限制:
1. Flashback Database 不能解決Media Failure, 這種錯誤RMAN恢復仍是唯一選擇
2. 如果刪除了數據文件或者利用Shrink技術縮小數據文件大小,這時不能用Flashback Database技術回退到改變之前的狀態,這時候就必須先利用RMAN把刪除之前或者縮小之前的文件備份restore 出來, 然后利用Flashback Database 執行剩下的Flashback Datbase。
oracle數據庫drop表后如何恢復?3. 如果控制文件是從備份中恢復出來的,或者是重建的控制文件,也不能使用Flashback Database。
4. 使用Flashback Database鎖能恢復到的最早的SCN, 取決于Flashback Log中記錄的最早SCN。
Flashback Database 整個架構包括一個進程Recover Writer(RVWR)后臺進程,Flashback Database Log日志和Flash Recovery Area。一旦數據庫啟用了Flashback Database, 則RVWR進程會啟動,該進程會向Flash Recovery Area中寫入Flashback Database Log, 這些日志包括的是數據塊的 " 前鏡像(before image)", 這也是Flashback Database 技術不完全恢復塊的原因。RVWR進程寫入的是閃回數據庫日志。
$ ps -ef|grep rvw|grep -v grep
假設T表C1列默認值為null,并進行了如下操作
閃回日志和聯機重做日志雖然作用相似 ,但他們還是有不少差異。 閃回日志不是循環使用的,聯機重做日志是循環使用的。當事務修改了buffer cache中的數據塊時,會將改變前的值和改變后的值以重做記錄的形式保存在log buffer中,然后通過LGWR將重做記錄寫入聯機重做日志中。但是在記錄閃回日志時,只會將改變前的值保存在flashback buffer中,再由RVWR寫入閃回日志中。
oracle查詢刪除記錄數據。閃回時,從閃回日志的尾部向頭部方向,依次取出閃回日志中的記錄并應用在數據庫上。而應用重做日志在進行實例恢復時,從閃回日志的頭部向尾部方向依次取出重做記錄并應用到數據庫上。
比如當前時間 09:20:00表T中C1列的值為4,當需要閃回到 09:10:00表T中C1為2的時候。從尾部應用日志開始,先取出C1=3這個值覆蓋C1=4,之后繼續取出C1=2覆蓋C1=3。發現已經滿足條件,故停止應用閃回日志。
1.v$flashback_database_log
Flashback Database 所能回退到的最早時間,取決與保留的Flashback Database Log 的多少,該視圖就可以查看許多有用的信息。
Oldest_flashback_scn / Oldest_flashback_time : 這兩列用來記錄可以恢復到最早的時點
oracle刪除一條數據?Fashback_size: 記錄了當前使用的Flash Recovery Area 空間的大小
Retention_target: 目標保存的實際(分鐘)
Estimated_flashback_size: 根據策略對需要的空間大小的估計值
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';SQL> select OLDEST_FLASHBACK_SCN os,OLDEST_FLASHBACK_TIME ot,RETENTION_TARGET rt ,FLASHBACK_SIZE fs,ESTIMATED_FLASHBACK_SIZE efs from v$flashback_database_log;
2.v$flashback_database_stat
這個視圖用來對Flashback log 空間情況進行更細粒度的記錄和估計。 這個視圖以小時為單位記錄單位時間內數據庫的活動量, Flashback_Data 代表 Flashback log 產生數量, DB_Date 代表數據改變數量, Redo_Date 代表日志數量,通過這 3 個數量可以反映出數據的活動特點,更準確的預計 Flash Recovery Area 的空間需求
SQL> select BEGIN_TIME bt,END_TIME et,FLASHBACK_DATA fd,DB_DATA dd,REDO_DATA rd,ESTIMATED_FLASHBACK_SIZE efs from v$flashback_database_stat;
3.v$flashback_database_logfile
該視圖主要記錄閃回日志的詳細信息,NAME閃回日志的位置,FIRST_CHANGE#閃回日志中記錄的最早的SCN,FIRST_TIME閃回日志中記錄的最早時間
SQL> select * from v$flashback_database_logfile;
oracle查看sql執行記錄、如果想啟動FLASHBACK DATABASE的功能,您必須在MOUNT模式下,將數據庫通過如下命令至于歸檔模式
SQL> alter database archivelog;Database altered.
開啟閃回模式
SQL> alter database flashback on;Database altered.
關閉閃回執行可通過如下命令
SQL> alter database flashback off;Database altered.
確認閃回是否開啟
select name,current_scn,flashback_On from v$database;
1. DB_RECOVERY_FILE_DEST_SIZE和 DB_RECOVERY_FILE_DEST
數據庫中怎么刪除數據,要想使用Flashback Database, 必須使用Flash Recovery Area,因為Flashback Database Log只能保存在這里。 要配置的2個參數如下,一個是大小,一個是位置。如果數據庫是RAC,flash recovery area 必須位于共享存儲中。數據庫必須處于archivelog 模式.
啟用Flash Recovery Area:
SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=20G SCOPE=BOTH; SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/XXX' SCOPE=BOTH;
禁用Flash Recovery Area:
SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='' ;
對于Flash Recovery Area,Oracle 是這樣建議的,flash recovery area 設置的越大,flashback database 的恢復能力就越強,因此建議flash recovery area 能夠放的下所有的數據文件,增量備份,以及所有尚未備份的歸檔文件,當然還有它自己產生的flashback logs。
在數據庫運行過程中,oracle 自動向該區域寫入文件,當剩余空間不足15%的時候,它就會在alert 中增加警告,提示你空間不足。但此時不會影響數據庫的正常運轉,直到所有空間統統被用掉之后,oracle 首先嘗試刪除尋些過期的文件,冗余文件或備份過的文件以及閃回日志,如果這些做完了,還是沒有空閑空間的話,數據庫就被hang住了。
數據庫里的數據刪除怎么恢復?2. DB_FLASHBACK_RETENTION_TARGET:
該參數用來控制flashback log 數據保留的時間,或者說,你希望flashback database 能夠恢復的最早的時間點。默認值是1440,單位是minute,即24 小時,需要注意的是該參數雖然未直接指定flash recovery area大小,但卻受其制約,舉個例子假如數據庫每天有10%左右的數據變動的話,如果該初始化參數值設置為1440,則flash recovery area 的大小至少要是當前數據庫實際容量的10%,如果該初始化參數設置為2880,則flash recovery area 的大小就至少是數據庫所占容量的20%。
SQL>alter system set db_flashback_retention_target=1440 scope=both;
1.一旦關閉閃回數據庫,flashback recovery area中的閃回日志將自動全部刪除
2.即便以resetlogs打開數據庫,當前閃回日志里的內容仍然保留,仍然可以繼續進行閃回以restlogs方式打開數據庫。之所以考慮以read only放是打開數據庫,主要是因為以resetlog方式打開數據庫后,用戶即可操作數據庫,無法校驗閃回的準確性。另外,當閃回數據庫與DATA GUARD結合后,當主庫發生邏輯損壞,我們可以閃回備庫,然后以read only方式打開備庫,將數據從備庫中導出后導入到主庫中,這樣將對數據和業務的影響減小到最小。
3.如果閃回數據庫的時間點之間進行了控制文件的恢復或重建,數據文件的收縮,或刪除了某個表空間,則閃回將失敗。
oracle 查找重復數據、4.閃回日志在出現空間壓力的情況下,oracle會自動刪除閃回日志,則有可能導致無法閃回到指定的時間點。如果希望閃回到指定的時間點,可進行如下操作
SQL> create restore point must_to_flashback guarantee flashback database;
這樣我們就給當前時間點取 must_to_flashback這個名字,確保能閃回到該時間點上
5.閃回刪除 只能用于非系統表空間和本地管理的表空間
6. 對象的參考約束、索引不會被恢復,指向該對象的外鍵約束需要重建。
7. 對象能否恢復成功,取決與對象空間是否被覆蓋重用。
oracle查找相同數據?8. 當刪除表時,信賴于該表的物化視圖也會同時刪除,但是由于物化視圖并不會被放入recycle bin,因此當你執行flashback table to before drop 時,也不能恢復依賴其的物化視圖,需要dba 手工介入重新創建。
9. 對于Recycle Bin中的對象,只支持查詢.
當你開啟flashback_on后Oracle會自動在FRA目錄增加一個flash_recover_area的目錄,用來寫閃回日志,切記不能直接rm -rf刪除,只能通過關閉flashback_on來手動清理。后面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注一下~
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态