目的:

将参数文件原位置+DATA/cjcdb/spfilecjcdb.ora修改到+DATA/cjcdb/spfile/spfilecjcdb.ora

步骤如下:

一:临时位置生成pfile注意:RAC环境下严禁使用createpfilefromspfile;会覆盖默认位置下pfile内容。SQL>createpfile='/tmp/pfilexxx.ora'fromspfile;二:新位置重新生成spfile注意:pfile和spfile都需要指定目录,SQL>createspfile='+DATA/cjcdb/spfile/spfilecjcdb.ora'frompfile='/tmp/pfilexxx.ora';三:修改pfile中spfile位置[oracle@rac01dbs]$viminitcjcdb1.ora###SPFILE='+DATA/cjcdb/spfilecjcdb.ora'SPFILE='+DATA/cjcdb/spfile/spfilecjcdb.ora'四:修改OCR中spfile位置[oracle@rac01dbs]$srvctlmodifydatabase-dcjcdb-p'+DATA/cjcdb/spfile/spfilecjcdb.ora'五:重启数据库生效逐个节点重启或同时重启都可以,根据是否可以停机来定[oracle@rac01dbs]$srvctlstopdatabase-dcjcdb[oracle@rac01dbs]$srvctlstartdatabase-dcjcdb

实验过程如下:

节点一,节点二

查看当前spfile位置

SQL>showparameterspfileNAMETYPEVALUE-----------------------------------------------------------------------------spfilestring+DATA/cjcdb/spfilecjcdb.ora

查看当前spfile位置

[oracle@rac01~]$srvctlconfigdatabase-dcjcdb-aDatabaseuniquename:cjcdbDatabasename:cjcdbOraclehome:/u01/app/oracle/product/11.2.0/db_1Oracleuser:oracleSpfile:+DATA/cjcdb/spfilecjcdb.oraDomain:Startoptions:openStopoptions:immediateDatabaserole:PRIMARYManagementpolicy:AUTOMATICServerpools:cjcdbDatabaseinstances:cjcdb1,cjcdb2DiskGroups:DATAMountpointpaths:Services:Type:RACDatabaseisenabledDatabaseisadministratormanaged

创建新位置

[root@rac01~]#su-grid[grid@rac01~]$asmcmdASMCMD>lsdgStateTypeRebalSectorBlockAUTotal_MBFree_MBReq_mir_free_MBUsable_file_MBOffline_disksVoting_filesNameMOUNTEDEXTERNN51240961048576102409974099740NARCH/MOUNTEDEXTERNN5124096104857620480186890186890NDATA/MOUNTEDNORMALN5124096104857661445218204815850YOCR/

ASMCMD>cddata/cjcdbASMCMD>mkdirspfileASMCMD>cdspfileASMCMD>pwd+data/cjcdb/spfile

新位置重新生成spfile

SQL>createpfile='/tmp/pfilexxx.ora'fromspfile;SQL>createspfile='+DATA/cjcdb/spfile/spfilecjcdb.ora'frompfile='/tmp/pfilexxx.ora';

修改pfile中spfile为新位置(节点一、节点二)

[oracle@rac01~]$cd$ORACLE_HOME/dbs[oracle@rac01dbs]$cpinitcjcdb1.orainitcjcdb1.ora.bak[oracle@rac01dbs]$viminitcjcdb1.ora###SPFILE='+DATA/cjcdb/spfilecjcdb.ora'SPFILE='+DATA/cjcdb/spfile/spfilecjcdb.ora'

[oracle@rac02~]$cd$ORACLE_HOME/dbs[oracle@rac02dbs]$cpinitcjcdb2.orainitcjcdb2.ora.bak[oracle@rac02dbs]$viminitcjcdb2.ora###SPFILE='+DATA/cjcdb/spfilecjcdb.ora'SPFILE='+DATA/cjcdb/spfile/spfilecjcdb.ora'

修改OCR中记录的spfile位置

[oracle@rac01dbs]$srvctlconfigdatabase-dcjcdb-a|grepspfileSpfile:+DATA/cjcdb/spfilecjcdb.ora[oracle@rac01dbs]$srvctlmodifydatabase-dcjcdb-p'+DATA/cjcdb/spfile/spfilecjcdb.ora'[oracle@rac01dbs]$srvctlconfigdatabase-dcjcdb-a|grepspfileSpfile:+DATA/cjcdb/spfile/spfilecjcdb.ora

重启数据库

[oracle@rac01dbs]$srvctlstopdatabase-dcjcdb[oracle@rac01dbs]$srvctlstartdatabase-dcjcdb

查看spfile参数值

[oracle@rac01dbs]$srvctlconfigdatabase-dcjcdb-a|grepspfileSpfile:+DATA/cjcdb/spfile/spfilecjcdb.oraSQL>showparameterspfileNAMETYPEVALUE-----------------------------------------------------------------------------spfilestring+DATA/cjcdb/spfile/spfilecjcdb.ora

参见问题:

问题一:需要执行srvctlmodify修改ocr中参数文件位置,否则通过srvctl重启数据库后,参数文件位置不变。例如:重启数据库节点一和节点二

SQL>ShutdownimmeidateSQL>startup

通过show parameter方式查看spfile位置已经修改成功

SQL>showparameterspfileNAMETYPEVALUE-----------------------------------------------------------------------------spfilestring+DATA/cjcdb/spfile/spfilecjcdb.ora

通过 srvctl config 命令查看参数文件位置修改失败

[oracle@rac01dbs]$srvctlconfigdatabase-dcjcdb-aDatabaseuniquename:cjcdbDatabasename:cjcdbOraclehome:/u01/app/oracle/product/11.2.0/db_1Oracleuser:oracleSpfile:+DATA/cjcdb/spfilecjcdb.oraDomain:Startoptions:openStopoptions:immediateDatabaserole:PRIMARYManagementpolicy:AUTOMATICServerpools:cjcdbDatabaseinstances:cjcdb1,cjcdb2DiskGroups:DATAMountpointpaths:Services:Type:RACDatabaseisenabledDatabaseisadministratormanaged

通过srvctl重启数据库

[root@rac01bin]#./srvctlstopdatabase-dcjcdb[root@rac01bin]#./srvctlstartdatabase-dcjcdb

参数文件位置完全变为原值

SQL>showparameterspfileNAMETYPEVALUE-----------------------------------------------------------------------------spfilestring+DATA/cjcdb/spfilecjcdb.ora

查看pfile里修改的值也变回原值

[oracle@rac01dbs]$catinitcjcdb1.ora###SPFILE='+DATA/cjcdb/spfilecjcdb.ora'SPFILE='+DATA/cjcdb/spfilecjcdb.ora'#lineaddedbyAgent

问题二:两个节点spfile位置不一致

例如实例一spfile在ASM磁盘组内,实例二spfile在本地文件系统上($ORACLE_HOME/dbs)可以在实例二上创建新的pfile,将ASM上spfile位置写入到新pfile内,重启实例。

[oracle@rac02dbs]$viminitcjcdb2.ora###SPFILE='+DATA/cjcdb/spfilecjcdb.ora'SPFILE='+DATA/cjcdb/spfile/spfilecjcdb.ora'

欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!