數據庫誤刪記錄如何恢復


--原文 

oracle 

1、第一種情況適用於delete刪除(一條記錄)的方式,利用oralce提供的閃回方法進行數據恢復。

  前提:需要知道刪除時間,就算不可以也必須確定准確的刪除數據前的時間

  然后利用以下語句可以找回刪除的數據,再利用第二條語句將語句恢復到原表(前提原表主鍵唯一) 

1 SELECT * FROM 表名 AS OF timestamp to_timestamp('刪除時間點''yyyy-mm-dd hh24:mi:ss');
2 insert into 表名 (select * from 表名 as of timestamp to_timestamp('刪除時間點','yyyy-mm-dd hh24:mi:ss'));

     第二種方法可以通過閃回整個表來恢復誤刪除的數據,但僅適用於表結構沒有發生改變且用戶有flash any table權限的情況下

  前提:表結構沒有發生改變   和   用戶具有  flash  any  table 權限的情況

   

alter table 表名 enable row movement
flashback table 表名 to timestamp to_timestamp('刪除時間點','frombyte yyyy-mm-dd hh24:mi:ss')

2、該方法適用於 drop(整個表被刪除)的方式

select table_name,dropped from user_tables
select object_name,original_name,type,droptime from user_recyclebin

注意此時的表名稱已經被重新命名,table_name和object_name就是回收站中的存放表名,如果管理員此時可以明確原表的名稱可以通過

flashback table 原表名 to before drop

語句進行數據恢復,如果不知道原表名稱可以直接按照回收站中的表名稱將數據恢復回復來,然后通過

flashback table "回收站中的表名(如:Bin$DSbdfd4rdfdfdfegdfsf==$0)" to before drop rename to 新表名

語句就可以重新命名。

3、第三種方法同樣利用oracle數據庫的閃回功能可以將數據庫恢復到過去某一狀態,語法如下:

1 alter database flashback on
2 flashback database to scn SCNNO;
3 flashback database to timestamp to_timestamp('frombyte 2007-2-12 12:00:00','yyyy-mm-dd hh24:mi:ss');

 

介紹到這里有朋友發現問題了,oracle數據庫提供了可以恢復數據的保障機制,但也不可避免的占用了大量空間,使用drop一個表或者delete數據后空間並不能自動進行回收,如果確定需要刪除的數據又不想無謂的占用空間該如何操作呢?我們可以使用以下兩種方式:

1、采用truncate方式進行截斷。(但不能進行數據恢復了)

2、在drop時加上purge選項:

drop table 表名 purge;

該選項也可以通過刪除recyclebin區域來永久性刪除表 ,原始刪除表drop table emp cascade constraints

purge table emp;

刪除當前用戶的回收站:

purge recyclebin;

刪除全體用戶在回收站的數據:

purge dba_recyclebin_frombyte.com;

 

--原文 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM