利用undo進行資料的恢復操作
【說明】無意中看到一個同事的QQ留言上面寫著“真累“,還沒有過30分鐘就接到這個同事的電話,如下:剛在做刪除資料的時候,發現由於條件沒有寫好,導致刪錯了,有沒有辦法恢復;接到這個任務 ,首先是深深的感慨了一下:人在狀態不好的情況下儘量多休息少做事,特別是涉及到很重要的事情。
跟著同事確定了出現問題的時間點後,先是安慰一下,讓他從那惶恐不安的心裡恢復過來,然後開始了找尋資料的工作。
【環境說明】
- 資料庫版本:11.2.0.3
- 資料庫閃回:未開啟
【恢復步驟】
【1】確定使用者刪除資料的時間點和指令碼,對於資料的恢復有很大的幫助,最好再對比下使用者電腦上面的時間和伺服器上面的時間差,查詢的時候需要補上時間差(經檢查伺服器的時間和使用者電腦的時間相差5分鐘)
使用者反饋客戶端上面操作的時間時17:35分,但是伺服器的時間落後使用者的時間5分鐘,所以查詢指令碼如下:
select * from t_original_archives as of timestamp to_timestamp('2015-11-17 17:30:00','YYYY-MM-DD HH24:MI:SS') where id=1974244
【2】把資料匯出讓使用者進行檢查
create table t_original_archives_bak as select * from t_original_archives as of timestamp to_timestamp('2015-11-17 17:30:00','YYYY-MM-DD HH24:MI:SS') where id=1974244;
【3】確認沒有問題後變可以把誤刪除的資料插入到原來的表中。
insert into t_original_archives select * from t_original_archives_bak
經過以上步驟,又一次拯救了一次資料災難;
整個恢復的過程中對於誤刪除時間的控制最為重要,一般15分鐘之內的資料庫可以找到,超過15分鐘的話要看天吃飯了。
以下是閃回查詢的原理。
Oracle資料庫的undo表空間用於存放資料刪除前的前映象,保證了資料的讀一致性。所以資料被更新或刪除的時候,資料並沒有馬上消失,而是會放在undo表空間裡面的。
SQL> show parameter undo; NAME TYPE VALUE |
引數說明:
undo_management = auto,設定自動undo自動管理方式,預設設定為:auto;
undo_retention = n(秒),設定決定undo最多的儲存時間,預設是900秒,建議條件允許的情況下可以設定多一些。
注意:並不是說系統一定會保留900秒的前映象,也不是900秒後保留的前映象就會消失,跟undo表空間的大小和系統的繁忙程度有關係。(一般情況15分鐘之內的資料可以被查詢得到的)
該引數的修改方式:SQL> alter system set undo_retention = 1800;
2、怎麼保證undo存放的資料的存放時間?
方法:透過使用RETENTION GRARANTEE子句,保證資料庫按照undo_retention的時間保留;
2.1 啟動保證保留 ALTER DATABASE UNDOTBS01 RETENTION GUARANTEE
2.2 關閉撤銷資訊的保證保留 ALTER DATABASE UNDOTBS01 RETENTION NOGUARANTEE |
3、啟用RETENTION GRARANTEE的弊端
當啟用了該引數後,業務繁忙的情況下,當undo表空間的使用率100%的情況下,資料庫就會宕住,因為要保證undo的映象不被覆蓋,所以就不允許其他DDL語句的繼續執行;
4、UNDO表空間大小的設定
方法1:可以根據AWR報告給出的建議來設定UNDO表空間的大小。
方法2:在業務系統高峰期的情況下,隨時觀察UNDO表空間的使用情況,進行調整。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
本文作者:JOHN,某上市公司DBA,業餘時間專注於資料庫的技術管理,從管理的角度去運用技術。
技術部落格:獵人筆記 資料庫技術群:367875324 (請備註資料庫型別)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12679300/viewspace-1840578/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用undo的閃回特性恢復錯誤操作的表
- 【備份恢復】丟失所有控制檔案,利用RMAN進行恢復操作
- ORACLE利用STANDBY端RMAN備份進行資料恢復Oracle資料恢復
- Oracle資料庫UNDO損壞後的恢復Oracle資料庫
- Mysql 誤刪資料進行恢復MySql
- rman恢復時跳過資料檔案,進行恢復
- 【譯文】利用dplyr包進行資料操作
- mysql使用binlog進行資料恢復MySql資料恢復
- 利用Log Explorer將你已經delete,truncate,drop過的資料進行恢復delete
- 資料庫複製方式進行資料庫恢復資料庫
- 只有.dbf資料檔案進行資料庫恢復資料庫
- 實驗1:利用BBED工具恢復刪除的資料行
- 利用Omni Recover恢復IOS資料iOS
- 使用netbackup進行資料庫恢復案例資料庫
- 表資料被誤操作的恢復
- Orcale利用閃回功能恢復資料
- 利用RMAN恢復整個資料庫資料庫
- mongdb遭遇勒索,用備份進行資料恢復資料恢復
- 資料庫resetlogs後進行rman恢復7資料庫
- 資料庫resetlogs後進行rman恢復6資料庫
- 資料庫resetlogs後進行rman恢復5資料庫
- 資料庫resetlogs後進行rman恢復4資料庫
- 資料庫resetlogs後進行rman恢復3資料庫
- 資料庫resetlogs後進行rman恢復2資料庫
- 資料庫resetlogs後進行rman恢復1資料庫
- 使用dbms_backup_restore進行資料庫恢復REST資料庫
- 透過RMAN進行資料庫恢復(step by step)資料庫
- 用rman進行恢復資料,簡單步驟!
- git reset --hard 操作後的資料恢復Git資料恢復
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- 記一次undo表空間資料塊恢復
- 【儲存資料恢復案例】Netapp誤操作刪除lun的資料恢復資料恢復APP
- (個人)利用日誌挖掘恢復誤操作
- 伺服器資料恢復-誤操作導致mysql資料庫資料丟失的資料恢復案例伺服器資料恢復MySql資料庫
- 恢復資料,資料塊恢復
- SQL利用資料庫日誌恢復資料到時間點的操作 -- 轉自網路SQL資料庫
- 利用binlog日誌恢復mysql資料MySql
- 利用rman恢復來複制資料庫資料庫