專題實驗 oracle 閃回特性

2021-06-23 07:05:00 字數 1896 閱讀 8807

在 oracle 9i 之前的版本中, 如果使用者因為誤操作 delete 或 update 並提交了, 那麼恢復這些使用者的操作錯誤是極其低效的.

為此, oracle 提供了閃回功能, 通過回退, 我們可以找回正確的資料.

通過閃回查詢我們可以按照時間戳或scn來向前查詢, 獲取修改之前的資料映象, 再通過insert等操作就可以恢復資料.

閃回查詢一來於回滾段中儲存的資料前映象, 在oracle9i以前的版本中, 通常只要事務提交後, 前映象資料就可以被覆蓋, 空間可以重用; 在oracle 9i中oracle引入了自動回滾管理(automatic undo management, 簡稱aum) 新特性, 在aum模式下, 我們可以通過調整 undo_retention引數來設定資料庫undo資訊的保留時間, 只要映象沒有被覆蓋, 那麼閃回就是可能的, 但是需要注意的是, undo資訊的保留還同 undo表空間中的可用空間有關, 如果空間緊張, 為了滿足事務的需要, 非活動的前映象資訊是可以被覆蓋的.

通過 as of 語法, 可以對錶, 檢視, 物化檢視進行 flashback query(閃回查詢), 可以指定 scn 或者 timestamp.

select systimestamp from dual;

select count( * ) from t as of timestamp( systimestamp – interval』10』second);  -- 通過 timestamp

select dbms_flashback.get_system_change_number scn from dual;  -- 獲得 scn 18995692584

select count( * ) from t as of scn 18995692584;

某日下午接到研發工程師**, 報告說誤刪除了部分重要資料, 並且已經提交, 需要恢復.

登陸資料庫, 首先確認scn的變化, 可以通過 v$archive_log 檢視查詢: select name, first_change# fscn.next_change# nscn.first_time from v$archive_log;

當前 scn : select dbms_flashback.get_system.change_number fscn from dual;

使用應用使用者嘗試閃回: connect username/password

現有資料: select count( * ) from hs_passport;

建立恢復表: create table hs_password_recov as select * from hs_passport where 1 = 0;

選擇適當的scn 進行閃回查詢: select count( * ) from hs_passport as of scn 12929970422;  -- 可以嘗試多個scn, 獲得最佳值(如果能知道具體操作時間, 那麼可以獲得準確的資料閃回 )

select count( * ) from hs_passport as of scn &scn;  -- 這裡使用繫結變數, 每次嘗試乙個scn, 檢視最佳值

最後選擇 scn 為 12929941968 的時間點:

insert into hs_passport_recov select * from hs_passport as of scn 12929941968 ;  commit ;

找到研發人員確認, 已經滿足要求, 找回了誤刪資料.

資料庫級別閃回: 能夠將整個資料庫恢復到過去時間點 ( 個人感覺用處不大 )

表級閃回: 增加了對 drop 掉表的資料閃回 flashback table to before drop [rename to new_table_name];

行級閃回: 閃回查詢可以將表中的記錄恢復到過去的時間點

事務閃回: 通過事務級閃回, 可以按照事務將資料庫變更閃回.

Oracle閃回特性

閃回的基本概念 在oracle的操作工程中,會不可避免地出現操作失誤或者使用者失誤,例如不小心刪除了乙個表等,這些失誤和錯誤可能會造成重要資料的丟失,最終導致oracle資料庫停止。在傳統意義上,當發生資料丟失 資料錯誤問題時,解決的主要辦法是資料的匯入匯出 備份恢復技術,這些方法都需要在發生錯誤前...

oracle 10g的閃回特性

1.先介紹兩個表 select from tab 檢視有那些表 select from ind 檢視有那些索引 2.試驗指令碼 create table abc id int create index abc on abc id commit insert into abc values 1 ins...

oracle 資料閃回

select from scott.dept insert into scott.dept values 50,錯誤資料 china select from scott.dept as of timestamp to timestamp 2011 12 09 10 00 00 yyyy mm dd ...