Oracle 11g學習筆記–查詢閃回
如果錯誤的提交了修改操作,並想查看被修改行原來的值,可以使用查詢閃回。然後如果需要,就可以使用查詢閃回的結果將這些行手工改回原來的值;
另外,查詢閃回可根據一個時間值或系統變更號(scn)進行;數據庫使用scn來跟蹤對數據進行的修改,因此可以使用它來回閃到數據庫中一個特定的scn時的狀態;
使用場景:
你可能在某一時間點對某一個表執行了操作,此時如果你想回去查看執行操作之前的數據,你便可以使用閃回操作;
首先,授權,然後指定要閃回的時間點,然後就可以開始查詢數據,此時查詢的數據都是你在那個時間點以前操作的數據,時間點以後的更新並不會顯示;(注意,在這個時間段,只能進行查詢操作。)
使用結束後,便可禁用閃回操作,在操作數據庫,就是對最新的數據操作了;
1.使用閃回的特權
--以sys身份連接到數據庫
connect sys/change_on_install as sysdba
--將對dbms_flashback包的execute權限授予給user_name用戶;
grant execute on sys.dbms_flashback to user_name;
2.時間閃回查詢
●閃回到十分鐘之前
execute dbms_flashback_at_time(sysdate - 10 / 1440);
注意:此處的日期是以天爲單位的,而一天有1440分鐘,所以會有如上寫法;
●禁用閃回操作
execute dbms_flashback.disable();
3.系統變更號查詢閃回
因爲數據庫是根據scn來跟蹤對數據所做的變化的,要獲取當前的scn,可以執行dbms_flashback.get_system_change_number();
●查詢當前變更號
--定義變量
variable current_scn number
--查詢scn並賦值給變量
execute: current_scn := dbms_flashback.get_system_change_number();
--輸出變量
print current_scn;
●閃回到一個scn的狀態
execute dbms_flashback.enable_at_system_change_number(:current_scn);