Oracle9iR2的簡單Flashback

oracle_ace發表於2007-12-18

這裡只羅列出利用Oracle9iR2的flashback功能來恢復一下某表中的資料的步驟,其實很簡單。

首先如果資料庫在歸檔模式下,我們可以通過查詢v$archived_log檢視來檢視各個歸檔日誌所屬的檢查點:
select name,first_change#,next_change#,first_time from v$archived_log;

通過包dbms_flashback.get_system_change_number來獲得資料庫的SCN號,當然如果你的資料庫是10g的話,還可以檢視v$database中的欄位current_scn.
select dbms_flashback.get_system_change_number from dual;

select count(*) from student 看看我們的表中的資料有多少。

create table student_recovery
as
select * from student where 1=0
來建立恢復表的結構。

開始我們的閃回查詢:
選擇一個前面的SCN進行向前恢復
select count(*) from student  as of scn 3154835

嘗試多個scn來獲得我們所期望的結構

最後通過:insert into student_recovery select * from student as of scn 3154835
                
commit;

來恢復我們表中的資料。

最後還有一點需要我們注意的是什麼呢?
對了就是smon_scn_time這個表,這個表記錄了Oracle資料庫的系統表,用以進行輔助的恢復等功能。這個表在9iR2的時候是每5分鐘重新整理一次,而且smon_scn_time會記錄5天的資料,也就是1440行記錄,因此在Oracle9iR2中,表屬性修改時間和flashback時間差至少應為5分鐘,否則會報ora-01466的錯誤。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12361284/viewspace-813/,如需轉載,請註明出處,否則將追究法律責任。

相關文章