srvctl 操作数据库,报错:ORA-01017: invalid username/password; logon denied

今天搭建了一个12c的 GI restart环境做做实验,结果发现srvctl命令无法操作数据库。报错如下所示:

[oracle@12cdb ~]$ srvctl stop database -d czxxdb
PRCR-1133 : Failed to stop database czxxdb and its running services
PRCR-1132 : Failed to stop resources using a filter
ORA-01017: invalid username/password; logon denied
CRS-2675: Stop of 'ora.czxxdb.db' on '12cdb' failed
[oracle@12cdb ~]$

 

尝试用sqlplus命令来操作数据库,可以成功关闭:

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>

再次用srvctl命令启动数据库。报错如下所示:

[oracle@12cdb ~]$ srvctl start database -d czxxdb
PRCR-1079 : Failed to start resource ora.czxxdb.db
ORA-01017: invalid username/password; logon denied
CRS-5017: The resource action "ora.czxxdb.db start" encountered the following error:
ORA-01017: invalid username/password; logon denied
. For details refer to "(:CLSN00107:)" in "/u01/app/grid/diag/crs/12cdb/crs/trace/ohasd_oraagent_grid.trc".

CRS-2674: Start of 'ora.czxxdb.db' on '12cdb' failed
ORA-01017: invalid username/password; logon denied
[oracle@12cdb ~]$

然而用sqlplus命令是可以成功启动数据库。

 sqlplus 命令可以成功操作数据库,而srvctl命令不行,这说明与GI这块有关,先看看报错时生成的trace日志,错误内容如下所示:

2020-07-31 15:20:46.414997 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] InstConnection:InstConnection: init:18040460 oracleHome:/u01/app/oracle/product/12.1.0.2/dbhome_1 oracleSid:czxxdb instanceType:1 instanceVersion:12.1.0.2.0
2020-07-31 15:20:46.415065 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] clsnInstConnection::makeConnectStr UsrOraEnv ,ORACLE_BASE= m_oracleHome /u01/app/oracle/product/12.1.0.2/dbhome_1 Crshome /u01/app/12.1.0.2/grid
2020-07-31 15:20:46.415077 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] makeConnectStr = (DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=/u01/app/oracle/product/12.1.0.2/dbhome_1/bin/oracle)(ARGV0=oracleczxxdb)(ENVS='ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/dbhome_1,ORACLE_SID=czxxdb,LD_LIBRARY_PATH=,ORACLE_BASE=')(ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))')(CONNECT_DATA=(SID=czxxdb))))
2020-07-31 15:20:46.415405 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] InstAgent::stop non pool pConnxn 1 18040460
2020-07-31 15:20:46.415422 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] InstConnection::connectInt: server not attached
2020-07-31 15:20:47.464071 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] ORA-01017: invalid username/password; logon denied

2020-07-31 15:20:47.464186 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] InstConnection::connectInt (2) Exception OCIException
2020-07-31 15:20:47.464234 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] InstConnection:connect:excp OCIException OCI error 1017
2020-07-31 15:20:47.464273 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] InstAgent::stop: connect1 errcode 1017
2020-07-31 15:20:47.465072 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] InstAgent::stop: connect2 oracleHome /u01/app/oracle/product/12.1.0.2/dbhome_1 oracleSid czxxdb
2020-07-31 15:20:47.465152 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] InstConnection::connectInt: server not attached
2020-07-31 15:20:48.506430 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] ORA-01017: invalid username/password; logon denied

2020-07-31 15:20:48.506510 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] InstConnection::connectInt (2) Exception OCIException
2020-07-31 15:20:48.506540 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] InstConnection:connect:excp OCIException OCI error 1017
2020-07-31 15:20:48.506565 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] InstAgent::stop: connect2 errcode 1017
2020-07-31 15:20:48.506584 :CLSDYNAM:736093952: [ora.czxxdb.db]{0:0:673} [clean] clsnUtils::error Exception type=2 string=
ORA-01017: invalid username/password; logon denied

可以看出,系统用BEQ协议连接数据库,连接串名为makeConnectStr ,手动测试这个连接串,没有发现问题。

看样子,还是只能搜索MOS,关于ora-01070的文章一大堆,最后找到Database Creation in Oracle Restart Environment Fails With "ORA-01017: Invalid Username/password" (Doc ID 2108268.1),这篇文章提到在GI restart环境中,GI的软件属主(grid用户)要在osdba用户组(dba 组)下。

我当前的环境:

[root@12cdb ~]# id grid
uid=54322(grid) gid=54421(oinstall) groups=54421(oinstall),54330(racdba),54329(asmadmin),54327(asmdba)

可以看出grid用户不在dba组下。

 

解决办法:

# usermod -a -G dba grid

然后重新relink.

[root@12cdb ~]# su - oracle
Last login: Fri Jul 31 15:16:58 CST 2020 on pts/1
[oracle@12cdb ~]$ relink all

此时,可以正常使用srvctl命令。

[oracle@12cdb ~]$ srvctl start database -d czxxdb
[oracle@12cdb ~]$

 

为什么会出现这种问题?

突然想起来,我当前这台主机是从一套12.2.0.1 RAC环境中克隆出来的, 在12.2环境中,GI用户需要有racdba这个组,而不需要dba组,而12.2以前的环境,GI用户必须有dba组。 所以,有了这个问题。

 

posted @ 2020-07-31 08:09  石云华  阅读(841)  评论(0编辑  收藏  举报