閃回技術可以不需要使用備份文件,依賴於回滾段中的數據前鏡像,恢復一定時間內的數據。過久之前的數據,只能通過備份文件恢復了。
查看是否開啟閃回:
SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES
一、閃回分類
前四種閃回技術,依賴於undo表空間,可閃回的極限時間由undo_retention
決定;
閃回數據庫技術,可閃回的極限時間由db_flashback_retention_target
所決定。
SQL> show parameter undo_retention; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 900 (單位是秒) SQL> show parameter db_flashback_retention_target; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_flashback_retention_target integer 1440 (單位是分鍾)
二、閃回查詢
select * from scott.stu as of timestamp to_date('20211111 17:05:39','yyyymmdd hh24:mi:ss');
三、閃回版本查詢
select versions_starttime,versions_endtime,versions_xid,versions_operation,sno,sname,sage from scott.stu versions between timestamp minvalue and maxvalue; -- versions_starttime,versions_endtime,versions_xid,versions_operation -- 這些都是偽列:分別是事務的開始時間、結束時間、SCN號、ID號等
可以進行基於閃回版本查詢的恢復——閃回事務查詢;
就是從flashback_transaction_query
中查詢引起數據變化的事務,和撤銷事務的SQL;查詢出的結果中的undo sql可以提取出來執行恢復;
select OPERATION,UNDO_SQL from flashback_transaction_query where table_owner='SCOTT' and table_name='STU'; -- 如果查詢結果中undo sql沒有值,執行命令:alter database add supplemental log data;
四、閃回表(自動回退)
特點:在線操作,自動恢復相關的屬性,包括索引、觸發器等。
前提:啟動行遷移
注意:sys的表不能閃回。
1. 啟動行遷移: alter table scott.stu enable row movement; 2. flashback table scott.stu to timestamp to_date('20211018 10:44:39','yyyymmdd hh24:mi:ss');
五、閃回刪除
從回收站里撈回來
SQL> drop table stu; Table dropped SQL> select * from stu; ORA-00942: table or view does not exist SQL> flashback table stu to before drop; Done SQL> select * from stu; SNO SNAME SAGE ----------------------------------------------------- 1 TOM 21 2 LILY 22 3 BOB 23
六、閃回數據庫
-
配置數據庫為歸檔模式:alter database archivelog;
-
配置閃回恢復區:show parameter db_recovery_file_dest;
-
配置閃回保留時間:show parameter db_flashback_retention_target;
-
啟用數據庫閃回:alter database flashback on;
-
進行閃回數據庫:flashback database to timestamp;