相信有很多oracle數(shù)據(jù)庫用戶都遇到過在操作Oracle數(shù)據(jù)庫時誤刪除某些重要數(shù)據(jù)的情況,這個時候如果數(shù)據(jù)庫沒有備份且數(shù)據(jù)十分重要的,怎么才能恢復(fù)誤刪除的數(shù)據(jù)呢?北亞企安數(shù)據(jù)恢復(fù)工程師下面簡單介紹幾個誤刪除Oracle數(shù)據(jù)庫數(shù)據(jù)的恢復(fù)方法。
Oracle數(shù)據(jù)庫誤刪除數(shù)據(jù)的恢復(fù)方法一:
利用oracle提供的閃回方法恢復(fù)數(shù)據(jù),該方法適用于delete刪除(一條記錄)的情況:
首先需要知道是什么時間進(jìn)行的刪除操作,如果不能確定具體時間點則選擇盡量準(zhǔn)確的刪除數(shù)據(jù)前的時間。然后利用“select * from 表名 as of timestamp to_timestamp('刪除時間點','yyyy-mm-dd hh24:mi:ss')”語句可以找回刪除的數(shù)據(jù)。
利用“insert into 表名 (select * from 表名 as of timestamp to_timestamp('刪除時間點','yyyy-mm-dd hh24:mi:ss'))”語句就可以將恢復(fù)出來的數(shù)據(jù)插入原表中(注意要保證主鍵不重復(fù))。
另一種方法可以通過閃回整個表來恢復(fù)誤刪除的數(shù)據(jù),但僅適用于表結(jié)構(gòu)沒有發(fā)生改變且用戶有flash any table權(quán)限的情況下,語句如下:
alter table 表名 enable row movement
flashback table 表名 to timestamp to_timestamp('刪除時間點','yyyy-mm-dd hh24:mi:ss')
Oracle數(shù)據(jù)庫誤刪除數(shù)據(jù)的恢復(fù)方法二:
oracle數(shù)據(jù)庫在刪除表時會將刪除信息存放于某虛擬“回收站”中而非直接清空,再此種狀態(tài)下數(shù)據(jù)庫標(biāo)記該表的數(shù)據(jù)庫為“可以復(fù)寫”,所以在該塊未被重新使用前依然可以恢復(fù)數(shù)據(jù)。該方法適用于drop刪除。
首先需要通過查詢user_table視圖找到被刪除的表:
select table_name,dropped from user_tables
select object_name,original_name,type,droptime from user_recyclebin
注意此時的表名稱已經(jīng)被重新命名,table_name和object_name就是回收站中的存放表名。如果知道原表的名稱可以通過“flashback table 原表名 to before drop”語句恢復(fù)數(shù)據(jù),如果不知道原表的名稱可以直接按照回收站中的表名稱將數(shù)據(jù)恢復(fù),然后通過
“flashback table "回收站中的表名(如:Bin$DSbdfd4rdfdfdfegdfsf==$0)" to before drop rename to 新表名”語句就可以重新命名。
Oracle數(shù)據(jù)庫誤刪除數(shù)據(jù)的恢復(fù)方法三:
利用oracle數(shù)據(jù)庫的閃回功能可以將數(shù)據(jù)庫恢復(fù)到過去某一狀態(tài),語句如下:
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數(shù)據(jù)庫雖然提供了恢復(fù)數(shù)據(jù)的保障機制,但是也占用了大量空間,使用drop刪除一個表或者delete刪除數(shù)據(jù)后空間并不能自動回收。如果確實需要恢復(fù)刪除的數(shù)據(jù)又不想空間被浪費又該如何操作呢?可以采用以下方法:
1、采用truncate方式進(jìn)行截斷。
2、在drop時加上purge選項:drop table 表名 purge,該選項也可以通過刪除recyclebin區(qū)域來永久性刪除表。
刪除表:
SQL>drop table emp cascade constraints;
SQL>purge table emp;
刪除當(dāng)前用戶的回收站:
SQL>purge recyclebin;
刪除全體用戶在回收站的數(shù)據(jù):
SQL>purge dba_recyclebin
審核編輯 黃宇
-
數(shù)據(jù)恢復(fù)
+關(guān)注
關(guān)注
10文章
712瀏覽量
18983 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
4019瀏覽量
68331
發(fā)布評論請先 登錄
MySQL數(shù)據(jù)庫備份恢復(fù)方式對比
Oracle數(shù)據(jù)庫ASM實例無法掛載的數(shù)據(jù)恢復(fù)案例
虛擬機數(shù)據(jù)恢復(fù)—虛擬機vmdk文件被刪除的數(shù)據(jù)恢復(fù)案例
vsan數(shù)據(jù)恢復(fù)—VSAN超融合架構(gòu):供電異常的vsan數(shù)據(jù)恢復(fù)案例
Netapp數(shù)據(jù)恢復(fù)—誤刪NetApp卷數(shù)據(jù):從崩潰到恢復(fù)的實戰(zhàn)復(fù)盤
Netapp數(shù)據(jù)恢復(fù)—Netapp存儲數(shù)據(jù)恢復(fù)揭秘
Mysql數(shù)據(jù)恢復(fù)—Windows Server下MySQL(InnoDB)全表誤刪數(shù)據(jù)恢復(fù)案例
服務(wù)器數(shù)據(jù)恢復(fù)—服務(wù)器上的卷被誤刪數(shù)據(jù)如何恢復(fù)?
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—服務(wù)器異常斷電導(dǎo)致Oracle數(shù)據(jù)庫故障的數(shù)據(jù)恢復(fù)案例
Oracle數(shù)據(jù)恢復(fù)—格式化分區(qū)導(dǎo)致Oracle數(shù)據(jù)庫報錯的數(shù)據(jù)恢復(fù)案例
服務(wù)器數(shù)據(jù)恢復(fù)—raid5陣列多塊硬盤離線導(dǎo)致raid崩潰的數(shù)據(jù)恢復(fù)
西門子840D數(shù)控系統(tǒng)備份及恢復(fù)方法
oracle數(shù)據(jù)恢復(fù)—oracle數(shù)據(jù)庫誤執(zhí)行錯誤truncate命令如何恢復(fù)數(shù)據(jù)?
分布式存儲數(shù)據(jù)恢復(fù)—虛擬機上hbase和hive數(shù)據(jù)庫數(shù)據(jù)恢復(fù)案例
服務(wù)器數(shù)據(jù)恢復(fù)—AIX小型機誤刪數(shù)據(jù)如何恢復(fù)!
Oracle數(shù)據(jù)恢復(fù)—Oracle刪除數(shù)據(jù)不用怕!這些數(shù)據(jù)恢復(fù)方法了解一下
評論