Oracle RAC引數設定優先順序別問題分析

chenoracle發表於2021-02-06

通常oracle引數檔案優先順序別都比較清楚,spfilesid.ora>spfile.ora>initsid.ora>init.ora,

那麼引數設定的優先順序別又是怎麼樣的?

問題:

在rac環境下,修改引數,可以指定sid='*',也可以指定sid='sid',那麼在spfile引數檔案中,

對同一個引數,sid='*'和sid='sid'記錄不同的值,重啟例項後,哪個值會優先生效呢。

結論:

例如一套兩節點RAC,dbname為cjcdb,例項1和2分別是cjcdb1和cjcdb2,初始設定歸檔路徑如下:

SQL> alter system set log_archive_dest_1='location=+ARCH/arch1' sid='cjcdb1';
SQL> alter system set log_archive_dest_1='location=+ARCH/arch2' sid='cjcdb2';

後來由於某種原因,需要更改歸檔目錄,將例項1和例項2歸檔路徑都統一設定為+ARCH/arch目錄,

執行如下命令:

SQL> alter system set log_archive_dest_1='location=+ARCH/arch' sid='*';

此時記憶體和spfile引數檔案中的log_archive_dest_1引數都已經修改為+ARCH/arch,

當前歸檔目錄也變成了+ARCH/arch目錄,

此時引數檔案sfile中記錄log_archive_dest_1引數的值有三個,分別是:

SID NAME       TYPE   VALUE
-------- ----------------------------- ----------- ----------------------------
* log_archive_dest_1       string   location=+ARCH/arch
cjcdb1 log_archive_dest_1       string   location=+ARCH/arch1
cjcdb2 log_archive_dest_1       string   location=+ARCH/arch2

那麼如果重啟例項後,log_archive_dest_1值會變回原+ARCH/arch1和+ARCH/arch2值。

即,重啟後sid='例項名'引數優先順序高於sid='*';

實驗過程如下:

一:配置資料庫歸檔路徑

[grid@vmrh74db02 ~]$ asmcmd
ASMCMD> cd ARCH
ASMCMD> mkdir arch1
ASMCMD> mkdir arch2
SQL> alter system set log_archive_dest_1='location=+ARCH/arch1' sid='cjcdb1';
SQL> alter system set log_archive_dest_1='location=+ARCH/arch2' sid='cjcdb2';

SQL> archive log list;
Database log mode       Archive Mode
Automatic archival       Enabled
Archive destination       +ARCH/arch1
Oldest online log sequence     533
Next log sequence to archive   534
Current log sequence       534

SQL> show parameter log_archive_dest_1
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1     string location=+ARCH/arch1

SQL> show spparameter log_archive_dest_1
SID NAME       TYPE   VALUE
-------- ----------------------------- ----------- ----------------------------
cjcdb1 log_archive_dest_1       string   location=+ARCH/arch1
cjcdb2 log_archive_dest_1       string   location=+ARCH/arch2

二:修改歸檔路徑

SQL> alter system set log_archive_dest_1='location=+ARCH/arch' sid='*';
System altered.

三:檢視引數資訊

例項1和例項2當前歸檔路徑已經修改成+ARCH/arch。

SQL> archive log list;
Database log mode       Archive Mode
Automatic archival       Enabled
Archive destination       +ARCH/arch
Oldest online log sequence     534
Next log sequence to archive   535
Current log sequence       535

SQL> show parameter log_archive_dest_1
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1     string location=+ARCH/arch

此時spfile存在三個值。

SQL> show spparameter log_archive_dest_1
SID NAME       TYPE   VALUE
-------- ----------------------------- ----------- ----------------------------
*     log_archive_dest_1       string   location=+ARCH/arch
cjcdb1 log_archive_dest_1       string   location=+ARCH/arch1
cjcdb2 log_archive_dest_1       string   location=+ARCH/arch2

四:重啟例項

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 3724607488 bytes
Fixed Size    2258760 bytes
Variable Size 1006635192 bytes
Database Buffers 2701131776 bytes
Redo Buffers   14581760 bytes
Database mounted.
Database opened.

五:檢視當前歸檔目錄

重啟例項後,歸檔路徑又變回原來的路徑,之前sid='*'級別的修改沒有生效。

SQL> archive log list;
Database log mode       Archive Mode
Automatic archival       Enabled
Archive destination       +ARCH/arch1
Oldest online log sequence     535
Next log sequence to archive   536
Current log sequence       536

SQL> show parameter log_archive_dest_1
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1     string location=+ARCH/arch1

SQL> show spparameter log_archive_dest_1
SID NAME       TYPE   VALUE
-------- ----------------------------- ----------- ----------------------------
*     log_archive_dest_1       string   location=+ARCH/arch
cjcdb1 log_archive_dest_1       string   location=+ARCH/arch1
cjcdb2 log_archive_dest_1       string   location=+ARCH/arch2

六:可能存在的問題

可以考慮如下場景,生產環境下一開始rac例項的歸檔目錄分別在各自伺服器本地檔案系統上,例如/arch1和/arch2。

後來出於某種原因,建立了單獨的歸檔ASM磁碟組,將歸檔目錄改到了ASM磁碟組下,

後來的某一天,又因為某種原因,重啟了資料庫例項,此時歸檔路徑又會被重置成原本地檔案系統目錄,

此時如果沒有注意到歸檔路徑發生了改變,可能會引發歸檔空間不足或資料庫掛起等情況。

七:解決方案

在RAC環境下修改引數時,例如log_archive_dest_1,需要檢視下當前spfile下此引數的值是否唯一,

如果不唯一,在修改時,需要將sid='*'和sid='sid'同時修改,例如:

檢視當前spfile記錄的log_archive_dest_1值:

SQL> show spparameter log_archive_dest_1
SID NAME       TYPE   VALUE
-------- ----------------------------- ----------- ----------------------------
cjcdb1 log_archive_dest_1       string   location=+ARCH/arch1
cjcdb2 log_archive_dest_1       string   location=+ARCH/arch2

修改歸檔路徑到+ARCH/arch路徑下

alter system set log_archive_dest_1='location=+ARCH/arch' sid='*';
alter system set log_archive_dest_1='location=+ARCH/arch' sid='cjcdb1';
alter system set log_archive_dest_1='location=+ARCH/arch' sid='cjcdb2';

###chenjuchao 2021-02-06 16:50###

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2756542/,如需轉載,請註明出處,否則將追究法律責任。

相關文章