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