溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle中Drop,Delete,Truancate表恢復

發布時間:2020-09-09 11:56:23 來源:網絡 閱讀:1105 作者:神諭03 欄目:關系型數據庫

Oracle中Drop,delete,truancate表恢復

oracle中,常常會由于一些失誤導致表的刪除,以下是我寫的一些表恢復的方法。

閃回模式得滿足條件(啟用閃回區和啟用歸檔):

1.檢查是否啟動了flash recovery area

show parameter db_recovery_file

2.檢查是否啟用了歸檔

archive log list;


(一)Drop表的恢復

如果按照平時刪除表的方法:(Drop table tablename;)的話。表不會立即被刪除,而是存放于回收站中(Oracle 10g以后才有)。我們可以通過閃回(Flashback)把表恢復。

 查看被回收站中刪除的表:

    Select * from dba_recyclebin (where type='TABLE'); --找出對應的表是否存在

  閃回表:

    Flashback tbale 表名 to before drop;

**回收站存放的不僅僅只有表,還有其他對象


(二)Delete表的恢復

同樣,Delete后可以通過閃回時間戳或者閃回SCN號進行恢復。

  基于時間戳恢復

①確定刪除數據的時間(在刪除數據之前的時間就行,不過最好是刪除數據的時間點)

②用以下語句找出刪除的數據:

 select * from 表名 as of timestamp to_timestamp('刪除時間點','yyyy-mm-dd hh34:mi:ss')

開啟行移動功能 

 alter table 表名 enable row movement

④把刪除的數據重新插入原表:

 insert into 表名 (select * from 表名 as of timestamp to_timestamp('刪除時間點','yyyy-mm-dd hh34:mi:ss'));注意要保證主鍵不重復。

⑤關閉行移動功能 ( 千萬別忘記 )

 alter table 表名 disable row movement

  基于SCN號恢復

①獲取當前的SCN號
 select dbms_flashback.get_system_change_number from dual; --假設得到scn號為10672000

②如果知道刪除前的SCN號最好,如果不知道就通過閃回查詢嘗試.

 select count(*) from 表名 as of scn 10671000; --如果數據量為0,則繼續提前scn號

 select count(*) from 表名 as of scn 10670000; --查詢的數據量為原來的數據量,則ok

③通過查詢的SCN號進行閃回恢復

 insert into 表名 select * from tablename as of scn 10670000;


(三)Truncate表的恢復

truncate表后不會產生日志記錄和回滾段空間的使用,不能用查詢閃回恢復。

①最簡單的方法:下載使用PRM (數據庫災難恢復工具)

②進行數據庫閃回(在生產庫不推薦):

 select  sysdate from dual;  --查看時間戳,確認已經開啟閃回,如果沒開啟,只能用①方法了;

 shutdown immediate;  --關閉數據庫

 startup mount;  --啟動到mount狀態

 flashback database to timestamp to_timestamp('2017-07-30 18:22:33','yyyy-mm-dd hh34:mi:ss');  --閃回刪除時間點的時間

 alter database open;  --打開數據庫









向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女