--====================
-- Oracle 歸檔日志
--====================
Oracle可以將聯(lián)機(jī)日志文件保存到多個不同的位置,將聯(lián)機(jī)日志轉(zhuǎn)換為歸檔日志的過程稱之為歸檔。相應(yīng)的日志被稱為歸檔日志。
一、歸檔日志
是聯(lián)機(jī)重做日志組文件的一個副本
包含redo記錄以及一個唯一的log sequence number
對日志組中的一個日志文件進(jìn)行歸檔,如果該組其中一個損壞,則另一個可用的日志將會被歸檔
對于歸檔模式的日志切換,當(dāng)日志歸檔完成后,下一個日志才能被覆蓋或重新使用
自動歸檔功能如開啟,則后臺進(jìn)程arcn在日志切換時自動完成歸檔,否則需要手動歸檔
歸檔日志用途
恢復(fù)數(shù)據(jù)庫
更新standby數(shù)據(jù)庫
使用LogMiner 提取歷史日志的相關(guān)信息
二、日志的兩種模式
1.非歸檔模式
不適用與生產(chǎn)數(shù)據(jù)庫
創(chuàng)建數(shù)據(jù)庫時,缺省的日志管理模式為非歸檔模式
當(dāng)日志切換,檢查點(diǎn)產(chǎn)生后,聯(lián)機(jī)重做日志文件即可被重新使用
聯(lián)機(jī)日志被覆蓋后,介質(zhì)恢復(fù)僅僅支持到最近的完整備份
不支持聯(lián)機(jī)備份表空間,一個表空間損壞將導(dǎo)致整個數(shù)據(jù)庫不可用,需要刪除掉損壞的表空間或從備份恢復(fù)
對于操作系統(tǒng)級別的數(shù)據(jù)庫備份需要將數(shù)據(jù)庫一致性關(guān)閉
應(yīng)當(dāng)備份所有的數(shù)據(jù)文件、控制文件(單個)、參數(shù)文件、密碼文件、聯(lián)機(jī)日志文件(可選)
2.歸檔模式
能夠?qū)β?lián)機(jī)日志文件進(jìn)行歸檔,生產(chǎn)數(shù)據(jù)庫強(qiáng)烈建議歸檔
在日志切換時,下一個即將被寫入日志組必須歸檔完成之后,日志組才可以使用
歸檔日志的Log sequence number信息會記錄到控制文件之中
必須有足夠的磁盤空間用于存放歸檔日志
Oracle 9i 需要設(shè)置參數(shù)log_archive_start=true 才能夠進(jìn)行自動歸檔
備份與恢復(fù)
支持熱備份,且當(dāng)某個非系統(tǒng)表空間損壞,數(shù)據(jù)庫仍然處于可用狀態(tài),且支持在線恢復(fù)
使用歸檔日志能夠?qū)崿F(xiàn)聯(lián)機(jī)或脫機(jī)時點(diǎn)恢復(fù)(即可以恢復(fù)到指定的時間點(diǎn)、指定的歸檔日志或指定的SCN)
三、兩種模式的切換設(shè)置及手動歸檔
1.非歸檔到歸檔模式
a.一致性關(guān)閉數(shù)據(jù)庫(shutdown [immediate | transactional |normal])
b.啟動到mount階段(startup mount)
c.切換到歸檔模式(alter database archivelog [manual])
d.切換到open階段(alter database open)
e.對數(shù)據(jù)做一個完整備份(full backup)
--演示非歸檔到歸檔模式
SQL> ARCHIVE LOG LIST --查看數(shù)據(jù)庫是否處于歸檔模式
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; --查看數(shù)據(jù)庫是否處于歸檔模式
LOG_MODE
------------
NOARCHIVELOG
SQL> SHUTDOWN IMMEDIATE; --一致性關(guān)閉數(shù)據(jù)庫
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP MOUNT; --啟動到mount狀態(tài)
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狀態(tài)
Database altered.
SQL> ARCHIVE LOG LIST; --查看數(shù)據(jù)庫的歸檔狀態(tài)
Database log mode Archive Mode --已置為歸檔模式
Automatic archival Enabled --對日志進(jìn)行自動歸檔
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 14
Next log sequence to archive 16
Current log sequence 16
--備份數(shù)據(jù)庫步驟省略
2.歸檔模式切換到非歸檔模式(步驟同非歸檔到歸檔模式僅僅是c步驟使用alter database noarchivelog,演示省略)
a.一致性關(guān)閉數(shù)據(jù)庫(shutdown [immediate | transactional |normal])
b.啟動到mount階段(startup mount)
c.切換到歸檔模式(alter database noarchivelog )
d.切換到open階段(alter database open)
e.對數(shù)據(jù)做一個完整備份(full backup)
3.手動歸檔
手動歸檔時需要將日志模式切換為alter database archivelog manual
再使用alter system archive log current | all 實(shí)現(xiàn)歸檔
更多手動歸檔命令:ALTER SYSTEM archive_log_clause
注意:
手動歸檔模式下不支持stanby數(shù)據(jù)庫
在alter database archivelog模式下也可以實(shí)現(xiàn)對日志的歸檔
SQL> ALTER DATABASE ARCHIVELOG MANUAL; --將日志模式切換為手工歸檔模式
Database altered.
SQL> ALTER DATABASE OPEN; --打開數(shù)據(jù)庫
Database altered.
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT; --對當(dāng)前的日志進(jìn)行歸檔(建議在mount階段完成)
System altered.
SQL> ALTER SYSTEM ARCHIVE LOG ALL; --對所有的日志進(jìn)行歸檔
alter system archive log all
*
ERROR at line 1:
ORA-00271: there are no logs that need archiving --沒有需要?dú)w檔的日志
4.歸檔進(jìn)程的調(diào)整
通過設(shè)置LOG_ARCHIVE_MAX_PROCESSES 參數(shù),可以指定數(shù)據(jù)庫規(guī)定所需初始化的進(jìn)程數(shù),缺省的歸檔進(jìn)程數(shù)為2
一般情況下不需要修改該參數(shù),Oracle會根據(jù)歸檔情況自動啟動額外的歸檔進(jìn)程
也可以動態(tài)的增加或減少歸檔進(jìn)程數(shù),比如有些業(yè)務(wù)在月底需要進(jìn)行大量歸檔,平時則歸檔較少,對此可以動態(tài)修改
修改方法
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;
5.配置歸檔(兩種歸檔位置配置方法)
a.歸檔到本機(jī)且少于等于兩個歸檔位置
設(shè)置LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST參數(shù)
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.歸檔到本機(jī)或遠(yuǎn)程主機(jī)
設(shè)置LOG_ARCHIVE_DEST_n 參數(shù),n最大值為10
alter system set log_archive_dest_1 = 'LOCATION=/u01/app/oracle/archivelog3';
alter system set log_archive_dest_2 = 'SERVICE=standby1';
對于遠(yuǎn)程歸檔位置,SERVICE選項(xiàng)需要指定遠(yuǎn)程數(shù)據(jù)庫的網(wǎng)絡(luò)服務(wù)名(在tnsnames.ora文件中配置)
LOG_ARCHIVE_DEST_n的兩個常用選項(xiàng)
MANADATORY | OPTIONAL:
MANADATORY表示歸檔必須成功復(fù)制到目的路徑之后,聯(lián)機(jī)重做日志才能被復(fù)用,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)
兩者都可以歸檔到本機(jī),后者可以歸檔到遠(yuǎn)程主機(jī),前者不支持該功能
前者最多配置兩個歸檔位置,后者可以配置10個歸檔位置
兩者互不兼容,要么使用前者,要么使用后者
使用后者歸檔到本地時需要增加LOCATION選項(xiàng),備份到遠(yuǎn)程主機(jī)需要使用SERVICE選項(xiàng)
但上述兩種方式未指定路徑時,歸檔日志位于db_recovery_file_dest 缺省為$ORACLE_BASE/flash_recovey_area
d.歸檔日志命名格式
設(shè)置LOG_ARCHIVE_FORMAT參數(shù),Unix下的缺省設(shè)置為LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf
%s: 日志序列號:
%S: 日志序列號(帶有前導(dǎo))
%t: 重做線程編號.
%T: 重做線程編號(帶有前導(dǎo))
%a: 活動ID號
%d: 數(shù)據(jù)庫ID號
%r RESETLOGS的ID值.
alter system set log_archive_format = 'arch_%t_%s_%r.arc';
e.歸檔位置狀態(tài)
Valid/Invalid --磁盤位置及服務(wù)名等是否有效
Enabled/Disabled --磁盤位置的可用狀態(tài)及數(shù)據(jù)庫能否使用該歸檔位置
Active/Inactive --訪問歸檔目的地是否有異常
f.歸檔成功的最小個數(shù)(使用參數(shù)log_archive_min_succeed_dest = n)
alter system set log_archive_min_succeed_dest = 2; --缺省為1
聯(lián)機(jī)重做日志組能夠被覆蓋的前提
所有強(qiáng)制路徑歸檔位置成功實(shí)現(xiàn)歸檔
歸檔目的地的成功歸檔的個數(shù)大于或等于上述參數(shù)設(shè)定的值
當(dāng)強(qiáng)制個數(shù)大于該參數(shù)設(shè)定的個數(shù),則以強(qiáng)制個數(shù)為準(zhǔn)
當(dāng)強(qiáng)制個數(shù)小于該參數(shù)設(shè)定的個數(shù),則可選的成功歸檔路徑加上強(qiáng)制的歸檔路徑個數(shù)至少等于該參數(shù)設(shè)定值
g.控制歸檔的可用性(使用參數(shù)log_archive_dest_state_n)
alter system set log_archive_dest_state_1 = enable | defer
enable -->缺省狀態(tài),可以在該歸檔位置進(jìn)行歸檔
defer -->禁用該歸檔位置
h.演示歸檔路徑配置及查看歸檔進(jìn)程,歸檔位置狀態(tài)
SQL> ARCHIVE LOG LIST; --查看日志是否處于歸檔狀態(tài)
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 --查看歸檔進(jìn)程是否已啟動
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 --查看歸檔路徑是否已設(shè)置,為空值表示未設(shè)置
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 --該參數(shù)在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;
--設(shè)定完畢后需要重新啟動實(shí)例,在此省略關(guān)閉啟動信息
SQL> ho ls /u01/app/oracle/archivelog1 --查看歸檔路徑下是否存在文件或文件夾
SQL> ho ls /u01/app/oracle/archivelog2 --查看歸檔路徑下是否存在文件或文件夾
SQL> alter system archive log current; --手動進(jìn)行歸檔
System altered.
SQL> ho ls -l /u01/app/oracle/archivelog1 --在指定的文件夾archivelog1已產(chǎn)生歸檔日志
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已產(chǎn)生歸檔日志
total 18224
-rw------- 1 oracle oinstall 18636800 Jul 28 20:39 arch_1_26_724852763.arc
SQL> ho mkdir /u01/app/oracle/archivelog3 --創(chuàng)建新的歸檔路徑
SQL> ho mkdir /u01/app/oracle/archivelog4 --創(chuàng)建新的歸檔路徑
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; --關(guān)閉實(shí)例
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup --啟動實(shí)例后,收到錯誤提示表明兩種歸檔方式不兼容
ORA-16019: cannot use LOG_ARCHIVE_DEST_1 with LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST
--關(guān)于上述設(shè)置導(dǎo)致的錯誤處理請參照:又一例SPFILE設(shè)置錯誤導(dǎo)致數(shù)據(jù)庫無法啟動
SPFILE錯誤導(dǎo)致數(shù)據(jù)庫無法啟動
--下面是正確的處理辦法,應(yīng)當(dāng)先將一種歸檔方式路徑置空,此處是將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.
--接下來再設(shè)定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服務(wù)器,所以省略配置到遠(yuǎn)程主機(jī)
--設(shè)定完畢后需要重新啟動實(shí)例,此時系統(tǒng)能正常啟動,在此省略關(guān)閉啟動信息
SQL> alter system archive log current; --進(jìn)行手動歸檔
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; --查看歸檔目的地的相關(guān)狀態(tài)信息
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 --建議將多出文件件的使用系統(tǒng)命令復(fù)制到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; --啟用后出現(xiàn)了相同的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
四、歸檔日志相關(guān)視圖
v$archived_log -->從控制文件中獲得歸檔的相關(guān)信息
v$archive_dest -->歸檔路徑及狀態(tài)
v$log_history -->控制文件中日志的歷史信息
v$database -->查看數(shù)據(jù)庫是否處于歸檔狀態(tài)
v$archive_processes -->歸檔相關(guān)的后臺進(jìn)程信息
命令: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
五、更多
SPFILE錯誤導(dǎo)致數(shù)據(jù)庫無法啟動
又一例spfile設(shè)置錯誤導(dǎo)致數(shù)據(jù)庫無法啟動
Oracle實(shí)例和Oracle數(shù)據(jù)庫(Oracle體系結(jié)構(gòu))
Oracle 用戶、對象權(quán)限、系統(tǒng)權(quán)限
Oracle 聯(lián)機(jī)重做日志文件(ONLINE LOG FILE)