在工作中,如果誤操作刪除資料,可能會導致無可挽回的損失(本文以 oracle 資料庫為例,介紹關於表中資料刪除的解決辦法)。
刪除表資料有三種方法:delete,drop,truncate
一:delete 誤刪除的解決方法
原理:利用 oracle 提供的閃回方法,如果在刪除資料後還沒做大量的操作(只要保證被刪除資料的塊沒被覆寫),就可以利用閃回方式直接找回刪除的資料。
詳細步驟(方法一):一:確定刪除時間點(在刪除資料之前的時間就行,不過最好是刪除資料的時間點)。
二:找到刪除的資料
select 星號 from 表名 as of timestamp to_timestamp(『刪除時間點』,『yyyy-mm-dd hh24:mi:ss』)
三:把刪除的資料重新插入原表,注意:需要保證主鍵不可重複
insert into 表名 (select * from 表名 as of timestamp to_timestamp(『刪除時間點』,『yyyy-mm-dd hh24:mi:ss』))
詳細步驟(方法二):二:drop 誤刪除的解決方法如果表結構沒有發生改變,可以直接使用閃回整個表的方式來恢復資料(表閃回要求使用者必須要有 flash any table 許可權)。
一:開啟行移動功能
alter table 表名 enable row movement。
二:恢復表資料
flashback table 表名 to timestamp to_timestamp(刪除時間點』,『yyyy-mm-dd hh24:mi:ss』)
三:關閉行移動功能 ( 千萬別忘記 )
alter table 表名 disable row movement
原理:由於 oracle 在刪除表時,沒有直接清空表所佔的塊,oracle 把這些已刪除的表的資訊放到了乙個虛擬容器 「 **站 」 中,而只是對該錶的資料塊做了可以被覆寫的標誌,所以在塊未被重新使用前還可以恢復。
詳細步驟:總結查詢這個 「**站」 或者查詢 user_tables 檢視來查詢已被刪除的表:
(1):select table_name,dropped from user_tables。
(2):select object_name,original_name,type,droptime from user_recyclebin。
在以上資訊中,表名都是被重新命名過的,字段 table_name 或者 object_name 就是刪除後在**站中的存放表名。
一:記得表名:flashback table 原表名 to before drop。
二:不記得表名,也可以直接使用**站的表名進行恢復,然後進行重新命名:
flashback table 「**站中的表名」 to before drop rename to 新錶名。
oracle的閃回功能除了以上基本功能外,還可以閃回整個資料庫:
使用資料庫閃回功能,可以使資料庫回到過去某一時間點, 語法如下:
sql > alter database flashback on
sql > flashback database to scn scnno;
sql > flashback database to timestamp to_timestamp(『時間點』,『yyyy-mm-dd hh24:mi:ss』);
oracle 提供以上機制保證了安全操作,但也帶來了空間占用的問題,由於以上機制的執行,使用 drop 表或者 delete 資料後,空間不會自動**,對於一些確定不使用的,刪除時需要同時**空間:(1):採用 truncate 方式進行刪除(不能進行資料恢復了)。
(2):在 drop 時加上 purge 選項,即:drop table 表名 purge
oracle 誤刪除資料恢復方法
方法一 insert into t cc object select from t cc object as of timestamp to date 2013 11 1 15 00 00 yyyy mm dd hh24 mi ss 這句sql的意思是找到t cc object 表裡2013 11 ...
ORACLE誤刪除資料的恢復方法
有很多原因導致了資料記錄的誤刪,怎樣恢復誤刪的記錄呢?先來看看這個概念 scn 系統改變號 它的英文全拼為 system change number 它是資料庫中非常重要的乙個資料結構。scn提供了oracle的內部時鐘機制,可被看作邏輯時鐘,這對於恢復操作是至關重要的 注釋 oracle 僅根據 ...
oracle誤刪除資料的恢復方法
學習資料庫時,我們只是以學習的態度,考慮如何使用資料庫命令語句,並未想過工作中,如果誤操作一下,都可能導致無可挽回的損失。當我在工作中真正遇到這些問題時,我開始尋找答案。今天主要以oracle資料庫為例,介紹關於表中資料刪除的解決辦法。不考慮全庫備份和利用歸檔日誌 刪除表中資料有三種方法 delet...