Oracle-srvctl 启动关闭数据库报ORA-01017问题

问题背景:

        接同事问题协助,在对用户的RAC集群数据库进行修改参数重启操作时,发现使用集群的srvctl工具去关闭或者启动数据库时出现ORA-01017: invalid username/password; logon denied报错,无法通过srvctl工具去启动关闭数据库,但手动的通过sqlplus工具去启动关闭数据库可以正常的完成

问题分析:

        使用srvctl工具去关闭启动数据库,会发送请求到集群的crsd进程,crsd进程会转发通过oracle oraagent进程去执行相关的关闭启动数据库操作,查看oraagent_oracle的相关日志文件,可以看到日志一直在持续的报ORA-01017: invalid username/password; logon denied的错误,此外没有其他额外的报错信息

        oraagent管理数据库是通过sys用户的操作系统身份证SS_DBA_GRP组去登录的,如果用户的dba组缺失,也会导致用户使用操作系统身份认证登录出现ORA-01017的报错,检查grid,oracle用户的权限是否正常,当前数据库软件定义SS_DBA_GRP为dba组,CRS软件定义SS_DBA_GRP为asmdba组,两个用户都加入了上述的组,权限配置没有问题

        检查数据库软件以及CRS软件的sqlnet.ora配置,如果sqlnet.ora配置了SQLNET.AUTHENTICATION_SERVICES=none禁用操作系统身份认证,也会导致出现登录报ORA-01017问题,禁用操作系统身份认证操作在安全等保整改时经常被错误操作

        同事一检查果然在CRS软件的$ORACLE_HOME/network/admin/sqlnet.ora

配置文件里面发现了禁用操作系统身份认证配置SQLNET.AUTHENTICATION_

SERVICES=none,让同事把参数去掉,再重新尝试srvctl去启动关闭数据库,本以为去了参数就能恢复,没想到同事反馈还是不行,去掉参数之后报错依旧

        查了一下Oracle mos上面类似的相关案例,发现有这样的描述,oraagent是通过beq方式去访问数据库,进程在启动的时候会读取CRS安装目录下的sqlnet.ora配置文件里面的SQLNET.AUTHENTICATION_SERVICES参数配置

        这一段描述给了我一个解决问题的方向,推测是不是oraagent进程里面读取到的参数值还是禁用操作系统认证的none选项,虽然现在sqlnet.ora里面已经注释了参数,但oraagent进程其实里面SQLNET.AUTHENTICATION_SERVICES参数依然还是none值

        为了验证我的猜想,我在自己的11.2.0.4 RAC集群测试环境进行了如下的实验

        在一套正常运行的RAC集群,在CRSD安装目录下的sqlnet.ora里面添加了参数SQLNET.AUTHENTICATION_SERVICES=none禁用操作系统认证,添加完之后通过srvctl关闭启动数据库没有受到影响,可以正常执行,oraagent的后台日志也没有出现ORA-01017的报错

SQLNET.AUTHENTICATION_SERVICES = (NONE)

        然后单独把oraagent进程通过kill -9方式重启,只重启oraagent进程,其他集群组件没有操作,重启之后出现了一模一样的错误现象,oraagent开始出现大量的ORA-01017报错,通过srvctl关闭启动数据库也出现ORA-01017报错,删除sqlnet里面的禁用操作系统认证none配置之后,报错依旧,问题同样无法被解决,最后通过kill -9方式再次把oraagent进程重启之后,问题才恢复正常

        通过上述测试我们可以确认oraagent在启动的时候会读取CRS安装目录下的sqlnet.ora里面的SQLNET.AUTHENTICATION_SERVICES参数配置,而且仅在进程启动的时候才会读取,进程不会实时的动态读取参数,即使修改了sqlnet.ora的参数配置,进程也不会重新读取参数,要想让oraagent进程重新读取sqlnet.ora的配置参数,只有让进程重启才能读取

问题解决:

        知道ORA-01017问题的原因之后,让同事通过kill -9方式对oraagent进行重启,单独的kill -9 oraagent进程并不会影响集群,oraagent进程重启之后,问题得到解决,srvctl启动关闭数据库操作恢复正常,日志也没有再出现ORA-01017的报错

--查询oracle oraagent的pid
$ ps -ef |grep -i oraagent|grep -i oraagent.bin |grep -i oracle |grep -v grep
oracle    39629      1  0 16:17 ?        00:00:05 /u01/app/11.2.0/grid/bin/oraagent.bin
--kill pid重启oraagent进程
$ kill -9 39629

相关推荐

  1. 笔记:12.1 使用sqlplus /as sysdba登录ORA-01017

    2024-01-29 09:34:01       40 阅读
  2. 笔记:oracleORA-55941

    2024-01-29 09:34:01       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-29 09:34:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-29 09:34:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-29 09:34:01       82 阅读
  4. Python语言-面向对象

    2024-01-29 09:34:01       91 阅读

热门阅读

  1. 上线服务器流程用法及说明

    2024-01-29 09:34:01       59 阅读
  2. Anaconda中安装包下载超时

    2024-01-29 09:34:01       61 阅读
  3. G1与ZGC

    G1与ZGC

    2024-01-29 09:34:01      66 阅读
  4. 第二百九十三回

    2024-01-29 09:34:01       62 阅读
  5. 【leetcode100-074/075/076】【堆】三题合集

    2024-01-29 09:34:01       52 阅读
  6. 【力扣经典面试题】合并两个有序数组

    2024-01-29 09:34:01       58 阅读
  7. 算法提升——LeetCode382 场周赛总结

    2024-01-29 09:34:01       50 阅读
  8. go语言基础strconv类型转换

    2024-01-29 09:34:01       62 阅读
  9. 【身份验证和授权比较】

    2024-01-29 09:34:01       54 阅读
  10. shell 函数与数组

    2024-01-29 09:34:01       46 阅读
  11. PiflowX组件-FileRead

    2024-01-29 09:34:01       60 阅读