使用alter system set修改參數不生效

最近在用虛擬機上的Oracle RAC作實驗,看到後臺日誌一直報錯,緣由是配置的log_archive_dest_2參數指到了節點2,而節點2又沒有開機,因此致使一直有報錯。因而想這一參數是以前作實驗的時候修改的,如今不須要了,直接把這個參數重置一下就能夠了,因而執行了下面的語句:sql

alter system reset log_archive_dest_2;

再使用show parameter查看參數已經被清空了:數據庫

SQL> show parameter log_archive_dest_2 

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2		     string

看alert日誌中報錯也沒有了,覺得這樣事情就結束了。但事實上尚未結束。等下一次數據庫重啓後看到以前的報錯又出現了,並且log_archive_dest_2參數的設置又恢復到了重置以前的值:bash

SQL> show parameter log_archive_dest_2 

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2		     string	 service=rac2

難道是上次重置沒有成功嗎?oracle

從上次的檢查結果來看重置是成功的,並且alert日誌中也提示修改爲功。ide

那爲何這麼靈異的事情竟然發生了呢?this

嘗試再次重置:spa

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

看到出現上面的報錯,是說spfile中沒有相應的條目能夠刪除。日誌

若是沒有條目個人設置又是從哪裏來的呢?code

因而生成pfile來查看參數文件中關於log_archive_dest_2具體是怎麼設置的:orm

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'

從上面能夠看到針對每個實例的log_archive_dest_2都作了設置,難道是這個緣由麼?

再次嘗試重置,此次語句以下:

alter system reset log_archive_dest_2 sid='orcl1';

再次生成pfile文件,看到orcl1.log_archive_dest_2='service=rac2'這條記錄已經沒有了,說明已經把配置清除了,重啓實例再次查看:

SQL> show parameter log_archive_dest_2 

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2		     string

alert日誌中也再也不報錯了。

那麼問題又來了,我第一次清除的又是什麼配置呢?

有經驗的同窗應該已經想到這個問題的緣由了。咱們繼續看下面的分析。

咱們再回到第一次生成的spfile文件中能夠看到以下配置,咱們以log_archive_dest_1參數爲例

orcl2.log_archive_dest_1='location=/home/oracle/rac2'
orcl1.log_archive_dest_1='location=/home/oracle/rac1'
*.log_archive_dest_1='location=+data'

對於log_archive_dest_1參數設置有兩類,一類是'*.'開頭的,一個是以'<sid>.'開頭的。'*.'開頭的設置是對全部與數據庫相關的且沒有設置該參數的實例有效,而以'<sid>.'開頭的設置只對設置對應的實例有效。

我這前是對兩個實例orcl1和orcl2的log_archive_dest_1分別設置了不一樣的值,而分別設置以前全部的實例的log_archive_dest_1參數值都是'location=+data'。

咱們再來看alter system set|reset parameter的語法:

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' | '*' }
     }...
   ]

從上面的語法能夠看到,設置和重置參數都有一個可選項:SID = { 'sid' | '*' },而默認的都是SID='*'。

這裏應該就能夠解釋我第一次重置log_archive_dest_2時爲何能夠成功,而第二次沒有成功的緣由:我第一次刪除了*.log_archive_dest_2='xxxx'這一條目,第一次再次刪除時文件中沒有了,因此報錯。

這也能解釋爲何重置時加上sid='orcl1'項後重啓依然生效。

還有一個問題就是若是參數文件中,對於同一個參數同時有'*.'開頭的和以'<sid>.'開頭的參數設置時,Oracle會選哪一個作爲實例的參數設置的,咱們來看一句官方文檔中對SID的描述,就能夠回答這個問題了:

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 <parameter_name>查看spfile中對於參數的設置

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

相關文章
相關標籤/搜索