问题
oracle启动时报错,找不到spfile文件。
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '+datadg/prod/parameterfile/spfile.273.1008592463'
ORA-17503: ksfdopn:10 Failed to open file +datadg/prod/parameterfile/spfile.273.1008592463
ORA-15056: additional error message
ORA-15173: entry 'spfile.273.1008592463' does not exist in directory 'parameterfile'
ORA-06512: at line 4
问题分析
- 但数据库是有spfile的,其他节点都可以运行。所以去asm中查看文件是否存在
su - grid # 切换用户
asmcmd # 进入asmcmd命令行模式
ASMCMD> cd '+datadg/prod/parameterfile/' # 进入报错的spfile配置文件路径
ASMCMD> ls # 查看当前spfile文件名
spfile.273.1028631305
- 查看oracle的initPROD或pfilePROD配置,我们知道,RAC环境下,使用共享的spfile的话,initPROD/pfilePROD会配置指向asm路径的配置,配置如下:
cd $ORACLE_HOME/dbs
cat initSID.ora # SID是自己数据库的实例名
SPFILE='+datadg/prod/parameterfile/spfile.273.1008592463'
可以看到文件名与asm中的spfile文件名不一致。
判断是在修改了spfile配置后,文件版本号发生了变化。所以我的理解是,每次修改spfile文件时,oracle会自动生成一个新的spfile文件,并由asm自动命名,这时文件名会发生变化,导致数据库重启时会找不到旧的。
解决方法
方法一 修改initSID.ora文件中的路径为新的路径即可,新的路径就是asm中实际文件名称。
vi initSID.ora
cat initSID.ora # SID是自己数据库的实例名
SPFILE='+datadg/prod/parameterfile/spfile.273.1008592463'
改为
cat initSID.ora # SID是自己数据库的实例名
SPFILE='+datadg/prod/parameterfile/spfile.273.1028631305'
优点:
操作简单,不易出错。
缺点:
每次修改完配置文件,spfile文件名会发生变化,重启后会报错无法启动。并且自动启动也会因为报错而终止。
方法二 为spfile.xxx.xxxxx创建别名
# 1. 创建别名
su - grid
asmcmd
mkalias +datadg/prod/PARAMETERFILE/spfile.273.1028631305 +datadg/prod/spfilePROD4.ora
# 2. 将initSID.ora文件路径指向新的别名路径
su - oracle
cd $ORACLE_HOME/dbs
vi initSID.ora
SPFILE='+datadg/prod/spfilePROD4.ora' # 配置文件内容
之后再启动数据库即可。
优点:
修改spfile文件后,别名不影响(未验证),每次修改不需要修改initSID.ora配置。