适用范围
本文档描述适用于12.1版本及以上
所有平台
问题概述
在搭建12C ADG的过程中,主库alert日志报以下错误
Tue 0ct 10 20:05:31 2023
Errors in file /xxdb/ordb/oracle/product/diag/xx/xx/xx2/trace/xx2_arc2_53921.trc:
ORA-16191: Primary log shipping client not logged on standby
PING(ARC2]: Heartbeat failed to connect to standby 'pygzcdb stb'. Error is 16191.
Tue 0ct 10 20:06:41 2023Errors in file /xx/ordb/oracle/product/diag/rdbms/xx/xx/trace/xx_arc2_53921.trc:
ORA-01017: invalid username/password; logon denied
Tue Oct 1028:86:41 2023
Error 1017 received logging on to the standby
----------------------------------------------------------------------------------------------
Check that the primary end standby are using a password file
and renote login passwordfile is set to SHAPED or EXCLUSIVEand
and that the SYS password is sane in the password files.
returning error ORA-16191
从以上报错可以看出,报错的原因是用户密码错误导致主库连接standby库失败引起的。
问题处理
2.1、主库通过sys用户测试连接
在主库使用sys用户连接主库,命令如下:
Sqlplus sys/xxxx@xxx as sysdba
使用sys连接备库正常,可以正常登录到备库,但是alert日志仍然持续报ORA-16191、ORA-01017错误
2.2、检查主备ADG参数设置
检查主备库的参数设置,未发现问题。
2.3、重新创建密码文件
忽略密码大小写的方式重新创建密码文件
orapwd file=orapwtest password=xxxxxx entries=10 force=y ignorecase=y
ignorecase=n创建方式也尝试了,问题依旧
禁用/启用链路
alter system set LOG_ARCHIVE_DEST_STATE_2=defer;
alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE;
查询链路状态
SQL> select dest_id,error from vsarchive_dest where dest_id=2;
DEST_ID ERROR
--------------------------------------------------------------------------------------------------------------
4 0RA-16191: Primary log shipping client not logged on standby
问题依旧。在主库使用sys明明可以正常登录standby库,但是依然报0RA-16191,ORA-01017错误。难道不是使用的sys用户登录的standby库?
解决方案
默认情况下搭建ADG的时候,都是使用的sys进行的redo传输,通过redo_transport_user参数可以定义传输redo的用户。在主库查询该参数
Show parameter redo_transport_user;
查询后发现该参数设置了值,指定了其他用户,切主库中该用户不存在。问题的原因找到了。
主库中设置了redo_transport_user参数,定义了其他用户进行redo传输,而该用户主库中不存在,导致主库连接standby失败,alert持续报ORA-16191,ORA-01017错误。
主备库没有使用sys用户传输redo,所以sys即使能正常连接,依然报错。
重置redo_transport_user参数,使用sys用户进行redo传输
或
创建redo_transport_user参数指定的用户,并附加sysdba或sysoper权限
注意:
如果使用创建用户方式还需要注意sec_case_sensitive_logon参数。如果该参数设置为false,ADG同步依然会报错。
sec_case_sensitive_logon测试
sec_case_sensitive_logon参数设置为false
SQL> alter user system identified by oracle;
SQL> alter user system identified by oracle;
用户已更改。
SQL> show parameter sec_case_sensitive_logon;
NAME TYPE VALUE
sec_case_sensitive_logon boolean FALSE
SQL> conn system/oracle
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝sec_case_sensitive_logon参数设置为false设置为true
SQL> alter system set sec_case_sensitive_logon=true;
系统已更改。
SQL> conn system/oracle
已连接。连接正常
sys用户不受该参数限制
SQL> alter system set sec_case_sensitive_logon=false;
SQL> alter user sys identified by oracle;
用户已更改。
SQL> show parameter sec_case;
NAME TYPE VALUE
sec_case_sensitive_logon boolean FALSE
[oracle@testdb-v2 admin]$ sqlplus sys/oracle@CDB12 as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on 星期一 10月 9 01:19:35 2023
Copyright © 1982, 2016, Oracle. All rights reserved.
连接到:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit ProductionSQL>
show parameter sec_case_sensitive_logon;
NAME TYPE VALUE
sec_case_sensitive_logon boolean FALSE
参考文档
ORA-16191 ORA-01017 on logical standby (Doc ID 2497091.1)
ORA-16191 ORA-01017 and ORA-16000 shipping the logs to Standby database (Doc ID 2129339.1)
Log Shipping Not Happening due to ORA-01017: invalid username/password; logon denied (Doc ID 2725034.1)
ORA-16191: Primary Log Shipping Client Not Logged On Standby Error in Dataguard Environment after SYS Password Change (Doc ID 2420498.1)
Troubleshooting ORA-16191 and ORA-1017/ORA-1031 in Data Guard Log Transport Services or Data Guard Broker (Doc ID 1368170.1)
Data Guard Standby Database log shipping failing reporting ORA-01031 and Error 1017 when using Redo Transport User (Doc ID 1542132.1)