Oracle RAC修改引數檔案位置

chenoracle發表於2020-07-05

目的:

將引數檔案原位置+DATA/cjcdb/spfilecjcdb.ora修改到+DATA/cjcdb/spfile/spfilecjcdb.ora

步驟如下:

一:臨時位置生成pfile
注意:RAC環境下嚴禁使用create pfile from spfile;會覆蓋預設位置下pfile內容。
SQL> create pfile='/tmp/pfilexxx.ora' from spfile;
二:新位置重新生成spfile
注意:pfile和spfile都需要指定目錄,
SQL> create spfile='+DATA/cjcdb/spfile/spfilecjcdb.ora' from pfile='/tmp/pfilexxx.ora';
三: 修改pfile中spfile位置
[oracle@rac01 dbs]$ vim initcjcdb1.ora
###SPFILE='+DATA/cjcdb/spfilecjcdb.ora'
SPFILE='+DATA/cjcdb/spfile/spfilecjcdb.ora'
四:修改OCR中spfile位置
[oracle@rac01 dbs]$ srvctl modify database -d cjcdb -p '+DATA/cjcdb/spfile/spfilecjcdb.ora'
五:重啟資料庫生效
逐個節點重啟或同時重啟都可以,根據是否可以停機來定
[oracle@rac01 dbs]$ srvctl stop database -d cjcdb
[oracle@rac01 dbs]$ srvctl start database -d cjcdb

實驗過程如下:

節點一,節點二

檢視當前spfile位置

SQL> show parameter spfile
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile     string +DATA/cjcdb/spfilecjcdb.ora

檢視當前spfile位置

[oracle@rac01 ~]$ srvctl config database -d cjcdb -a
Database unique name: cjcdb
Database name: cjcdb
Oracle home: /u01/app/oracle/product/11.2.0/db_1
Oracle user: oracle
Spfile: +DATA/cjcdb/spfilecjcdb.ora
Domain: 
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: cjcdb
Database instances: cjcdb1,cjcdb2
Disk Groups: DATA
Mount point paths: 
Services: 
Type: RAC
Database is enabled
Database is administrator managed

建立新位置

[root@rac01 ~]# su - grid
[grid@rac01 ~]$ asmcmd
ASMCMD> lsdg 
State    Type    Rebal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  EXTERN  N         512   4096  1048576     10240     9974                0            9974              0             N  ARCH/
MOUNTED  EXTERN  N         512   4096  1048576     20480    18689                0           18689              0             N  DATA/
MOUNTED  NORMAL  N         512   4096  1048576      6144     5218             2048            1585              0             Y  OCR/

ASMCMD> cd data/cjcdb
ASMCMD> mkdir spfile
ASMCMD> cd spfile
ASMCMD> pwd
+data/cjcdb/spfile

新位置重新生成spfile

SQL> create pfile='/tmp/pfilexxx.ora' from spfile;
SQL> create spfile='+DATA/cjcdb/spfile/spfilecjcdb.ora' from pfile='/tmp/pfilexxx.ora';

修改pfile中spfile為新位置(節點一、節點二)

[oracle@rac01 ~]$ cd $ORACLE_HOME/dbs
[oracle@rac01 dbs]$ cp initcjcdb1.ora initcjcdb1.ora.bak
[oracle@rac01 dbs]$ vim initcjcdb1.ora
###SPFILE='+DATA/cjcdb/spfilecjcdb.ora'
SPFILE='+DATA/cjcdb/spfile/spfilecjcdb.ora'

[oracle@rac02 ~]$ cd $ORACLE_HOME/dbs
[oracle@rac02 dbs]$ cp initcjcdb2.ora initcjcdb2.ora.bak
[oracle@rac02 dbs]$ vim initcjcdb2.ora
###SPFILE='+DATA/cjcdb/spfilecjcdb.ora'
SPFILE='+DATA/cjcdb/spfile/spfilecjcdb.ora'

修改OCR中記錄的spfile位置

[oracle@rac01 dbs]$ srvctl config database -d cjcdb -a|grep spfile
Spfile: +DATA/cjcdb/spfilecjcdb.ora
[oracle@rac01 dbs]$ srvctl modify database -d cjcdb -p '+DATA/cjcdb/spfile/spfilecjcdb.ora'
[oracle@rac01 dbs]$ srvctl config database -d cjcdb -a|grep spfile
Spfile: +DATA/cjcdb/spfile/spfilecjcdb.ora

重啟資料庫

[oracle@rac01 dbs]$ srvctl stop database -d cjcdb
[oracle@rac01 dbs]$ srvctl start database -d cjcdb

檢視spfile引數值

[oracle@rac01 dbs]$ srvctl config database -d cjcdb -a|grep spfile
Spfile: +DATA/cjcdb/spfile/spfilecjcdb.ora
SQL> show parameter spfile
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile     string +DATA/cjcdb/spfile/spfilecjcdb.ora

參見問題:

問題一:需要執行srvctl modify修改ocr中引數檔案位置,否則通過srvctl重啟資料庫後,引數檔案位置不變。
例如:
重啟資料庫 節點一和節點二

SQL> Shutdown immeidate
SQL> startup

通過show parameter方式檢視spfile位置已經修改成功

SQL> show parameter spfile
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile     string +DATA/cjcdb/spfile/spfilecjcdb.ora

通過 srvctl config 命令檢視引數檔案位置修改失敗

[oracle@rac01 dbs]$ srvctl config database -d cjcdb -a
Database unique name: cjcdb
Database name: cjcdb
Oracle home: /u01/app/oracle/product/11.2.0/db_1
Oracle user: oracle
Spfile: +DATA/cjcdb/spfilecjcdb.ora
Domain: 
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: cjcdb
Database instances: cjcdb1,cjcdb2
Disk Groups: DATA
Mount point paths: 
Services: 
Type: RAC
Database is enabled
Database is administrator managed

通過srvctl重啟資料庫

[root@rac01 bin]# ./srvctl stop database -d cjcdb
[root@rac01 bin]# ./srvctl start database -d cjcdb

引數檔案位置完全變為原值

SQL> show parameter spfile
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile     string +DATA/cjcdb/spfilecjcdb.ora

檢視pfile裡修改的值也變回原值

[oracle@rac01 dbs]$ cat initcjcdb1.ora
###SPFILE='+DATA/cjcdb/spfilecjcdb.ora'
SPFILE='+DATA/cjcdb/spfilecjcdb.ora'# line added by Agent

問題二:兩個節點spfile位置不一致

例如 例項一spfile在ASM磁碟組內,例項二spfile在本地檔案系統上($ORACLE_HOME/dbs)
可以在例項二上建立新的pfile,將ASM上spfile位置寫入到新pfile內,重啟例項。

[oracle@rac02 dbs]$ vim initcjcdb2.ora
###SPFILE='+DATA/cjcdb/spfilecjcdb.ora'
SPFILE='+DATA/cjcdb/spfile/spfilecjcdb.ora'

歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!!!

Oracle RAC修改引數檔案位置

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

相關文章