RAC環境修改spfile的位置

space6212發表於2019-07-03

在RAC下spfile位置的修改與單節點環境不完全一致,有些地方需要特別注意,否則可能修改會失敗。

下面用一個例子說明:SPFILE放在ASM中一個不正確的目錄(+ARCH)中,現在想把它放在另外一個目錄(+DBSYS)下。

以下是具體步驟:

[@more@]1. 原spfile位置
SQL> show parameter spfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +ARCH/dwrac/spfiledwrac.ora

2. 複製spfile到其他目錄

由於在ASM中,不能直接cp,需要透過迂迴的辦法實現。

sys@dwrac2> create pfile='/tmp/pfile.ora' from spfile;

File created.

sys@dwrac2> create spfile='+DBSYS/dwrac/spfiledwrac.ora' from pfile='/tmp/pfile.ora';

File created.

3. 修改所有節點$ORACLE_HOME/dbs/init下的引數檔案
[oracle@dwdb04 dbs]$ vi initdwrac2.ora

SPFILE='+ARCH/dwrac/spfiledwrac.ora'
==>
SPFILE='+DBSYS/dwrac/spfiledwrac.ora'


4. 透過sqlplus方式重啟例項
sys@dwrac2> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@dwrac2> startup
ORACLE instance started.

Total System Global Area 5.2429E+10 bytes
Fixed Size 2193872 bytes
Variable Size 3707766320 bytes
Database Buffers 4.8671E+10 bytes
Redo Buffers 48136192 bytes
Database mounted.
Database opened.
sys@dwrac2> show parameter spfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DBSYS/dwrac/spfiledwrac.ora

可以發現,spfile已經修改成功。

5. 但是如果用過srvctl重啟資料庫,發現spfile又變回來了:

[oracle@dwdb02 dbs]$ srvctl stop instance -d dwrac -i dwrac1,dwrac2,dwrac3,dwrac4

[oracle@dwdb02 dbs]$ srvctl start instance -d dwrac -i dwrac1,dwrac2,dwrac3,dwrac4

[oracle@dwdb02 dbs]$ sqlplus "/as sysdba"

sys@dwrac2> show parameter spfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +ARCH/dwrac/spfiledwrac.ora

6. 原因及解決

這是為什麼呢?實際上在RAC環境中,我們更多時候是用srvctl來管理RAC資源,而srvctl的資訊來自ocr,包括spfile的位置資訊。我們剛才那樣做雖然修改了引數檔案的位置,但是ocr並不知道,它還用原來的檔案啟動資料庫。
我們可以用srvctl檢視資料庫的配置資訊來確認:

[oracle@dwdb01 dbs]$ srvctl config database -d dwrac -a
dwdb01 dwrac1 /oracle/product/10.2.0/db
dwdb02 dwrac2 /oracle/product/10.2.0/db
dwdb03 dwrac3 /oracle/product/10.2.0/db
dwdb04 dwrac4 /oracle/product/10.2.0/db
DB_UNIQUE_NAME: dwrac
DB_NAME: dwrac
ORACLE_HOME: /oracle/product/10.2.0/db
SPFILE: +ARCH/dwrac/spfiledwrac.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY: AUTOMATIC
ENABLE FLAG: DB ENABLED

可以看到,SPFILE的位置指向是+ARCH。解決方法是透過srvctl修改SPFILE的位置。

[oracle@dwdb01 dbs]$ srvctl modify database -d dwrac -p '+DBSYS/dwrac/spfiledwrac.ora'
[oracle@dwdb01 dbs]$ srvctl config database -d dwrac -a
dwdb01 dwrac1 /oracle/product/10.2.0/db
dwdb02 dwrac2 /oracle/product/10.2.0/db
dwdb03 dwrac3 /oracle/product/10.2.0/db
dwdb04 dwrac4 /oracle/product/10.2.0/db
DB_UNIQUE_NAME: dwrac
DB_NAME: dwrac
ORACLE_HOME: /oracle/product/10.2.0/db
SPFILE: +DBSYS/dwrac/spfiledwrac.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY: AUTOMATIC
ENABLE FLAG: DB ENABLED

[oracle@dwdb01 dbs]$ srvctl stop database -d dwrac
[oracle@dwdb01 dbs]$ srvctl start database -d dwrac
sys@dwrac2> show parameter spfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DBSYS/dwrac/spfiledwrac.ora

可以看到,此時Oracle是用新的spfile啟動的。

總結一下,在RAC環境下修改spfile:

1. 需要修改$ORACLE_HOME/dbs下的相關檔案,指向新檔案
2. 需要用srvctl修改config資訊,指向新檔案

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

相關文章