在oracle10g以後出現的閃回特性,可以讓我們在一些情況下方便的找回我們錯誤刪除的資料。
1.undo_retention引數預設900秒,很多時候我們需要調整這個引數如
alter system set undo_retention=18000 sid='*'
需要注意的是如果rac環境中,這樣寫會造成其他的節點掛起,需要使用下面的辦法
alter system set undo_retention=18000 sid='racdb1';
alter system set undo_retention=18000 sid='racdb2';
調大這個引數會增加undo表空間的擴充套件,大家需要注意
2.演示找回錯誤刪除的記錄(注意,資料庫必須處於歸檔模式下,非歸檔不能使用)
--1.建立測試使用者
--2.建立測試表
conn usr1/usr1
create table test (id int,name char(10));
--3.建立測試資料
insert into test(1,'test1');
insert into test(2,'test2');
commit; ---提交寫入redo log file
conn sys/oracle
alter system switch logfile; --手工切換日誌,寫入歸檔日誌,實際中如果得到條件會自動觸發
模式刪除操作,usr1使用者的
delete from test where id=1;
--這裡需要手工觸發歸檔,實際中不需要,因為其他操作可能觸發
conn sys/oracle
alter system switch logfile;
進行恢復操作
--1.首先查詢歸檔日誌的scn號
select name,first_change#,first_time from v$archived_log order by 3 desc
/opt/oracle/oradata/orcl/archive1/orcl_1_7_810405035.dbf 1733071 2013-3-20 16:16:21
/opt/oracle/oradata/orcl/archive1/orcl_1_6_810405035.dbf 1731283 2013-3-20 15:52:51
/opt/oracle/oradata/orcl/archive1/orcl_1_5_810405035.dbf 1731279 2013-3-20 15:52:47
--2.查詢當前的scn號
select dbms_flashback.get_system_change_number from dual; --1734414
--3.嘗試使用閃回查詢
select * from test as of scn 1733071;看看是否存在刪除的資料
select * from test as of scn &scn;輸入不同的scn號來檢查資料
發現1733071 時有資料,建立臨時恢復資料表進行操作
create table test_recov as select * from test as of scn 1733071;
其實drop table也可以找回資料的,但是我還沒有試驗成功,後續會補充上。
除了上面使用閃回的方式直接找到資料外,另外還有一種辦法就是使用不完全恢復,但是這種方式需要有乙個測試機器,把資料恢復到測試機器上然後進行資料操作。
具體方式就是使用logminer來獲取scn號。原理是通過logmnr來獲取歸檔日誌中的資訊,這裡可以獲取完整的資訊,包括當時使用的語句,操作人資訊等,而這些資訊是使用v$archived_log所不能直接獲取到的,後面我會專門介紹logminer的使用。
誤刪除表記錄,閃回恢復
今天有個同事突然來找我,說他忘記注釋乙個表,刪除了4000多條記錄。把他給嚇的,說句實話當時我也嚇了一跳,不過想到庫是開著閃回的,而且是剛刪除,所以還有救。下面是我的操作過程 1 檢視當前表的記錄條數 select count from u.t 返回結果為449 2 查詢刪除前的記錄條數 selec...
oracle利用閃回找回誤刪除的表資料集
當我們在開發的過程,經常碰到由於不小心誤刪除表裡重要的資料,這時候你不需要著急,從oracle9i開始引用了閃回的概念,通過網上找資料,大概有兩種方法,一種方法是通過scn 找回,另外一種是可以通過時間來找回,僅獻給那些和我一樣在開發一線的朋友,希望對你們有所幫助 具體的語法如下 方法一 通過scn...
mysql 刪除回滾 Mysql資料誤刪除快速回滾
作者 video 極鏈科技opsteam 整理 包包 在資料庫操作中,難免會因為各種各樣的原因對資料造成損壞,這個時候就需要對資料庫快速恢復。傳統的方法會先恢復mysql備份,再去用mysqlbinlog抽取指定時間點的日誌,再恢復,這樣的操作比較耗時,容易出錯,那有沒有一種工具可以快速把誤刪除的操...