在Oracle的建庫過程中,通常會提示是否開啓閃回並指定閃回恢復區大小,我一般會選擇不開啓。這樣,如果需要使用閃回功能,就需要手動開啓。
1.環境準備
我們在Oracle11g上進行測試。點擊(此處)摺疊或打開
- SQL>
select * from v$version;
- BANNER
- --------------------------------------------------------------------------------
- Oracle Database 11g Enterprise Edition
Release 11.2.0.3.0
- Production
- PL/SQL Release 11.2.0.3.0
- Production
- CORE 11.2.0.3.0 Production
- TNS for Linux: Version 11.2.0.3.0
- Production
- NLSRTL Version 11.2.0.3.0
- Production
- SQL>
2.查詢閃回功能是否開啓
可以通過查詢v$database視圖的flashback_on字段來獲取閃回功能的狀態,該字段是一個布爾類型,YES表示開啓,NO表示未開啓。點擊(此處)摺疊或打開
- SQL>
- SQL> select flashback_on
from v$database;
- FLASHBACK_ON
- ------------------
- NO
- SQL>
3.開啓歸檔功能 在開啓閃回功能之前,我們必須首先開啓數據庫歸檔,否則數據庫會報錯。
點擊(此處)摺疊或打開
- SQL>
- SQL> archive log
list;
- Database log
mode No Archive Mode
- Automatic archival Disabled
- Archive destination /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
- Oldest online
log sequence 16
- Current log
sequence 20
- SQL>
- SQL>
alter
database flashback on;
- alter database flashback
on
- *
- ERROR at line 1:
- ORA-38706:
Cannot turn on FLASHBACK
DATABASE logging.
- ORA-38707:
Media recovery is
not enabled.
- SQL>
ORA-38706和ORA-38707兩個報錯提醒我們要開啓數據庫歸檔,步驟如下;
點擊(此處)摺疊或打開
- SQL>
- SQL> alter
database archive;
- alter database archive
- *
- ERROR at line 1:
- ORA-02231: missing
or invalid option
to ALTER
DATABASE
- SQL> alter
database archivelog;
- alter database archivelog
- *
- ERROR at line 1:
- ORA-01126:
database must be mounted
in this instance and
not open in
any
- instance
- SQL>
- SQL>
- SQL> shutdown
immediate
- Database closed.
- Database dismounted.
- ORACLE instance shut down.
- SQL>
- SQL>
startup mount
- ORACLE instance started.
- Total System Global Area 941600768 bytes
- Fixed Size 1348860 bytes
- Variable Size 536873732 bytes
- Database Buffers 398458880 bytes
- Redo Buffers 4919296 bytes
- Database mounted.
- SQL>
- SQL>
alter
database archivelog;
- Database altered.
- SQL>
- SQL> alter
database open;
- Database altered.
- SQL>
- SQL> archive
log
list;
- Database log
mode Archive Mode
- Automatic archival Enabled
- Archive destination /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
- Oldest online
log sequence 16
- Next log sequence
to archive 20
- Current log
sequence 20
- SQL>
- SQL>
4.開啓閃回功能
4.1設置參數
閃回功能和兩個初始化參數有關,我們先認識一下,其中,db_recovery_file_dest_size表示閃回恢復區大小,db_recovery_file_dest表示閃回恢復區路徑。點擊(此處)摺疊或打開
- SQL>
- SQL> show parameter db_recovery
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- db_recovery_file_dest string
- db_recovery_file_dest_size big integer 0
- SQL>
點擊(此處)摺疊或打開
- SQL>
- SQL> alter system
set db_recovery_file_dest=\'/home/oracle/flashback\';
- alter system set db_recovery_file_dest=\'/home/oracle/flashback\'
- *
- ERROR at line 1:
- ORA-02097:
parameter cannot be modified because specified value
is invalid
- ORA-19802:
cannot use DB_RECOVERY_FILE_DEST without DB_RECOVERY_FILE_DEST_SIZE
- SQL>
- SQL> alter system
set db_recovery_file_dest_size=2g;
- System altered.
- SQL>
- SQL> alter system
set db_recovery_file_dest=\'/home/oracle/flashback\';
- System altered.
- SQL>
- SQL> show parameter db_recovery
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- db_recovery_file_dest string /home/oracle/flashback
- db_recovery_file_dest_size big integer 2G
- SQL>
4.2開啓閃回功能
需要注意的一點是,在10G中,如果要開啓數據庫級別的閃回,需要設置相關的參數,並且使數據庫處於歸檔模式,然後再在MOUNT狀態下開啓閃回。在11G中,如果設置了相關的參數及其開啓了歸檔,那麼可以再OPEN狀態下打開閃回。這也算是Oracle 11g的一個新特性。點擊(此處)摺疊或打開
- SQL>
- SQL> select status
from v$instance;
- STATUS
- ------------
- OPEN
- SQL>
- SQL> alter
database flashback
on;
- Database altered.
- SQL>
- SQL> select flashback_on
from v$database;
- FLASHBACK_ON
- ------------------
- YES
- SQL>
5.關閉閃回功能
點擊(此處)摺疊或打開
- SQL>
- SQL>
alter database flashback
off;
- Database altered.
- SQL> select flashback_on
from v$database;
- FLASHBACK_ON
- ------------------
- NO
- SQL>
6.總結
從上面的過程來看,需要注意幾點:1.Oracle11g支持在Open狀態下開啓閃回功能,這一點和Oracle 10g等較早版本不一樣,算是一個新特性;
2.開啓數據庫閃回的前提條件是,開啓數據庫歸檔;