1、首先新建一張測試表TEST,裡面輸入記錄。由於刪除/更新/插入恢復步驟相同,這裡僅演示刪除資料的情況。
2、刪除其中1條記錄,查看錶中記錄情況,由下圖可見,記錄2被刪除了。
3、恢復之前先確定要恢復到的時間點,下圖可以看出2018-03-07 15:33:00資料是正確的。
SELECT *
FROM TEST AS OF TIMESTAMP TO_TIMESTAMP(‘2018-03-07 15:33:00’, ‘YYYY-MM-DD HH24:MI:SS’);
4、下面進行表資料恢復。
FLASHBACK TABLE TEST TO TIMESTAMP TO_TIMESTAMP(‘2018-03-07 15:33:00’, ‘YYYY-MM-DD HH24:MI:SS’);
可以看到報錯了,原因是沒有開啟行移動。
5、開啟該表的行移動。
ALTER TABLE TEST ENABLE ROW MOVEMENT;
6、再次執行資料恢復。
FLASHBACK TABLE TEST TO TIMESTAMP TO_TIMESTAMP(‘2018-03-07 15:33:00’, ‘YYYY-MM-DD HH24:MI:SS’);
然後檢視資料情況,可以看到已經恢復了。
——開啟行移動功能
alter table 表名 enable row movement;
——恢復表資料
flashback table 表名 to timestamp to_timestamp(‘2014-05-19 09:40:00’,‘yyyy-mm-dd hh24:mi:ss’);
上述時間為刪除資料的時間
備註:恢復後請關閉行移動功能
Oracle10 以上版本,我前一天刪的資料都可以恢復,不要慌,認真跟著每步做就好啦嘻嘻(PS:其實第一次刪標準表資料的我也很方哈哈哈);
舉個栗子:
某天誤刪了標準表的一條資料,就是採購接收的RCV_TRANSACTIONS表
恢復過程:
1、建立這個接收表的備份(Bak)表,備份當天前兩天的所有該表的資料(包括誤刪的)(這個不會影響原表資料的,沒關係,建吧)
CREATE TABLE cux_rcv_transactions_bak1 AS ——-表名自己起(XXX_Bak)
select * from rcv_transactions as of timestamp sysdate-2 ; ——-恢復前兩天天的資料
要恢復資料的這個request_ID(某欄位)我是記下來了,所以不用重新費時間去找(這個可以用原表跟備份表對這前兩天的資料進行比較,用NOT EXIST)
Request_id
698479;
2、找到備份表裡面的這條資料,
SELECT * FROM cux_rcv_transactions_bak1
WHERE TRANSACTION_id = 698479;
3、將這條資料再次插入進RCV_Transactions表裡面
INSERT INTO rcv_transactions
SELECT * FROM cux_rcv_transactions_bak1
WHERE TRANSACTION_id = 698479;
4、可以找到原表原來的資料來
SELECT * FROM rcv_transactions
WHERE TRANSACTION_id = 698479;
1、將你10天前的資料找(如果你的資料還在的話)
create table tmp as
select * from table_name as of timestamp trunc(sysdate)-10;
2、在tmp表裡面找到被你刪掉的那100條資料,插回原表。
3、不過希望不大了,看你的問題已經提了好久了,如果是剛剛被刪掉的話,也許可以找回。
注:trunc(sysdate)-10 就是一個時間點,你可以適當的調整一下這個時間點,來找到你想要的資料。
——-
以上,希望對你有所幫助。
你用的是oracle幾呀?
要是10 版本以上的話,好說,
92的話,要從undo中找
SELECT * FROM tablename AS OF TIMESTAMP
TO_TIMESTAMP(‘2010-12-15 11:10:17’, ‘YYYY-MM-DD HH:MI:SS’)
要是91或8的話,那就麻煩了!!