环境: oracle linux 6.6 12.2 oracle restart 安装在grid用户 12.2 oracle db 安装在oracle用户 orcl物理备库 现象: 使用srvctl启动数据库实例时报错,查看数据库日志被强制终止了;使用sqlplus启动正常。
[oracle@oel66-12201-notrac trace]$ srvctl start database -db orcl PRCR-1079 : Failed to start resource ora.orcl.db CRS-2674: 未能启动 'ora.orcl.db' (在 'oel66-12201-notrac' 上) [oracle@oel66-12201-notrac trace]$
ohasd_oraagent_grid.trc日志中的报错为:
2020-12-19 16:31:20.021 :CLSDYNAM:782976768: [ora.orcl.db]{0:0:1008} [check] GIMH: GIM-00104: Health check failed to connect to instance.
GIM-00090: OS-dependent operation:open failed with status: 13
GIM-00091: OS failure message: Permission denied
GIM-00092: OS failure occurred at: sskgmsmr_7
2020-12-19 16:31:20.021 :CLSDYNAM:782976768: [ora.orcl.db]{0:0:1008} [check] (:CLSN00007:) DbAgent::checkCbk 100 failed gimh state[0]Abnormal Termination
2020-12-19 16:31:20.022 :CLSDYNAM:782976768: [ora.orcl.db]{0:0:1008} [check] DbAgent:checkCbk 400 planned offline or failed ret 5
从日志中可以看到,是权限不足,但是具体是什么文件的权限不足,这里没有看不出来。 解决: srvctl启动数据库实例,实际上是oraagent.bin这个代理进程在执行启动数据库实例的操作,所以用strace来跟踪 oraagent.bin的核内调用,通过strace的日志来分析是哪个文件的权限不足。
[grid@oel66-12201-notrac ~]$ ps -ef | grep oraagent.bin | grep -v grep grid 6113 1 0 15:38 ? 00:00:20 /u01/app/12.2.0/grid/bin/oraagent.bin [grid@oel66-12201-notrac ~]$ strace -f -F -p 6113 -o oraagnet.strace ################################### # srvctl 启动数据库 [oracle@oel66-12201-notrac trace]$ srvctl start database -db orcl PRCR-1079 : Failed to start resource ora.orcl.db CRS-2674: 未能启动 'ora.orcl.db' (在 'oel66-12201-notrac' 上) [oracle@oel66-12201-notrac trace]$
在oraagnet.strace文件中搜索Permission denied,可以看到是$ORACLE_HOME/dbs/hc_orcl.dat文件的权限不足,通过比对正常数据库的此文件发现,文件的属组为dba,正常应该为asmadmin。 $ORACLE_HOME/dbs/hc_orcl.dat文件的属组修改为 asmadmin后,使用srvctl能够正常启动数据库实例。 因为此环境为测试环境,经常直接关闭虚拟机,或者直接shutdown abort,主备切换等操作,所以没办法分析 $ORACLE_HOME/dbs/hc_orcl.dat属组改变的原因。
