ORACLE資料庫誤操作執行了DELETE,該如何恢複資料?____資料庫

來源:互聯網
上載者:User

作為一個程式員,資料庫操作是必須的,但是如果操作失誤,一般都會造成比較嚴重的後果。

今天一不小心,幹了一件揪心的事情,將正在使用的組織機構誤操作執行了delete,頓時大腦有點缺氧,感覺蒙圈了(相信對於沒有資料備份和復原經驗的小夥伴來說都是這樣的感受),但是一想,資料庫一般都是支援資料復原的,然後尋找了一下解決方案。

由於用的是Oracle資料庫,這一點非常好,因為Oracle有閃回功能,瞬間眼前一片光芒。

有兩種方案解決此問題,具體操作:

一:根據時間來恢複:

1、查詢資料庫目前時間(目的是為了檢查資料庫時間是否與你電腦時間相近,避免時間不同而將資料恢複到錯誤時間點)

select  to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

2、查詢刪除資料時間點之前的資料

select * from 表名 as of timestamp to_timestamp('2016-08-11 16:12:11','yyyy-mm-dd hh24:mi:ss');

(若沒有資料 ,將時間繼續提前)

3、恢複資料(激動人心的時刻)

flashback table 表名 to timestamp to_timestamp('2016-08-11 16:12:11','yyyy-mm-dd hh24:mi:ss');

大功告成,資料恢複成功;

但是也可能會出現問題,比如報錯:ORA-08189:未啟用行移動功能,不能閃回表;

不要怕,這個很簡單;

alter table 表名 enable row movement;

然後再次執行上面SQL即可;

二:根據資料庫SCN恢複資料

1、查詢當前資料庫SCN號

select current_scn from v$database;(不能執行的話,切換到sys使用者或system使用者查詢)    

查詢到的當前值為:91799986

2、縮小SCN號查詢被刪除表資料(若無資料繼續縮小SCN,由於資料庫操作不止一人,SCN號變化比較多,可以多縮小几個號)

select * from 表名 as of scn 91799980;

3、恢複資料

flashback table 表名 to scn 91799980;

恢複完成。若報錯:ORA-08189:未啟用行移動功能,不能閃回表;結果方案同上。


心情終於可以平複了。

對於其他資料庫誤操作執行delete的話,應該也有對應的解決方案,暫時還沒有嘗試。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.