閃回與歸檔的相關測試 詳見博客:http://www.cnblogs.com/hellojesson/p/7050097.html
數據庫在歸檔模式下的管理 詳見博客:http://www.cnblogs.com/hellojesson/p/7182219.html
場景描述:
本地數據庫 當前運行在非歸檔模式 沒有開啟閃回功能!!!
我們要做的操作是將:數據庫切換在歸檔模式 ,開啟數據庫的閃回功能;
並且:自定義閃回恢復區路徑以及大小 自定義歸檔日志存放路徑。
補充一個操作說明:其實可以參照oracle默認的配置,將歸檔日志存放在閃回區的指定路徑中,這里是為了說明,歸檔是可以自己定義指定目錄存放的,因此下文中的操作,將歸檔日志放在了和閃回不同的目錄!!!
在ORACLE10g和11g版本,ORACLE默認的日志歸檔路徑為閃回恢復區($ORACLE_BASE/flash_recovery_area)。對於這個路徑,ORACLE有一個限制,就是默認只有2G的空間,而且不只是歸檔日志的默認路徑,也是備份文件和閃回日志的默認地址,
這樣的話歸檔日志所使用的空間就達不到2G,在沒有設置好這個路徑大小的情況下,很多系統都遇到過歸檔日志滿,無法歸檔而導致數據庫夯住的問題。雖然閃回恢復區ORACLE會自動管理,即閃回恢復區空間不足就會清理掉沒用的數據,但是如果備份策略不是很完善,數據庫非常繁忙的情況下,還是有可能遇到無法歸檔導致數據庫夯住的問題,這時候通常需要修改歸檔日志的路徑,將歸檔日志放到其他不受限制的路徑下來解決這個問題,這種情況下就可通過下面操作來實現。
確認當前系統環境: 沒有開啟歸檔 沒有開啟閃回
SQL> archive log list Database log mode No Archive Mode Automatic archival Disabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 6 Current log sequence 8 SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ NO
(1) 首先設置 歸檔日志路徑 設置歸檔日志存放格式
SQL> alter system set log_archive_dest_1='location=/home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch'; System altered. SQL> archive log list Database log mode No Archive Mode Automatic archival Disabled Archive destination /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch Oldest online log sequence 6 Current log sequence 8
打開歸檔模式
SQL> alter database archivelog; Database altered.
修改日志文件命名格式:
SQL> alter system set log_archive_max_processes = 5; SQL> alter system set log_archive_format = "%t_%s_%r.dbf" scope=spfile; --- 注意: 上方的%t_%s_%r.dbf命名格式,10g之后必須包含%t %s %r否則后續會報錯!!! 出現:“ORA-19905:log_archive_format must contain %s,%t and %r”錯誤,實例將無法啟動。 SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch Oldest online log sequence 6 Next log sequence to archive 8 Current log sequence 8
(2) 開啟閃回:
SQL> alter database flashback on; alter database flashback on * ERROR at line 1: ORA-38706: Cannot turn on FLASHBACK DATABASE logging. ORA-38709: Recovery Area is not enabled. ---如果出現上述 報錯 需要先在數據庫層面創建:閃回的路徑 並指定空間大小 (有網友說這塊必須得先設置空間大小再指定路徑,否則報錯,我這塊暫沒有遇到這種情況,如果提示相關錯誤的話,下方的操作,就先設置閃回空間大小,再指定路徑), 另外還需要在操作系統層面創建相應的目錄; 參考下方相關操作!!!然后再回來執行上述打開閃回的命令。
(3) 然后 設置閃回路徑 設置閃回路徑大小 設置閃回保存策略
設置閃回區位置:
SQL> alter system set db_recovery_file_dest='/home/oracle/u01/app/oracle/flashback_area' scope=spfile;
操作系統層面創建閃回相關目錄:
[oracle@dbserver oracle]$ mkdir -p /home/oracle/u01/app/oracle/flashback_area
設置閃回路徑大小
alter system set db_recovery_file_dest_size=30g scope=spfile;
設置閃回目標為5天,以分鍾為單位,oracle默認1440分鍾,即一天)
SQL> alter system set db_flashback_retention_target=7200 scope=spfile; SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch Oldest online log sequence 6 Next log sequence to archive 8 Current log sequence 8 SQL> select open_mode,flashback_on from v$database; OPEN_MODE FLASHBACK_ON -------------------- ------------------ MOUNTED YES
(4) 重啟數據庫
查看相關配置是否生效
SQL> select open_mode,flashback_on from v$database; OPEN_MODE FLASHBACK_ON -------------------- ------------------ MOUNTED YES SQL> alter database open; SQL> shutdown immediate SQL> startup SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch Oldest online log sequence 6 Next log sequence to archive 8 Current log sequence 8 SQL> select open_mode,flashback_on from v$database; OPEN_MODE FLASHBACK_ON -------------------- ------------------ READ WRITE YES
查看閃回恢復區的配置
SQL> show parameter db_recovery NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string /home/oracle/u01/app/oracle/account_flashback_area db_recovery_file_dest_size big integer 5G
檢查flash recovery area的使用情況,查看archivelog
SQL> set linesize 200 SQL> set pagesize 80 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 BACKUP PIECE 0 0 0 IMAGE COPY 0 0 0 FLASHBACK LOG 1.95 0 2 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 ----------------------------- .0585 SQL> select archiver from v$instance; ARCHIVE ------- STARTED SQL> select name from v$archived_log; NAME ----------------------------------------------------------------------------- /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_6_947091054.dbf
強制切換歸檔:
SQL> alter system switch logfile; System altered. SQL> select name from v$archived_log; NAME -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_6_947091054.dbf /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch_1_8_947091054.log SQL> show parameter db_recover NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string /home/oracle/u01/app/oracle/fl ashback_area db_recovery_file_dest_size big integer 30G
補充個發現:
當選擇oracle默認的配置,將歸檔日志存放在閃回區之后,生成的歸檔日志,是以日期為文件夾,並且日志后綴名為.arc,
而如果歸檔日志是自定義指定的存放路徑,那么歸檔日志文件是以定義的日志格式存放的,后綴名為.bdf。
SQL> col name for a100 SQL> select recid, name, first_time from v$archived_log; RECID NAME FIRST_TIME ---------- ---------------------------------------------------------------------------------------------------- ------------------- 1 /home/oracle/u01/app/oracle/archivelog/1_6_950980202.dbf 2017-08-02 17:10:47 2 /home/oracle/u01/app/oracle/archivelog/1_7_950980202.dbf 2017-08-03 10:13:28 3 /home/oracle/u01/app/oracle/archivelog/1_8_950980202.dbf 2017-08-03 11:48:58 4 /home/oracle/u01/app/oracle/archivelog/1_9_950980202.dbf 2017-08-03 11:49:47 5 /home/oracle/u01/app/oracle/flashback_area/ORCL/archivelog/2017_08_03/o1_mf_1_10_dr5lkd29_.arc 2017-08-03 14:44:51 6 /home/oracle/u01/app/oracle/flashback_area/ORCL/archivelog/2017_08_03/o1_mf_1_11_dr5lm0og_.arc 2017-08-03 15:01:00 7 /home/oracle/u01/app/oracle/flashback_area/ORCL/archivelog/2017_08_03/o1_mf_1_12_dr5lqxsh_.arc 2017-08-03 15:01:52 8 /home/oracle/u01/app/oracle/flashback_area/ORCL/archivelog/2017_08_03/o1_mf_1_13_dr5lstob_.arc 2017-08-03 15:04:29