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誤運算元據恢復(BBED)Oracledelete
- 【ASK_ORACLE】Oracle表決磁碟丟失後的恢復方法Oracle
- Oracle RMAN 表空間恢復Oracle
- 【Oracle 恢復表空間】 實驗Oracle
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- Shift + Delete刪除的檔案如何恢復?delete
- Mysql資料庫delete刪除後資料恢復報告MySql資料庫delete資料恢復
- 【北亞資料恢復】誤操作導致雲伺服器表被truncate,表內資料被delete的資料恢復資料恢復伺服器delete
- Oracle 12C新特性-RMAN恢復表Oracle
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- 談談WINDOWS下重灌系統後oracle的恢復WindowsOracle
- NBU恢復oracleOracle
- 伺服器資料恢復—雲伺服器mysql資料庫表資料被delete的資料恢復案例伺服器資料恢復MySql資料庫delete
- 28_bbed實戰(1)_delete操作恢復delete
- Oracle案例12——NBU Oracle恢復Oracle
- oracle冷備恢復Oracle
- oracle 異機恢復Oracle
- win10 shift delete刪除的檔案如何恢復Win10delete
- NBU恢復Oracle通道完成後RMAN沒有進度Oracle
- 【北亞資料庫資料恢復】使用delete未加where子句刪除全表資料的Mysql資料庫資料恢復資料庫資料恢復deleteMySql
- 記一次 oracle 資料庫在當機後的恢復Oracle資料庫
- Oracle RMAN恢復測試Oracle
- Oracle 不完全恢復Oracle
- Oracle RushQL勒索病毒恢復方法Oracle
- Oracle 備份 與 恢復 概述Oracle
- Oracle 備份恢復之 FlashbackOracle
- Oracle恢復誤刪資料Oracle
- ORACLE備份&恢復案例(轉)Oracle
- oracle基於SCN增量恢復Oracle
- Oracle Redo丟失恢復方案Oracle
- undrop-for-innodb恢復drop的表
- uninstall 後的檔案如何恢復
- 【ASK_ORACLE】Oracle如何恢復舊的統計資訊Oracle
- 【RMAN】Oracle12c以後rman 備份恢復命令參考Oracle
- 檔案替換後怎麼恢復,恢復被覆蓋的檔案
- 【RECO_ORACLE】Oracle 12c之CDB與PDB的備份與恢復(四)PDB的幾種恢復方式Oracle
- 備份與恢復oracle_homeOracle
- oracle 增量備份恢復驗證Oracle
- Oracle 備份和恢復介紹Oracle