ORACLE—DELETE表後的恢復
ORACLE—DELETE表後的恢復
ORACLE—DELETE表後的恢復
(一)連線到資料庫:C:\Documents and Settings\Administrator>sqlplus system/sa@ot
SQL*Plus: Release 9.0.1.0.1 - Production on Wed May 13 19:13:53 2009
(c) Copyright 2001 Oracle Corporation. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
(二)建立表
SQL> create table t (id int );
Table created.
SQL>
(三)插入10000條資料
SQL> declare
2 i int :=1;
3 begin
4 for i in 1..10000 loop
5 insert into t values(i);
6 end loop;
7 end ;
8 /
PL/SQL procedure successfully completed.
SQL> select count(*) from t;
COUNT(*)
----------
10000
SQL> commit;
Commit complete.
SQL>
(四)誤刪除所有記錄,並且提交更改。
SQL> select count(*) from t;
COUNT(*)
----------
10000
SQL> delete from t;
10000 rows deleted.
SQL> select count(*) from t;
COUNT(*)
----------
0
SQL> rollback;
Rollback complete.
SQL> select count(*) from t;
COUNT(*)
----------
10000
SQL> delete from t;
10000 rows deleted.
SQL> commit;
Commit complete.
SQL> select count(*) from t;
COUNT(*)
----------
0
SQL> rollback;
Rollback complete.
SQL> select count(*) from t;
COUNT(*)
----------
0
SQL>
(四)獲得當前SCN(Oracle 僅根據 SCN 執行恢復,它定義了資料庫在某個確切時刻提交的版本。在事務提交時,它被賦予一個唯一的標示事物的SCN )獲得當前SCN的目的是:可以進行閃回查詢嘗試.
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
961371
SQL> select count(*) from t as of scn 9611370;
COUNT(*)
----------
0
(五)確定delete 時候的scn號
[1]建立一個臨時表用於儲存在scn為多少的時候執行了delete
create table temp(count int ,scn int);
[2]往臨時表中加入資料
declare
i int :=961000;
begin
for i in 961000..961371 loop
insert into temp (scn) values (i);
update temp set count=(select count(*) from t as of scn i) where scn=i;
end loop;
end ;
/
[3]查詢scn為多少的時候執行了delete
SQL> select * from temp where count >0;
COUNT SCN
---------- ----------
10000 961147
10000 961148
10000 961149
10000 961150
10000 961151
10000 961152
10000 961153
10000 961154
10000 961155
10000 961156
10000 961157
10000 961158
10000 961159
10000 961160
10000 961161
10000 961162
SQL> select count(*) from t as of scn 961162;
COUNT(*)
----------
10000
SQL> select count(*) from t as of scn 961163;
COUNT(*)
----------
0
我們看到在SCN=961162時資料都在。即scn為961163就是我們DELETE的事務號。
(六)恢復資料
SQL> insert into t select * from t as of scn 961162;
10000 rows created.
SQL> select count(*) from t;
COUNT(*)
----------
10000
SQL>
(七)清理temp表。
SQL> drop table temp;
Table dropped.
SQL> commit;
Commit complete.
SQL> select count(*) from t;
COUNT(*)
----------
10000
(八)總結
DELETE的事務號也可以用logminer來方便的獲得。系列實驗待續……
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/235507/viewspace-598157/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle之DELETE後的恢復Oracledelete
- Oracle Delete表恢復(ODU)Oracledelete
- oracle恢復表delete/truncate/drop的方法總結Oracledelete
- 恢復update,delete表資料錯誤的語句delete
- 【ASK_ORACLE】Oracle表決磁碟丟失後的恢復方法Oracle
- Oracle delete誤運算元據恢復(BBED)Oracledelete
- RMAN恢復單個表空間或被DROP/DELETE/TRUNCATE的表delete
- Oracle Truncate表恢復(ODU)Oracle
- 恢復Oracle表空間的方法Oracle
- 恢復oracle中drop掉的表Oracle
- Oracle閃回查詢恢復delete刪除資料Oracledelete
- oracle實驗記錄 (恢復-rman操作delete(all) input )Oracledelete
- Oracle中truncate table後的資料恢復(Oracle資料恢復工具-ODU)Oracle資料恢復
- RAC 恢復(備份後建立的表空間(leviton)恢復後會自動重建)
- Oracle RMAN 表空間恢復Oracle
- oracle12c表恢復Oracle
- Oracle Drop表(purge)恢復(ODU)Oracle
- truncate表後恢復方法總結
- Oracle恢復誤操作刪除掉的表Oracle
- Oracle RMAN 表空間的完全恢復Oracle
- Oracle 表級的快速恢復(實習)Oracle
- Oracle 11g RMAN恢復-只讀表空間的恢復Oracle
- Mysql資料庫delete刪除後資料恢復報告MySql資料庫delete資料恢復
- oracle8i誤刪除臨時表空間後的恢復Oracle
- Shift + Delete刪除的檔案如何恢復?delete
- WINDOWS下重灌系統後oracle的恢復WindowsOracle
- oracle redo 日誌刪除後的恢復Oracle Redo
- 【Oracle 恢復表空間】 實驗Oracle
- 【北亞資料恢復】誤操作導致雲伺服器表被truncate,表內資料被delete的資料恢復資料恢復伺服器delete
- Oracle資料庫UNDO損壞後的恢復Oracle資料庫
- oracle_redo*log,被移動後的恢復Oracle
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- 使用ODU恢復oracle被truncate的表資料Oracle
- oracle12c新特性(8)--RMAN中的表恢復和分割槽恢復Oracle
- 伺服器資料恢復—雲伺服器mysql資料庫表資料被delete的資料恢復案例伺服器資料恢復MySql資料庫delete
- db2 恢復drop後的表的一個操作DB2
- oracle用備份的控制檔案恢復後不用resetlogs開啟方式的恢復Oracle
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle