下午一位压测的同事找到我说一套压测的库连接报错,报错如下图:

Oracle数据库shutdown报ORA-01031: insufficient privileg_第1张图片

要来ip和实例名登到服务器上看pmon进程还在

ps -ef |grep pmon

查看监听情况也是正常的

lsnrctl status 

这两项都没问题,尝试登录数据库,如下图:

Oracle数据库shutdown报ORA-01031: insufficient privileg_第2张图片

熟悉Oracle的同学一看这个提示信息应该就能感觉到不对,不是正常库连接的提示信息

查询数据库状态,语句执行报错如下

Oracle数据库shutdown报ORA-01031: insufficient privileg_第3张图片

语句无法执行,然后转站去看alert日志

Oracle数据库shutdown报ORA-01031: insufficient privileg_第4张图片

一直在报类似此种的信息,没有找到有效的信息,顺着日志往前找到一个关键点,16:01:45曾尝试shutdown数据库

Oracle数据库shutdown报ORA-01031: insufficient privileg_第5张图片

继续跟压测同事沟通,他们尝试下午重启数据库但报权限不足。

感觉很奇怪,shutdown库怎么会没有权限。

我也进行尝试,shutdown immediate无法执行,shutdown abort也报权限不足

Oracle数据库shutdown报ORA-01031: insufficient privileg_第6张图片

这个问题确定很奇怪,我是用sqlplus / as sysdba登录的数据库,怎么会没有权限,继续往下查

查看用户权限

image.png

这台服务器上装的是单实例,却有grid用户,感觉还是挺怪的。

从上面的输出来看oracle用户的权限和所属组是没有问题的

image.png

查看oracle文件的权限也没有问题

至此找不到什么问题了,于是转站MOS,去查是否有相关文档

找到一篇ORA-1031 While Starting An Instance As SYSDBA immediately After Applying A Patch (文档 ID 1475357.1)但与这边遇到的问题不太一致,文档的最后有一篇参考文档ORA-01031 DOING DATABASE STARTUP OR SHUTDOWN (文档 ID 1008507.6)

里面提到了TWO_TASK这个环境变量,以前数据库出问题也跟这个变量有关,于是查看环境变量没有配置这个变量

顺着这个思路我查看了整个oracle用户的环境变量找到了问题所在

Oracle数据库shutdown报ORA-01031: insufficient privileg_第7张图片

原来oracle用户中的PATH路径配置了/u01/app/11.2.0/grid/bin这个路径,权限不对

于是把.bash_profile中的PATH进行修改

重新登录oracle用户

Oracle数据库shutdown报ORA-01031: insufficient privileg_第8张图片

再次sqlplus / as sysdba登录数据库,重启,问题解决