Oracle閃回
Oracle閃回作用:自動基於磁盤的備份與恢復,能把表恢復到過去的某個時間點或者SCN。
1.查看閃回區
SQL> show parameter db_recovery_file_dest; 查看閃回區詳細信息
SQL> select flashback_on from v$database; 查看閃回區是否開啟
2.修改閃回功能
SQL> startup mount; 數據庫啟動到mount下
SQL> alterdatabase flashback on (off); 開啟關閉閃回區
註:如遇到38706事件錯誤,可能是因為歸檔不正確。先啟用歸檔.
SQL> alter database archivelog;
SQL> alter systemset db_flashback_retention_target=2880;
修改閃回時間,默認是1440分鐘(1天),閃回時間是指數據庫能回退的時間。
3.閃回使用實例:(註:sys用戶下不可用閃回)
3.1 閃回drop的表
在非sys用戶下創建表和表上索引,插入相關數據
create table abc (fnumber(9));
create index idx_teston abc(f);
insert into abc values(1);
insert into abc values(2);
insert into abc values(3);
3.2 刪除表
drop table abc;
3.3 刪除表之後,表並沒有被真正刪除,而是重命名之後放在同一用戶下的回收站內,同時表上的索引等也會被如此處理。回收站滿後以先進先出的原則管理。
查看表語句 select* from tab;
查看索引語句 select index_name, index_type, table_name from ind;
查看回收站語句 show recyclebin
清空回收站語句 PURGE RECYCLEBIN;
註:沒有放入回收站的表不能被閃回
3.4 閃回之後,即可再次看到表,但是表閃回後相應的索引等需要重新編譯。
flashback table abc to before drop;
3.5 閃回DML語句
Flashback table abc to timestamp to_timestamp(‘2014-02-14 16:00:00’,’yyyy-mm-dd hh24:mi:ss’)
閃回可能會遇到08189錯誤,執行下列語句
alter table test varchar enable row movement;
意思是允許Oracle修改rowid。Oracle插入數據時會為該條數據分配唯一rowid並且不變,要啟用閃回功能必須開啟可修改rowid功能
閃回DML數據是使用回滾段進行恢復
附:查詢所有可以撤消的操作,該操作依賴於undo_retention
SELECT versions_xidas xid,
versions_startscn,
versions_endscn,
versions_operation
FROM scott.abcVERSIONS between scn minvalue and maxvalue
查詢undo_retention參數
該參數保存了回滾段數據保存的秒時間,超過該時間則無法閃回。默認為15分鐘
修改該參數 alter system set undo_retention=3600;
本文出自 “花之旭's Blog” 博客,謝絕轉載!
Oracle閃回