最近在用虛擬機(jī)上的Oracle RAC做實(shí)驗(yàn),看到后臺(tái)日志一直報(bào)錯(cuò),原因是配置的log_archive_dest_2參數(shù)指到了節(jié)點(diǎn)2,而節(jié)點(diǎn)2又沒(méi)有開(kāi)機(jī),所以導(dǎo)致一直有報(bào)錯(cuò)。于是想這一參數(shù)是之前做實(shí)驗(yàn)的時(shí)候修改的,現(xiàn)在不需要了,直接把這個(gè)參數(shù)重置一下就可以了,于是執(zhí)行了下面的語(yǔ)句:
成都創(chuàng)新互聯(lián)公司2013年開(kāi)創(chuàng)至今,先為民勤等服務(wù)建站,民勤等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為民勤企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
alter system reset log_archive_dest_2;
再使用show parameter查看參數(shù)已經(jīng)被清空了:
SQL> show parameter log_archive_dest_2 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_2 string
看alert日志中報(bào)錯(cuò)也沒(méi)有了,以為這樣事情就結(jié)束了。但事實(shí)上還沒(méi)有結(jié)束。等下一次數(shù)據(jù)庫(kù)重啟后看到之前的報(bào)錯(cuò)又出現(xiàn)了,而且log_archive_dest_2參數(shù)的設(shè)置又恢復(fù)到了重置之前的值:
SQL> show parameter log_archive_dest_2 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_2 string service=rac2
難道是上次重置沒(méi)有成功嗎?
從上次的檢查結(jié)果來(lái)看重置是成功的,而且alert日志中也提示修改成功。
那為什么這么靈異的事情居然發(fā)生了呢?
嘗試再次重置:
SQL> alter system reset log_archive_dest_2; alter system reset log_archive_dest_2 * ERROR at line 1: ORA-32010: cannot find entry to delete in SPFILE
看到出現(xiàn)上面的報(bào)錯(cuò),是說(shuō)spfile中沒(méi)有相應(yīng)的條目可以刪除。
如果沒(méi)有條目我的設(shè)置又是從哪里來(lái)的呢?
于是生成pfile來(lái)查看參數(shù)文件中關(guān)于log_archive_dest_2具體是怎么設(shè)置的:
orcl2.log_archive_dest_1='location=/home/oracle/rac2' orcl1.log_archive_dest_1='location=/home/oracle/rac1' *.log_archive_dest_1='location=+data' orcl2.log_archive_dest_2='service=rac1' orcl1.log_archive_dest_2='service=rac2'
從上面可以看到針對(duì)每一個(gè)實(shí)例的log_archive_dest_2都做了設(shè)置,難道是這個(gè)原因么?
再次嘗試重置,這次語(yǔ)句如下:
alter system reset log_archive_dest_2 sid='orcl1';
再次生成pfile文件,看到orcl1.log_archive_dest_2='service=rac2'這條記錄已經(jīng)沒(méi)有了,說(shuō)明已經(jīng)把配置清除了,重啟實(shí)例再次查看:
SQL> show parameter log_archive_dest_2 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_2 string
alert日志中也不再報(bào)錯(cuò)了。
那么問(wèn)題又來(lái)了,我第一次清除的又是什么配置呢?
有經(jīng)驗(yàn)的同學(xué)應(yīng)該已經(jīng)想到這個(gè)問(wèn)題的原因了。我們繼續(xù)看下面的分析。
我們?cè)倩氐降谝淮紊傻膕pfile文件中可以看到如下配置,我們以log_archive_dest_1參數(shù)為例
orcl2.log_archive_dest_1='location=/home/oracle/rac2' orcl1.log_archive_dest_1='location=/home/oracle/rac1' *.log_archive_dest_1='location=+data'
對(duì)于log_archive_dest_1參數(shù)設(shè)置有兩類,一類是'*.'開(kāi)頭的,一個(gè)是以'
我這前是對(duì)兩個(gè)實(shí)例orcl1和orcl2的log_archive_dest_1分別設(shè)置了不同的值,而分別設(shè)置之前所有的實(shí)例的log_archive_dest_1參數(shù)值都是'location=+data'。
我們?cè)賮?lái)看alter system set|reset parameter的語(yǔ)法:
set parameter
parameter_name = parameter_value [, parameter_value ]... [ COMMENT = string ] [ DEFERRED ] [ { SCOPE = { MEMORY | SPFILE | BOTH } | SID = { 'sid' | '*' } }... ]
reset parameter
parameter_name [ { SCOPE = SPFILE | SID = { 'sid' | '*' } }... ]
從上面的語(yǔ)法可以看到,設(shè)置和重置參數(shù)都有一個(gè)可選項(xiàng):SID = { 'sid' | '*' },而默認(rèn)的都是SID='*'。
這里應(yīng)該就可以解釋我第一次重置log_archive_dest_2時(shí)為什么可以成功,而第二次沒(méi)有成功的原因:我第一次刪除了*.log_archive_dest_2='xxxx'這一條目,第一次再次刪除時(shí)文件中沒(méi)有了,所以報(bào)錯(cuò)。
這也能解釋為什么重置時(shí)加上sid='orcl1'項(xiàng)后重啟依然生效。
還有一個(gè)問(wèn)題就是如果參數(shù)文件中,對(duì)于同一個(gè)參數(shù)同時(shí)有'*.'開(kāi)頭的和以'
SID The SID
clause lets you specify the SID of the instance where the value will take effect.
Specify SID
= '*'
if you want Oracle Database to change the value of the parameter for all instances that do not already have an explicit setting for this parameter.
Specify SID
= 'sid'
if you want Oracle Database to change the value of the parameter only for the instance sid
. This setting takes precedence over previous and subsequent ALTER
SYSTEM
SET
statements that specify SID
= '*'
.
If you do not specify this clause, then:
If the instance was started up with a pfile (traditional plain-text initialization parameter file), then Oracle Database assumes the SID of the current instance.
If the instance was started up with an spfile (server parameter file), then Oracle Database assumes SID
=
'*'
.
小提示:可以使用show spparameter
sys@ORA11G>show spparameter log_archive_dest_1 SID NAME TYPE VALUE -------- ----------------------------- ----------- ---------------------------- ora11g log_archive_dest_1 string location=/home/oracle/dump * log_archive_dest_1 string location=/u01/
參考:http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_2014.htm#i2061284