Flashback是以undo segment中的內容爲基礎的,所以受限於undo_retenton參數,要使用flashback的特徵,必須啓動自動撤銷表空間。數據庫
在oracle11g中,出現了一個新的特徵,oracle flashback data archive(FDA),經過將變化的數據另外存儲到建立的一個閃迴歸檔去(flashback archive),以和undo區別開,這樣能夠單獨設置存儲策略,使其能夠山回到指定時間以前的舊數據而不影響undo策略。 在Oracle 11g中,recyclebin參數發生了微小的變化.session
This supported parameter was introduced in Oracle 10.2.0oracle
Versionspa |
Parameter Name日誌 |
Data Typeorm |
Session Modifiable對象 |
System Modifiable文檔 |
10.2.0get |
recyclebin同步 |
String |
TRUE |
IMMEDIATE |
11.1.0 |
recyclebin |
String |
TRUE |
DEFERRED |
從文檔上咱們能夠看到這個變化說明,到了11g中,這個參數在session依然能夠當即修改並影響當前的session,但若是是在系統一級修改的話,那麼就要加deferred參數,對當前已經鏈接的sesion沒有影響,但新鏈接的session將受到影響
Flashback不支持sys用戶,system表空間下面的對象,也不能從回收站裏拿到。故使用sys或是system用戶登陸時,show recyclebin爲空。
啓動閃回數據庫的步驟:
1, 開啓歸檔模式:alter database archivelog;
2, 配置閃回區:alter system set db_recovery_file_dest=’/../’
3, 配置閃回保留時間,默認是1440minutes:alter system set db_flashback_retention_target=’2880’;
4, 啓動閃回數據庫:shutdown immediate;startup mount
Alter database flashback on/off;
5, 執行閃回操做:shutdown immediate;startup mount;
Flashback database to timestamp to_date(‘2001-02-03’,’yyyy-mm-dd hh24:mi:ss’);
或是:flashback database to scn 2323534;
Alter database open ready only;檢查閃回時刻是不是所需的數據,若是不是,能夠繼續修改。
檢查完畢以後:shutdown immediate;startup mount; alter database open resetlogs;resetlogs是將control file中的scn#與數據文件中的scn#同步,消除時間間隔。
V$flashback_database_log視圖,能夠查看閃回日誌所佔的空間,最先能閃回到的scn,最先能閃回到的時間點
7,查看回收站:show recyclebin; 或是select * from sys.recyclebin$查 全部的回收站。
8,恢復被刪除的表:flashback table t_name to before drop;若是閃回
的表名與當前的表名相同,須要重命名才能夠閃回
Flashback table t_name to before drop rename to t_new;
9,閃回指定的表
查看錶結構:desc 「BIN$qrjyuHuVotHgQAB/AQAQ3w==$0」;
查看錶的記錄:select count(*) from 「BIN$qrjyuHuVotHgQAB/AQAQ3w==$0」;
安裝表名稱恢復:flashback table 「BIN$qrjyuHuVotHgQAB/AQAQ3w==$0」 to before drop;
越過回收站直接刪除:drop table t purge;drop user cascade; drop tablespace users including contents;
清空回收站:purge index idx_1; purge user_recyclebin; purge dba_recyclebin;
當設置db_recovery_file_dest爲空的時候,也能夠取消閃回區,若是已經啓用flashback database;則這個方法不能取消。
查看當前的scn:select current_scn from v$database;
查看哪些對象能夠利用閃回恢復區來存放:
SQL> select file_type from v$flash_recovery_area_usage;
FILE_TYPE
--------------------
CONTROL FILE
REDO LOG
ARCHIVED LOG
BACKUP PIECE
IMAGE COPY
FLASHBACK LOG
FOREIGN ARCHIVED LOG
7 rows selected.
查看閃回恢復區空間的使用狀況:
SQL> select * from v$flash_recovery_area_usage;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE
-------------------- ------------------ -------------------------
NUMBER_OF_FILES
---------------
CONTROL FILE 0 0
0
REDO LOG 0 0
0
ARCHIVED LOG 0 0
0
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE
-------------------- ------------------ -------------------------
NUMBER_OF_FILES
---------------
BACKUP PIECE 0 0
0
IMAGE COPY 0 0
0
FLASHBACK LOG 0 0
0
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE
-------------------- ------------------ -------------------------
NUMBER_OF_FILES
---------------
FOREIGN ARCHIVED LOG 0 0
0
7 rows selected.
計算flash recovery area已經佔用的空間:
SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
SUM(PERCENT_SPACE_USED)*3/100
-----------------------------
0
若是flash recovery area空間不足致使db不能打開或是hang住的處理方法
Alter system set db_recovery_file_dest_size=3G scope=spfiel;