Oracle delete資料後恢復辦法示例

2022-04-09 08:43:37 字數 3057 閱讀 7011

oracle delete資料後恢復辦法示例

1       建立表

sql>create table wdongh(

www.2cto.com  

2  id  integer,

3  name  varchar2(60)

4  );

2       插入資料

sql>insert into wdongh values(1,'wdh');

1 rowinserted

sql>insert into wdongh values(2,'xiaoming');

1 rowinserted

sql>insert into wdongh values(3,'hanmei');

www.2cto.com  

1 rowinserted

sql>insert into wdongh values(4,'leilei');

1 rowinserted

sql>select * from wdongh;

id               name

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

1               wdh

2               xiaoming

3               hanmei

4               leilei

3       刪除資料

sql>delete from wdongh;

4 rowsdeleted

sql>commit;

commitcomplete

sql>select * from wdongh;

id               name

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

4       獲得當前scn

oracle 僅根據 scn 執行恢復,它定義了資料庫在某個確切時刻提交的版本。在事務提交時,它被賦予乙個唯一的標示事物的scn 。獲得當前scn的目的是:可以進行閃回查詢嘗試.

sql>select dbms_flashback.get_system_change_number from dual;

get_system_change_number

www.2cto.com  

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

668754  

sql>select count(*) from wdongh as of scn 668754;

count(*)

----------

05       確定delete時的scn號

5.1   建立乙個臨時表用於儲存在scn為多少的時候執行了delete

sql>create table temp(count int,scn int);

tablecreated

5.2   往臨時表中加入資料

sql>declare

2  iint :=668700;

3 begin

4  fori in 668700..668754 loop

5   insert into temp (scn) values (i);

6   update  temp set count=(selectcount(*) from wdongh as of scn i) where scn=i;

7  endloop;

8  end;

9  /

pl/sqlprocedure successfully completed

www.2cto.com  

sql>commit;

commitcomplete

5.3   查詢scn為多少時執行了delete

sql>select  * from temp where count >0;

count                                     scn

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

4                                  668700

4                                  668701

4                                  668702

4                                  668703

4                                  668704

4                                  668705

4                                  668706

4                                  668707  

8 rowsselected

sql>select count(*) from wdongh as of scn 668707;

count(*)

----------

4sql>select count(*) from wdongh as of scn 668708;

www.2cto.com  

count(*)

----------

0我們看到在scn為668707時資料還在,即scn為668708就是我們delete的事務號。

6       恢復資料

sql>insert into wdongh select * from wdongh as of scn 668707;

4 rowsinserted

sql>select count(*) from wdongh;

count(*)

----------

47       乾掉臨時表temp

sql>drop table temp;

www.2cto.com  

tabledropped

sql>commit;

commitcomplete  

作者 wdh226

Oracle Delete分批提交

1 oracle delete操作會產生redo log,undo log,即使delete 語句中加上nologging 引數,還是會記錄日誌的,這樣保證了資料安全性,利於rollback。為了不使undo表空間被撐爆,可能需要分批提交,以下是分批提交語句 declare cnt number 1...

oracle delete 高水位線處理問題

最近遇到oracle 表中資料量很大查詢和更新比較慢 需要刪除,發現刪除後查詢速度還是很慢,原來是delete oracle 高水位沒有下降的原因。在oracle裡,使用delete刪除資料以後,資料庫的儲存容量不會減少,而且使用delete刪除某個表的資料以後,查詢這張表的速度和刪除之前一樣,不會...

oracle資料誤刪後恢復

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...