Oracle用delete命令刪除資料恢復

2021-06-18 00:07:13 字數 2268 閱讀 2719

同事找回時操作的資料庫為oracle 10g , 之前刪除方式為delete 不曉得trancate好使不

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誤刪資料後的還原

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

結果:13526973

將刪除時間轉換為scn

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資料.處理即可

oracle用delete命令刪除資料恢復

剛不小心刪除了表裡的資料,還好找到了這個。sql select count from t1 count 9318 2.誤刪除所有記錄 並且提交更改。sql delete from t1 9318 rows deleted.sql commit commit complete.sql select c...

Oracle中DELETE和TRUNCATE的區別

語法 delete from aa truncate table aa 區別 1.delete from後面可以寫條件,truncate不可以。2.delete from記錄是一條條刪的,所刪除的每行記錄都會進日誌,而truncate一次性刪掉整個頁,因此日至裡面只記錄頁釋放,簡言之,delete ...

oracle執行delete,資料恢復

經常不小心執行delete刪除語句,如何恢復資料,表查詢閃回機制 所有操作必須以sys使用者身份 select from sys.smon scn time t order by t.time dp desc scn 與時間的對應關係 每隔5分鐘,系統產生一次系統時間標記與scn的匹配並存入sys....