能夠將聯機日誌文件保存到多個不一樣的位置,將聯機日誌轉換爲歸檔日誌的過程稱之爲歸檔。相應的日誌被稱爲歸檔日誌。Oraclejavascript
1、歸檔日誌java
是聯機重作日誌組文件的一個副本linux
包含redo記錄以及一個惟一的log sequence number數據庫
對日誌組中的一個日誌文件進行歸檔,若是該組其中一個損壞,則另外一個可用的日誌將會被歸檔服務器
對於歸檔模式的日誌切換,當日志歸檔完成後,下一個日誌才能被覆蓋或從新使用網絡
自動歸檔功能如開啓,則後臺進程arcn在日誌切換時自動完成歸檔,不然須要手動歸檔oracle
歸檔日誌用途app
恢復數據庫ide
更新standby數據庫ui
使用LogMiner 提取歷史日誌的相關信息
2、日誌的兩種模式
1.非歸檔模式
不適用與生產數據庫
當日志切換,檢查點產生後,聯機重作日誌文件便可被從新使用
聯機日誌被覆蓋後,介質恢復僅僅支持到最近的完整備份
不支持聯機備份表空間,一個表空間損壞將致使整個數據庫不可用,須要刪除掉損壞的表空間或從備份恢復
對於操做系統級別的數據庫備份須要將數據庫一致性關閉
應當備份全部的數據文件、控制文件(單個)、參數文件、密碼文件、聯機日誌文件(可選)
2.歸檔模式
可以對聯機日誌文件進行歸檔,生產數據庫強烈建議歸檔
在日誌切換時,下一個即將被寫入日誌組必須歸檔完成以後,日誌組纔可使用
歸檔日誌的Log sequence number信息會記錄到控制文件之中
必須有足夠的磁盤空間用於存放歸檔日誌
Oracle 9i 須要設置參數log_archive_start=true 纔可以進行自動歸檔
備份與恢復
支持熱備份,且當某個非系統表空間損壞,數據庫仍然處於可用狀態,且支持在線恢復
使用歸檔日誌可以實現聯機或脫機時點恢復(便可以恢復到指定的時間點、指定的歸檔日誌或指定的SCN)
3、兩種模式的切換設置及手動歸檔
1.非歸檔到歸檔模式
a.一致性關閉數據庫(shutdown [immediate | transactional |normal])
b.啓動到mount階段(startup mount)
c.切換到歸檔模式(alter database archivelog [manual])
d.切換到open階段(alter database open)
e.對數據作一個完整備份(full backup)
--演示非歸檔到歸檔模式
SQL> ARCHIVE LOG LIST --查看數據庫是否處於歸檔模式
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 14
Current log sequence 16
SQL> SELECT log_mode FROM v$database; --查看數據庫是否處於歸檔模式
LOG_MODE
------------
NOARCHIVELOG
SQL> SHUTDOWN IMMEDIATE; --一致性關閉數據庫
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP MOUNT; --啓動到mount狀態
ORACLE instance started.
Total System Global Area 251658240 bytes
Fixed Size 1218796 bytes
Variable Size 75499284 bytes
Database Buffers 171966464 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> ALTER DATABASE ARCHIVELOG; --切換到自動歸檔模式
Database altered.
SQL> ALTER DATABASE OPEN; --切換到open狀態
Database altered.
SQL> ARCHIVE LOG LIST; --查看數據庫的歸檔狀態
Database log mode Archive Mode --已置爲歸檔模式
Automatic archival Enabled --對日誌進行自動歸檔
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 14
Next log sequence to archive 16
Current log sequence 16
--備份數據庫步驟省略
2.歸檔模式切換到非歸檔模式(步驟同非歸檔到歸檔模式僅僅是c步驟使用alter database noarchivelog,演示省略)
a.一致性關閉數據庫(shutdown [immediate | transactional |normal])
b.啓動到mount階段(startup mount)
c.切換到歸檔模式(alter database noarchivelog )
d.切換到open階段(alter database open)
e.對數據作一個完整備份(full backup)
3.手動歸檔
手動歸檔時須要將日誌模式切換爲alter database archivelog manual
再使用alter system archive log current | all 實現歸檔
更多手動歸檔命令:ALTER SYSTEM archive_log_clause
注意:
手動歸檔模式下不支持stanby數據庫
在alter database archivelog模式下也能夠實現對日誌的歸檔
SQL> ALTER DATABASE ARCHIVELOG MANUAL; --將日誌模式切換爲手工歸檔模式
Database altered.
SQL> ALTER DATABASE OPEN; --打開數據庫
Database altered.
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT; --對當前的日誌進行歸檔(建議在mount階段完成)
System altered.
SQL> ALTER SYSTEM ARCHIVE LOG ALL; --對全部的日誌進行歸檔
alter system archive log all
*
ERROR at line 1:
ORA-00271: there are no logs that need archiving --沒有須要歸檔的日誌
4.歸檔進程的調整
經過設置LOG_ARCHIVE_MAX_PROCESSES 參數,能夠指定數據庫規定所需初始化的進程數,缺省的歸檔進程數爲2
通常狀況下不須要修改該參數,Oracle會根據歸檔狀況自動啓動額外的歸檔進程
也能夠動態的增長或減小歸檔進程數,好比有些業務在月底須要進行大量歸檔,平時則歸檔較少,對此能夠動態修改
修改方法
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;
5.配置歸檔(兩種歸檔位置配置方法)
a.歸檔到本機且少於等於兩個歸檔位置
設置LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST參數
alter system set log_archive_dest = '/u01/app/oracle/archivelog1' scope = spfile;
alter system set log_archive_duplex_dest = '/u01/app/oracle/archivelog2' scope = spfile;
b.歸檔到本機或遠程主機
設置LOG_ARCHIVE_DEST_n 參數,n最大值爲10
alter system set log_archive_dest_1 = 'LOCATION=/u01/app/oracle/archivelog3';
alter system set log_archive_dest_2 = 'SERVICE=standby1';
對於遠程歸檔位置,SERVICE選項須要指定遠程數據庫的網絡服務名(在tnsnames.ora文件中配置)
LOG_ARCHIVE_DEST_n的兩個經常使用選項
MANADATORY | OPTIONAL:
MANADATORY表示歸檔必須成功複製到目的路徑以後,聯機重作日誌才能被複用,OPTIONAL正好相反
REOPEN:
指定歸檔失敗後指定間隔多少時間重試歸案,缺省的爲300秒
示例:
log_archive_dest_1 = 'LOCATION=/u01/app/oracle/archivelog3 manadatory reopen = 600'
log_archive_dest_2 = 'SERVICE=standby1 manadatory reopen'
c.兩種歸檔方法異同(前者log_archive_dest、log_archive_duplex_dest ,後者log_archive_dest_n)
二者均可以歸檔到本機,後者能夠歸檔到遠程主機,前者不支持該功能
前者最多配置兩個歸檔位置,後者能夠配置10個歸檔位置
二者互不兼容,要麼使用前者,要麼使用後者
使用後者歸檔到本地時須要增長LOCATION選項,備份到遠程主機須要使用SERVICE選項
但上述兩種方式未指定路徑時,歸檔日誌位於db_recovery_file_dest 缺省爲$ORACLE_BASE/flash_recovey_area
d.歸檔日誌命名格式
設置LOG_ARCHIVE_FORMAT參數,Unix下的缺省設置爲LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf
%s: 日誌序列號:
%S: 日誌序列號(帶有前導)
%t: 重作線程編號.
%T: 重作線程編號(帶有前導)
%a: 活動ID號
%d: 數據庫ID號
%r RESETLOGS的ID值.
alter system set log_archive_format = 'arch_%t_%s_%r.arc';
e.歸檔位置狀態
Valid/Invalid --磁盤位置及服務名等是否有效
Enabled/Disabled --磁盤位置的可用狀態及數據庫可否使用該歸檔位置
Active/Inactive --訪問歸檔目的地是否有異常
f.歸檔成功的最小個數(使用參數log_archive_min_succeed_dest = n)
alter system set log_archive_min_succeed_dest = 2; --缺省爲1
聯機重作日誌組可以被覆蓋的前提
全部強制路徑歸檔位置成功實現歸檔
歸檔目的地的成功歸檔的個數大於或等於上述參數設定的值
當強制個數大於該參數設定的個數,則以強制個數爲準
當強制個數小於該參數設定的個數,則可選的成功歸檔路徑加上強制的歸檔路徑個數至少等於該參數設定值
g.控制歸檔的可用性(使用參數log_archive_dest_state_n)
alter system set log_archive_dest_state_1 = enable | defer
enable -->缺省狀態,能夠在該歸檔位置進行歸檔
defer -->禁用該歸檔位置
h.演示歸檔路徑配置及查看歸檔進程,歸檔位置狀態
SQL> ARCHIVE LOG LIST; --查看日誌是否處於歸檔狀態
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 24
Next log sequence to archive 26
Current log sequence 26
SQL> ho ps -ef | grep ora_arc --查看歸檔進程是否已啓動
oracle 4062 1 0 11:43 ? 00:00:00 ora_arc0_orcl
oracle 4064 1 0 11:43 ? 00:00:00 ora_arc1_orcl
SQL> SHOW PARAMETER ARCHIVE --查看歸檔路徑是否已設置,爲空值表示未設置
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
log_archive_config string
log_archive_dest string
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_2 string
log_archive_dest_3 string
log_archive_dest_4 string
log_archive_dest_5 string
log_archive_dest_6 string
log_archive_dest_7 string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_8 string
log_archive_dest_9 string
log_archive_dest_state_1 string enable
log_archive_dest_state_10 string enable
log_archive_dest_state_2 string enable
log_archive_dest_state_3 string enable
log_archive_dest_state_4 string enable
log_archive_dest_state_5 string enable
log_archive_dest_state_6 string enable
log_archive_dest_state_7 string enable
log_archive_dest_state_8 string enable
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_9 string enable
log_archive_duplex_dest string
log_archive_format string %t_%s_%r.dbf
log_archive_local_first boolean TRUE
log_archive_max_processes integer 2
log_archive_min_succeed_dest integer 1
log_archive_start boolean FALSE --該參數在9i中使用
log_archive_trace integer 0
remote_archive_enable string true
standby_archive_dest string ?/dbs/arch
SQL> alter system set log_archive_dest = '/u01/app/oracle/archivelog1' scope = spfile;
System altered.
SQL> alter system set log_archive_duplex_dest= '/u01/app/oracle/archivelog2' scope=spfile;
System altered.
SQL> alter system set log_archive_format = 'arch_%t_%s_%r.arc' scope = spfile;
--設定完畢後須要從新啓動實例,在此省略關閉啓動信息
SQL> ho ls /u01/app/oracle/archivelog1 --查看歸檔路徑下是否存在文件或文件夾
SQL> ho ls /u01/app/oracle/archivelog2 --查看歸檔路徑下是否存在文件或文件夾
SQL> alter system archive log current; --手動進行歸檔
System altered.
SQL> ho ls -l /u01/app/oracle/archivelog1 --在指定的文件夾archivelog1已產生歸檔日誌
total 18224
-rw------- 1 oracle oinstall 18636800 Jul 28 20:39 arch_1_26_724852763.arc
SQL> ho ls -l /u01/app/oracle/archivelog2 --在指定的文件夾archivelog2已產生歸檔日誌
total 18224
-rw------- 1 oracle oinstall 18636800 Jul 28 20:39 arch_1_26_724852763.arc
SQL> ho mkdir /u01/app/oracle/archivelog3 --建立新的歸檔路徑
SQL> ho mkdir /u01/app/oracle/archivelog4 --建立新的歸檔路徑
SQL> alter system set log_archive_dest_1 = 'location=/u01/app/oracle/archivelog3'
2 scope = spfile;
System altered.
SQL> alter system set log_archive_dest_2 = 'location=/u01/app/oracle/archivelog4'
2 scope = spfile;
System altered.
SQL> shutdown immediate; --關閉實例
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup --啓動實例後,收到錯誤提示代表兩種歸檔方式不兼容
ORA-16019: cannot use LOG_ARCHIVE_DEST_1 with LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST
--關於上述設置致使的錯誤處理請參照:又一例SPFILE設置錯誤致使數據庫沒法啓動
SPFILE錯誤致使數據庫沒法啓動
--下面是正確的處理辦法,應當先將一種歸檔方式路徑置空,此處是將log_archive_dest置空
SQL> alter system set log_archive_dest = '' scope = spfile;
System altered.
--此處是將log_archive_duplex_dest置空
SQL> alter system set log_archive_duplex_dest = '' scope = spfile;
System altered.
--接下來再設定log_archive_dest_1,log_archive_dest_2
SQL> alter system set log_archive_dest_1 = 'location=/u01/app/oracle/archivelog3'
2 scope = spfile;
System altered.
SQL> alter system set log_archive_dest_2 = 'location=/u01/app/oracle/archivelog4'
2 scope = spfile;
System altered.
--因爲沒有配置standby服務器,因此省略配置到遠程主機
--設定完畢後須要從新啓動實例,此時系統能正常啓動,在此省略關閉啓動信息
SQL> alter system archive log current; --進行手動歸檔
System altered.
SQL> ho ls -l /u01/app/oracle/archivelog3/ --查看歸檔日誌
total 27752
-rw------- 1 oracle oinstall 28382208 Aug 2 13:46 arc_1_38_724852763.arc
SQL> ho ls -l /u01/app/oracle/archivelog4/ --查看歸檔日誌
total 27752
-rw------- 1 oracle oinstall 28382208 Aug 2 13:45 arc_1_38_724852763.arc
SQL> col dest_name format a20;
SQL> col destination format a30;
SQL> select dest_name,status,archiver,destination,
2 log_sequence,reopen_secs,transmit_mode,process
3 from v$archive_dest; --查看歸檔目的地的相關狀態信息
DEST_NAME STATUS ARCHIVER DESTINATION LOG_SEQUENCE REOPEN_SECS TRANSMIT_MOD PROCESS
-------------------- --------- ---------- ------------------------------ ------------ ----------- ------------ -------
LOG_ARCHIVE_DEST_1 VALID ARCH /u01/app/oracle/archivelog3/ 38 300 SYNCHRONOUS ARCH
LOG_ARCHIVE_DEST_2 VALID ARCH /u01/app/oracle/archivelog4/ 38 300 SYNCHRONOUS ARCH
LOG_ARCHIVE_DEST_3 INACTIVE ARCH 0 0 SYNCHRONOUS ARCH
-----------------------------------------------------------------------------------------------------------------------
SQL> alter system set log_archive_dest_state_2 = defer; --停用log_archive_dest_state_2
System altered.
SQL> show parameter log_archive_dest_state
NAME TYPE VALUE
------------------------------------ ----------- ---------------
log_archive_dest_state_1 string enable
log_archive_dest_state_10 string enable
log_archive_dest_state_2 string DEFER --該路徑顯示爲defer
log_archive_dest_state_3 string enable
log_archive_dest_state_4 string enable
log_archive_dest_state_5 string enable
log_archive_dest_state_6 string enable
log_archive_dest_state_7 string enable
log_archive_dest_state_8 string enable
log_archive_dest_state_9 string enable
SQL> alter system archive log current; --手動歸檔
System altered.
SQL> ho ls -l /u01/app/oracle/archivelog3; --能夠看出archivelog3比archivelog4多出幾個歸檔文件
total 124772 --建議將多出文件件的使用系統命令複製到archivelog4
-rw------- 1 oracle oinstall 28382208 Aug 2 13:46 arc_1_38_724852763.arc
-rw------- 1 oracle oinstall 1788416 Aug 2 20:41 arc_1_39_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug 2 22:21 arc_1_40_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug 2 22:22 arc_1_41_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug 2 22:22 arc_1_42_724852763.arc
-rw------- 1 oracle oinstall 6647296 Aug 2 22:23 arc_1_43_724852763.arc
SQL> ho ls -l /u01/app/oracle/archivelog4;
total 29504
-rw------- 1 oracle oinstall 28382208 Aug 2 13:45 arc_1_38_724852763.arc
-rw------- 1 oracle oinstall 1788416 Aug 2 20:41 arc_1_39_724852763.arc
SQL> alter system set log_archive_dest_state_2 = enable; --啓用log_archive_dest_state_2
System altered.
SQL> alter system archive log current; --手動歸檔
System altered.
SQL> ho ls -l /u01/app/oracle/archivelog3; --啓用後出現了相同的arc_1_44_724852763.arc文件
total 124856
-rw------- 1 oracle oinstall 28382208 Aug 2 13:46 arc_1_38_724852763.arc
-rw------- 1 oracle oinstall 1788416 Aug 2 20:41 arc_1_39_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug 2 22:21 arc_1_40_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug 2 22:22 arc_1_41_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug 2 22:22 arc_1_42_724852763.arc
-rw------- 1 oracle oinstall 6647296 Aug 2 22:23 arc_1_43_724852763.arc
-rw------- 1 oracle oinstall 81408 Aug 2 22:25 arc_1_44_724852763.arc
SQL> ho ls -l /u01/app/oracle/archivelog4;
total 29588
-rw------- 1 oracle oinstall 28382208 Aug 2 13:45 arc_1_38_724852763.arc
-rw------- 1 oracle oinstall 1788416 Aug 2 20:41 arc_1_39_724852763.arc
-rw------- 1 oracle oinstall 81408 Aug 2 22:25 arc_1_44_724852763.arc
4、歸檔日誌相關視圖
v$archived_log -->從控制文件中得到歸檔的相關信息
v$archive_dest -->歸檔路徑及狀態
v$log_history -->控制文件中日誌的歷史信息
v$database -->查看數據庫是否處於歸檔狀態
v$archive_processes -->歸檔相關的後臺進程信息
命令:archive log list
SQL> select name,sequence#,registrar,standby_dest,archived,status
2 from v$archived_log;
NAME SEQUENCE# REGISTR STA ARC S
------------------------------------------------------- ---------- ------- --- --- -
/u01/app/oracle/archivelog4/arc_1_38_724852763.arc 38 FGRD NO YES A
/u01/app/oracle/archivelog3/arc_1_39_724852763.arc 39 ARCH NO YES A
/u01/app/oracle/archivelog4/arc_1_39_724852763.arc 39 ARCH NO YES A
/u01/app/oracle/archivelog3/arc_1_40_724852763.arc 40 ARCH NO YES A
/u01/app/oracle/archivelog3/arc_1_41_724852763.arc 41 ARCH NO YES A
/u01/app/oracle/archivelog3/arc_1_42_724852763.arc 42 ARCH NO YES A
/u01/app/oracle/archivelog3/arc_1_43_724852763.arc 43 ARCH NO YES A
/u01/app/oracle/archivelog3/arc_1_44_724852763.arc 44 FGRD NO YES A
/u01/app/oracle/archivelog4/arc_1_44_724852763.arc 44 FGRD NO YES A
ARCH----歸檔進程
FGRD----後臺進程
開啓歸檔後容易引起的問題
1)數據庫掛起
歸檔啓用了之後,數據庫發生log切換的時候,會試圖將上一個redo log的內容寫入歸檔,若是寫入不成功,這個redo log狀態將被置成active,不能再次使用。當數據庫運行一段時間,全部的redo log用完,會引起數據庫掛起,檢查alertSID.log,會有如下報錯:
Fri Jun 5 00:41:00 2009
ORACLE Instance ora10glinux - Can not allocate log, archival required
Thread 1 cannot allocate new log, sequence 25
All online logs needed archiving
Current log# 3 seq# 24 mem# 0: /home/oracle/u01/app/oracle/oradata/ora10glinux/redo03.log
重啓問題依舊不能解決。
緣由1、沒有開啓自動歸檔
在oracle9i中,打開了歸檔之後,自動歸檔默認是沒有開啓,能夠用
SQL> alter system archive log all
手動歸檔或者修改參數自動歸檔
SQL> alter system set log_archive_start = TRUE scope=spfile;
緣由2、自動歸檔不成功。
若是自動歸檔開啓了,就要檢查歸檔目錄有沒有文件生成。引發自動歸檔不成功的常見緣由是oracle用戶對歸檔目錄沒有寫權限,或者歸檔目錄滿了。須要在操做系統上檢查歸檔目錄。
2)修改參數錯誤,形成oracle沒法啓動
好比修改log_archive_dest參數指定歸檔目錄的位置時,若是目錄不存在,數據庫會不能啓動:
SQL> startup
ORA-16032: parameter LOG_ARCHIVE_DEST destination string cannot be translated
ORA-07286: sksagdi: cannot obtain device information.
Linux Error: 2: No such file or directory
SQL> startup nomount
ORA-16032: parameter LOG_ARCHIVE_DEST destination string cannot be translated
ORA-07286: sksagdi: cannot obtain device information.
Linux Error: 2: No such file or directory
連nomount模式都進入不了,能夠用如下方法解決:
拷貝當前的spfile爲pfile
SQL> create pfile from spfile;
File created.
而後修正pfile中參數log_archive_dest
$cd $ORACLE_HOME/dbs
$vi initora10glinux.ora
......
*.db_unique_name='ora10glinux'
*.job_queue_processes=10
*.log_archive_dest='/home/oracle/u01/app/oracle/arch/Evan_%S_%R.%T'
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
.......
而後用pfile啓動數據庫
SQL>startup pfile='xxxx/xx/xxx/initora10glinux.ora'
而後用pfile生成spfile就能夠正常啓動了
SQL> create spfile from pfile;
File created.
5、更多
SPFILE錯誤致使數據庫沒法啓動
又一例spfile設置錯誤致使數據庫沒法啓動
Managing Archived Redo Logs
Oracle實例和Oracle數據庫(Oracle體系結構)
Oracle 用戶、對象權限、系統權限
Oracle 角色、配置文件
Oracle 聯機重作日誌文件(ONLINE LOG FILE)
Oracle 控制文件(CONTROLFILE)
Oracle 表空間與數據文件