閃回恢復一個表中的資料
在生產當中,需要做恢復資料的場景還算是相當少的,特別大的恢復場景,比如整個資料庫的恢復,或者是這個表空間的恢復,
這些少之又少。不過,表級資料的恢復還是時不時會遇到的,比如有些業務人員或者維護人員修改錯誤的資料做了提交,或者
不小心把某條資料刪除了。遇到這種情況,首先不要急,得要把問題搞清楚,不要急著去做恢復資料,一不小心,可能連dba
都採取了錯誤的恢復方法,那就麻煩了,反而越幫越忙了。
最近幾天,我自己也遇到幾次這種情況:業務人員反映,誤刪除了一條資料,現在又想要回來那一條資料,還有就是update一條資料記錄
的時候忘記帶上where條件,導致了表中所有的記錄的同個欄位的值相同,commit了才發現更新時忘記帶上條件了。錯誤刪除整張表的資料或者
truncate整張表的情況倒是還沒有遇到。
生成當中,一般都會開啟閃回恢復功能,在這個的基礎上,我們根據刪除資料的多少情況去選擇哪一種方法來恢復。當然,如果是使用閃回方法
做恢復,還有一個就是undo表空間有足夠的回滾資料塊。一下各種情況,個人的建議方法:
1、刪除一條或者多條記錄,或者錯誤多條資料,應該採用閃回查詢技術的方法來恢復:
insert into suxing.ins_771
select t.* from suxing.ins_771 as of timestamp(sysdate-1/24) t where user_id='4877';
或者:
update suxing.ins_771 set ID=
(select ID from suxing.ins_771 as of timestamp(sysdate-1/24) where user_id='4877');
如果是整個表的同個欄位都修改錯了,需要透過閃回查詢建立一箇中間表,準備在更新回更新前的資料使用。
2、刪除整個表的時候:
3、注意,在第1種的情況下,直接把表閃回到某個時間戳是存在風險的。要知道,在生產當中,可能存在多個人在你操作失誤
之後多次使用同樣的表,不同的記錄,這種情況,直接做表閃回,邏輯是不夠嚴密的。除非,在你出錯之後的一段的時間,沒有其他人
再修改過這個表,可以直接使用以下語句做恢復:
flashback table test1 to timestamp
2 to_timestamp('2016-09-29 22:20:37','yyyy-mm-dd hh24:mi:ss');
這些少之又少。不過,表級資料的恢復還是時不時會遇到的,比如有些業務人員或者維護人員修改錯誤的資料做了提交,或者
不小心把某條資料刪除了。遇到這種情況,首先不要急,得要把問題搞清楚,不要急著去做恢復資料,一不小心,可能連dba
都採取了錯誤的恢復方法,那就麻煩了,反而越幫越忙了。
最近幾天,我自己也遇到幾次這種情況:業務人員反映,誤刪除了一條資料,現在又想要回來那一條資料,還有就是update一條資料記錄
的時候忘記帶上where條件,導致了表中所有的記錄的同個欄位的值相同,commit了才發現更新時忘記帶上條件了。錯誤刪除整張表的資料或者
truncate整張表的情況倒是還沒有遇到。
生成當中,一般都會開啟閃回恢復功能,在這個的基礎上,我們根據刪除資料的多少情況去選擇哪一種方法來恢復。當然,如果是使用閃回方法
做恢復,還有一個就是undo表空間有足夠的回滾資料塊。一下各種情況,個人的建議方法:
1、刪除一條或者多條記錄,或者錯誤多條資料,應該採用閃回查詢技術的方法來恢復:
insert into suxing.ins_771
select t.* from suxing.ins_771 as of timestamp(sysdate-1/24) t where user_id='4877';
或者:
update suxing.ins_771 set ID=
(select ID from suxing.ins_771 as of timestamp(sysdate-1/24) where user_id='4877');
如果是整個表的同個欄位都修改錯了,需要透過閃回查詢建立一箇中間表,準備在更新回更新前的資料使用。
2、刪除整個表的時候:
flashback table "BIN$PafEvIK1PW/gUwEAAH/iiQ==$0"
2 to before drop rename to test11;
#該處的新表表名test11可以與原表名相同,只要恢復時候原來表名不被佔用。
2 to before drop rename to test11;
#該處的新表表名test11可以與原表名相同,只要恢復時候原來表名不被佔用。
3、注意,在第1種的情況下,直接把表閃回到某個時間戳是存在風險的。要知道,在生產當中,可能存在多個人在你操作失誤
之後多次使用同樣的表,不同的記錄,這種情況,直接做表閃回,邏輯是不夠嚴密的。除非,在你出錯之後的一段的時間,沒有其他人
再修改過這個表,可以直接使用以下語句做恢復:
flashback table test1 to timestamp
2 to_timestamp('2016-09-29 22:20:37','yyyy-mm-dd hh24:mi:ss');
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31392094/viewspace-2138600/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oralce恢復誤刪除的表中的資料(閃回、閃回查詢)
- 【備份恢復】閃回資料庫(一)閃回資料庫的管理資料庫
- (f)--閃回恢復區---實踐2---閃回表(閃回DML部分資料會用到閃回查詢)
- Oracle資料庫的閃回恢復區Oracle資料庫
- Orcale利用閃回功能恢復資料
- 【備份恢復】閃回資料庫(五)RMAN 命令列閃回資料庫資料庫命令列
- 【備份恢復】閃回資料庫(二) 基於 SCN 閃回資料庫資料庫
- 閃回查詢恢復誤刪資料
- Oracle閃回刪除恢復誤刪資料Oracle
- 【備份恢復】閃回資料庫(三)基於時間戳閃回資料庫資料庫時間戳
- Oracle閃回功能恢復偶然丟失的資料(轉)Oracle
- 使用閃回查詢恢復誤刪除的資料
- 用Oracle閃回功能恢復偶然丟失的資料Oracle
- 【備份恢復】閃回資料庫(四)基於可靠還原點閃回資料庫資料庫
- Oracle閃回恢復區Oracle
- Oracle閃回查詢恢復delete刪除資料Oracledelete
- 一個閃回區報警的資料恢復(r11筆記第63天)資料恢復筆記
- 利用undo的閃回特性恢復錯誤操作的表
- 10g裡的閃回表命令-- 表的刪除和恢復
- 【備份恢復】 閃回技術之閃回刪除
- Oracle -- 閃回恢復區---實踐1---閃回庫Oracle
- Oracle DBA2 ---- 閃回恢復Oracle
- 閃回查詢恢復過程
- Oracle drop分割槽表單個分割槽無法透過閃回恢復Oracle
- 【備份恢復】閃回技術之閃回版本查詢
- 循序漸進oracle第8章:Oracle的閃回特性之恢復truncate刪除表的資料Oracle
- oracle 閃回基於時間的恢復Oracle
- 利用flashback閃回表和資料
- 記一次在非歸檔模式下的Oracle資料庫用閃回操作恢復表和DML語句模式Oracle資料庫
- 閃回資料庫測試之一 :關閉閃回的表空間是否可以開啟資料庫
- 循序漸進oracle第8章:Oracle的閃回特性之恢復已經提交刪除的表資料Oracle
- 循序漸進oracle第8章:Oracle的閃回特性之恢復刪除表的資料四種方法Oracle
- 閃迪隨身碟資料恢復資料恢復
- 【備份恢復】 閃回技術之閃迴歸檔
- Oracle資料庫的閃回恢復區及多歸檔路徑的設定Oracle資料庫
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- Oracle procedure,package,function,triger 閃回 恢復OraclePackageFunction
- 閃回(關於閃回資料庫)資料庫