標籤:rom esc span 誤刪 區分 lang bsp 因此 今天
今天同步兩個表的資料,表存在自身關聯關係。因沒有發現被同步表已做修改(新增了若干條資料,這些資料間存在父子關係),導致這些新增的資料被刪除了。
於是想以下方式恢複:
alter table tablename enable row movement;--啟動表的row movement特性
flashback table tablename to timestamp to_timestamp(‘2017-10-25 09:30:00‘,‘yyyy-mm-dd hh24:mi:ss‘);--做閃回操作,閃回到刪除操作前的時間,恢複資料
然後執行第二行時,執行失敗,原因是閃回操作在一個事務中,之前被刪除資料間的父子關係必須是先有父記錄,再恢複子記錄,因此至少需要兩次閃回。此時必須知道之前刪除資料的準確時間。此處利用Oracle提供的系統檢視表——v$sql 或 v$sqlarea,查詢刪除語句的執行時間:
select * from v$sqlarea t where t.SQL_TEXT like ‘DELETE FROM TABLENAME T WHERE ID%‘ order by t.LAST_ACTIVE_TIME desc;--like的內容區分大小寫
查詢到結果[複製出 SQL_TEXT 列和 LAST_ACTIVE_TIME 列]:
DELETE FROM SECURITY_MODULE T WHERE ID = ‘402899955f28120f015f284e2a6b01b2‘ 2017-10-25 9:53:39
DELETE FROM SECURITY_MODULE T WHERE ID = ‘402899955f28120f015f285d55d701b7‘ 2017-10-25 9:53:35
DELETE FROM SECURITY_MODULE T WHERE ID = ‘402899955f28120f015f2853c88701b3‘ 2017-10-25 9:53:35
DELETE FROM SECURITY_MODULE T WHERE ID = ‘402899955f28120f015f285c983401b4‘ 2017-10-25 9:53:35
DELETE FROM SECURITY_MODULE T WHERE ID = ‘402899955f28120f015f285d9c6501b8‘ 2017-10-25 9:53:35
DELETE FROM SECURITY_MODULE T WHERE ID = ‘402899955f28120f015f285d009301b6‘ 2017-10-25 9:53:35
DELETE FROM SECURITY_MODULE T WHERE ID = ‘402899955f28120f015f285ccc1501b5‘ 2017-10-25 9:53:35
DELETE FROM SECURITY_MODULE T WHERE ID = ‘402899955f28120f015f2838d52d01ad‘ 2017-10-25 9:53:34
結果剛好是之前的刪除語句,根據LAST_ACTIVE_TIME,最後執行的是第一條,各資料的先後關係確定。接著做閃回操作,設定閃回時間為:2017-10-25 9:53:39,
第二次設定為:2017-10-25 9:53:34,資料順利恢複。
恢複Oracle誤刪資料一點小記