閃回恢復一個表中的資料
在生產當中,需要做恢復資料的場景還算是相當少的,特別大的恢復場景,比如整個資料庫的恢復,或者是這個表空間的恢復,
這些少之又少。不過,表級資料的恢復還是時不時會遇到的,比如有些業務人員或者維護人員修改錯誤的資料做了提交,或者
不小心把某條資料刪除了。遇到這種情況,首先不要急,得要把問題搞清楚,不要急著去做恢復資料,一不小心,可能連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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Orcale利用閃回功能恢復資料
- Oracle閃回功能恢復偶然丟失的資料(轉)Oracle
- Oracle drop分割槽表單個分割槽無法透過閃回恢復Oracle
- 閃迪隨身碟資料恢復資料恢復
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- MySQL閃回技術之binlog2sql恢復binlog中的SQLMySql
- 【伺服器資料恢復】raid0資料恢復案例&raid資料回遷案例伺服器資料恢復AI
- MySQL資料庫表誤刪除恢復(一)MySql資料庫
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- 閃迪SanDisk固態硬碟維修資料恢復硬碟資料恢復
- 資料恢復:AMDU資料抽取恢復資料恢復
- 【北亞資料恢復】誤操作導致雲伺服器表被truncate,表內資料被delete的資料恢復資料恢復伺服器delete
- 伺服器資料恢復—雲伺服器mysql資料庫表資料被delete的資料恢復案例伺服器資料恢復MySql資料庫delete
- flashback query閃回資料
- Oracle資料庫閃回Oracle資料庫
- 【資料庫資料恢復】透過恢復NDF檔案修復資料庫的資料恢復過程資料庫資料恢復
- (Les16 執行資料庫恢復)-表空間恢復資料庫
- Oracle閃回技術 為Oracle閃回配置資料庫Oracle資料庫
- Vsan資料恢復—Vsan資料恢復案例資料恢復
- 【Vsan資料恢復】Vsan資料恢復案例資料恢復
- 【北亞資料庫資料恢復】使用delete未加where子句刪除全表資料的Mysql資料庫資料恢復資料庫資料恢復deleteMySql
- mysqldump 恢復單個資料庫MySql資料庫
- 磁碟陣列中raid5壞了一個硬碟資料恢復陣列AI硬碟資料恢復
- 資料庫資料恢復—SQLserver資料庫中勒索病毒被加密怎麼恢復資料?資料庫資料恢復SQLServer加密
- 一個goroutine資料流任務的暫停⏸️與恢復⏯Go
- 伺服器資料恢復後的回遷方法彙總伺服器資料恢復
- 【伺服器資料恢復】OceanStor儲存中NAS卷資料丟失的資料恢復案例伺服器資料恢復
- 伺服器資料恢復—透過拼接資料庫碎片恢復SqlServer資料庫資料的資料恢復案例伺服器資料恢復資料庫SQLServer
- 【資料庫資料恢復】windows server下SqlServer資料庫的資料恢復資料庫資料恢復WindowsServerSQL
- 【資料庫資料恢復】SAP資料庫資料恢復案例資料庫資料恢復
- 資料庫崩潰恢復表結構的方法資料庫
- 東芝硬碟的故障表現及資料恢復硬碟資料恢復
- 【伺服器資料恢復】Storwize儲存Mdisk中硬碟離線的資料恢復案例伺服器資料恢復硬碟
- Sybase ASE資料庫恢復,Sybase資料恢復,資料誤刪除恢復工具READSYBDEVICE資料庫資料恢復dev
- 【vsan資料恢復】vsan資料重構失敗的資料恢復案例資料恢復
- 【資料庫資料恢復】Oracle資料庫誤truncate table的資料恢復案例資料庫資料恢復Oracle
- 【資料庫資料恢復】誤truncate table的Oracle資料庫資料恢復方案資料庫資料恢復Oracle
- 【資料庫資料恢復】Sql Server資料庫資料恢復案例資料庫資料恢復SQLServer
- 一體機HDATA恢復資料