Oracle閃回表資料(精確到被刪除的每一行)

2021-10-10 15:43:37 字數 2365 閱讀 9793

思路:

1.刪除表資料並提交

2.跟據被刪除時間點找到被刪除資料

3.將需要恢復資料的表結構複製出來存放刪除之前的資料

4.將刪除時間之前全部資料放到新錶

5.對新舊兩個表不同資料進行比較將差異資料插入到新錶

6.找到差異資料後插入原表

create

table test_1(id number(10)

, name varchar2(10)

, date_1 date

);

插入測試資料:

insert

into test_1 values(1

,'wang'

,sysdate)

;insert

into test_1 values(2

,'wang'

,sysdate)

;insert

into test_1 values(3

,'wang'

,sysdate)

;insert

into test_1 values(4

,'wang'

,sysdate)

;

delete

from test_1 where id=1;

--執行結果將刪除下圖兩條資料

commit

;

記錄刪除時間點為2020-11-14 15:54:49

select sysdate from dual;

--查詢當前時間,並記錄此時間之前大約1分中時間執行的delete操作。

);

從下圖可以看到根據時間點2020-11-14 15:53:00查詢到被刪除的兩條資料需要恢復。

--格式:create table 使用者名稱.表名 as select * from 使用者名稱.表名 where 1=2 

create

table scott.test_11 as

select

*from scott.test_1 where1=

2;

insert

into test_11 (

select

*from test_1 as

oftimestamp to_timestamp(

'2020-11-14 15:53:00'

,'yyyy-mm-dd hh24:mi:ss'))

;

查詢表test_11插入結果:

--只查詢比較結果  

select id,name,date_1 from test_11 minus select id,name,date_1 from test_1;

--將比較結果插入新錶test_111

insert

into test_111 (

select id,name,date_1 from test_11 minus select id,name,date_1 from test_1)

;

查詢表test_111,是否有差異資料插入

1.這種方法明顯違反了閃回的特點,但能較好的理解思路,在此基礎上可以將繁瑣的步驟利用儲存過程等方法進行簡化。

2.除此之外還有通過時間點,scn等多種方法直接在原表恢復。

3.資料恢復時需要開啟表移動功能哦,alter table table_name enable row movement

oracle 資料閃回

select from scott.dept insert into scott.dept values 50,錯誤資料 china select from scott.dept as of timestamp to timestamp 2011 12 09 10 00 00 yyyy mm dd ...

oracle閃回表詳解

說明閃回資料庫 使用閃回表將表內容還原到過去的特定時間點 從刪除表中進行恢復 使用閃回查詢檢視截止到任一時間點的資料庫內容 使用閃回版本查詢檢視某一行在一段時間內的各個版本 使用閃回事務查詢檢視事務處理歷史記錄或行 優點 閃回技術由於只能處理更改資料,所以從根本上改變了恢復技術。使用這個技術時,從錯...

恢復oracle資料 回閃

1.刪除表後,可以採用如下操作 在 user recyclebin中找到最近操作過的表名稱,然後用閃回 只能用於10g及以上版本 flash back table table name to before drop 如果是刪了或修改裡面的資料,可以先建立乙個快表將刪除修改之前狀態的資料找回到這個表中...