在刪除數據的時候不小心,把delete語句執行錯了,把別的表給delete,而且還執行了commit!真汗.......數據是相當的重要........廢話少說了!趕快找方法吧:
第一種:
1.打開Flash存儲的權限
ALTER TABLE tableName ENABLE row movement ;
2.把表還原到指定時間點
flashback table tableName to timestamp to_timestamp(''2011-02-28 10:40:00'',''yyyy-mm-dd hh24:mi:ss'');
后面的參數為要還原的時間點
第二種:利用ORacle的快照進行查找某個時間點的數據
select * from tableName AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '100' MINUTE)
或
select * from tableName as of timestamp to_timestamp('2011-05-21 11:40:00','YYYY-MM-DD HH24:MI:SS');
這樣可以查詢到指定的時間段的數據,再把查詢到的數據復制到原來的表中。
第三種:其他(在別的地方找到的答案,但還沒有試過!)
刪除表后,可以采用如下操作:在 查詢表user_recyclebin最近操作過的表名稱,然后用閃回(只能用於10G及以上版本)。
select * from user_recyclebin;
FLASH BACK TABLE TABLE_NAME TO BEFORE DROP;
如果是刪了或修改里面的數據,可以先建立一個快表將刪除修改之前狀態的數據找回到這個表中:
CREATE TABLE QUICK_TABLE AS SELECT * FROM TABLE_NAME AS OF TIMESTAMP SYSTEM-1/24 (一小時前的),減去的時間可以自己定。
第四:通過SCN實現
SCN(系統改變號),它的英文全拼為:System Change Number ,它是數據庫中非常重要的一個數據結構。
SCN提供了Oracle的內部時鍾機制,可被看作邏輯時鍾,這對於恢復操作是至關重要的
注釋:Oracle 僅根據 SCN 執行恢復。
它定義了數據庫在某個確切時刻提交的版本。在事物提交時,它被賦予一個唯一的標示事物的SCN 。一些人認為 SCN 是指, System Commit Number ,而通常 SCN 在提交時才變化,所以很多情況下,這兩個名詞經常被交替使用。
究竟是哪個詞其實對我們來說並不是最重要的,重要的是我們知道 SCN 是 Oracle 內部的時鍾機制, Oracle 通過 SCN 來維護數據庫的一致性,並通過SCN 實施 Oracle 至關重要的恢復機制。
1:執行下面語句,將刪除時間轉換為scn
select timestamp_to_scn(to_timestamp('2011-08-03 10:00:00','YYYY-MM-DD HH:MI:SS')) from dual;
結果:11837812:在將table的scn點取出來。
select * from moAS OF SCN 11837813;
最后把查出來得結果insert到原表中
insert into mo select * from mo AS OF SCN 1183781