閃回 找回已刪除的資料

2021-09-01 03:41:51 字數 3058 閱讀 7218

scn(系統改變號),它的英文全拼為:system change number ,它是資料庫中非常重要的乙個資料結構。

scn提供了oracle的內部時鐘機制,可被看作邏輯時鐘,這對於恢復操作是至關重要的

注釋:oracle 僅根據 scn 執行恢復。

它定義了資料庫在某個確切時刻提交的版本。在事物提交時,它被賦予乙個唯一的標示事物的scn 。一些人認為 scn 是指, system commit number ,而通常 scn 在提交時才變化,所以很多情況下,

這兩個名詞經常被交替使用。

究竟是哪個詞其實對我們來說並不是最重要的,重要的是我們知道 scn 是 oracle 內部的時鐘機制, oracle 通過 scn 來維護資料庫的一致性,並通過scn 實施 oracle 至關重要的恢復機制。

具體執行流程我們可從以下幾個示例圖中體會;

1.原表記錄 $ sqlplus eygle/eygle

sql*plus: release 10.1.0.2.0 - production on wed mar 30 08:52:04 2005

connected to:

oracle database 10g enterprise edition release 10.1.0.2.0 - 64bit production

with the partitioning, olap and data mining options

sql>select count(*) from t1;

count(*)

----------

9318

2.誤刪除所有記錄

並且提交更改。

sql>delete from t1;

9318 rows deleted.

sql>commit;

commit complete.

sql>select count(*) from t1;

count(*)

----------

03.獲得當前scn

如果能夠確切知道刪除之前scn最好,如果不知道,可以進行閃回查詢嘗試.

sql>select dbms_flashback.get_system_change_number from dual;

get_system_change_number

------------------------

10671006

sql>select count(*) from t1 as of scn 10671000;

count(*)

----------

0sql>select count(*) from t1 as of scn 10670000;

count(*)

----------

9318

我們看到在scn=10670000時,資料都在。

4.恢復資料.

sql>insert into t1 select * from t1 as of scn 10670000;

9318 rows created.

sql>commit;

commit complete.

sql>select count(*) from t1;

count(*)

----------

9318

文章2誤刪資料後的還原

[color=red]  select timestamp_to_scn(to_timestamp('2009-03-13 09:00:00','yyyy-mm-dd hh:mi:ss')) from dual;

結果:13526973

將刪除時間轉換為scn[/color]

select * from reportinfo

as of scn 13526973

將reportinfo表中的scn點的資料取出

然後可以根據這個資料進行還原操作

create table reporttest as select * from reportinfo where 1=0;

insert into reporttest select * from reportinfo as of scn 13526973;

--上面兩句應該可以合成一句

--create table reporttest as select * from reportinfo as of scn 13526973;

這是reporttest表中就是scn點的reportinfo資料.處理即可

例子:select dbms_flashback.get_system_change_number from dual;

select count(*) from u_auth_role_user_change as of scn 4362294; --1155

select count(*) from u_auth_role_user_change as of scn 4100026 ; -1161

insert into u_auth_role_user_change select * from u_auth_role_user_change as of scn 4100026;

[color=red]注:推薦使用scn,由於oracle9i中,因為scn與時間點的同步需要5分鐘,如果最近5分鐘之內的資料需要falshback query查詢,可能會查詢丟失,而scn則不存在這個問題。oracle10g中這個問題已修正(scn與時間點的大致關係,可以通過logmnr分析歸檔日誌獲得)。

falshback query查詢的侷限:

1. 不能falshback到5天以前的資料。

2. 閃回查詢無法恢復到表結構改變之前,因為閃回查詢使用的是當前的資料字典。

3. 受到undo_retention引數的影響,對於undo_retention之前的資料,flashback不保證能flashback成功。

4. 對drop,truncate等不記錄回滾的操作,不能恢復。

5. 普通使用者使用dbms_flashback包,必須通過管理員授權。命令如下:

sql>grant execute on dbms_flashback to scott;

[/color]

oracle利用閃回找回誤刪除的表資料集

當我們在開發的過程,經常碰到由於不小心誤刪除表裡重要的資料,這時候你不需要著急,從oracle9i開始引用了閃回的概念,通過網上找資料,大概有兩種方法,一種方法是通過scn 找回,另外一種是可以通過時間來找回,僅獻給那些和我一樣在開發一線的朋友,希望對你們有所幫助 具體的語法如下 方法一 通過scn...

如何找回已刪除檔案

相信大家在使用電腦的過程中,都有過一不小心或者不經意間把重要檔案刪除了的情況,關於救回已刪除檔案,你們都做過哪些努力呢?我們第一就是要到資源 筒救回已刪除檔案是否存在,如果檔案在資源 筒,您只需右擊它一鍵還原即可。如果不在,您還能找回刪除檔案嗎?其實,從電腦中永久刪除不在資源 筒中的檔案,它的內容不...

如何找回已刪除的檔案

在電腦中翻箱倒櫃的查詢了半天,所有的對於電腦檢索資料有用的方式我都試過了,但是很遺憾,老天還是沒有眷顧我,丟失的程式就是不見了,而且不見的很徹底,似乎還真的就沒有在電腦中存在過一樣,我也試著找了一下原因,但是網上的說法很多,但是情況又貌似都和我的差不多,至於該信誰,我自己也沒有了注意,算了,現在找原...