ORA-16191: Primary log shipping client not logged on standby

ORA-16191: Primary log shipping client not logged on standby

𝓓𝓸𝓷 Lv6

一、故障描述

一套Oracle11g 11.2.0.4 DG环境,主备不同步,日志无法传输到备库,主库提示错误: ORA-16191: Primary log shipping client not logged on standby

二、检查主库

1.检查主库归档目录状态
1
2
3
4
5
6
SQL> set linesize 500 pagesize 500
SQL> select status,error,synchronized,gap_status from v$archive_dest_status where dest_id=2;

STATUS ERROR SYN GAP_STATUS
--------- ----------------------------------------------------------------- --- ------------------------
ERROR ORA-16191: Primary log shipping client not logged on standby NO RESOLVABLE GAP
2.检查主库告警日志
1
2
3
4
5
6
7
8
9
$ tail -200f alert_gdszyyj.log

Thu Jul 10 09:15:22 2025
Error 1017 received logging on to the standby
------------------------------------------------------------
Check that the primary and standby are using a password file
and remote_login_passwordfile is set to SHARED or EXCLUSIVE,
and that the SYS password is same in the password files.
returning error ORA-16191

三、原因

在Oracle9i/10g/11g Data guard环境下,使用alter user sys identified by xxx 修改sys帐号密码,主库的密码更新不会自动同步至备库。

Oracle Dataguard环境的日志传输安全机制依靠Oracle的密码文件,因此在Oracle 11g DG 环境中修改sys用户密码需要两种方式:

  • 主库用alter user命令修改sys密码,将主库密码文件传至备库并覆盖备库密码文件

  • 主库使用orapwd生成新密码文件

四、解决方法(一)

1.主库修改sys密码

alter命令修改sys密码后,会自动刷新密码文件

1
alter user sys identified by "sr_9rmOl3ydK";
2.将主库密码文件传输至备库
1
2
$ cd $ORACLE_HOME/dbs
$ scp orapwgdszyyj 192.168.1.19:`pwd`
3.重命名备库密码文件
1
2
3
4
5
6
(1) 备份备库旧的密码文件
$ cd $ORACLE_HOME/dbs
$ mv orapwdggdszyyj orapwdggdszyyj.bak

(2) 将传过来的主库密码文件重命名为备库密码文件
$ mv orapwgdszyyj orapwdggdszyyj
4.备库开启日志应用

如果备库日志应用已终止,则手工开启日志应用

1
alter database recover managed standby database disconnect;

六、验证

五、解决方法(二)

本次直接使用orapwd生成新密码文件

1.确认拥有sysdbasysoper的用户
1
2
3
4
5
SQL> select * from v$pwfile_users;

USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE
2.主库创建密码文件

主库需要重启,新的密码才能生效

1
2
3
4
5
6
7
8
9
10
(1) 备份旧的密码文件
$ cd $ORACLE_HOME/dbs

(2) 创建新的密码文件
$ cp orapwgdszyyj orapwgdszyyj.bak
$ orapwd file=$ORACLE_HOME/dbs/orapwgdszyyj password=sr_9rmOl3y$K entries=5 force=y

(3) 重启数据库
SQL> shutdown immediate
SQL> startup
3.将主库密码文件传输至备库
1
2
$cd $ORACLE_HOME/dbs
$ scp orapwgdszyyj 192.168.1.19:`pwd`
4.重命名备库密码文件
1
2
3
4
5
6
(1) 备份备库旧的密码文件
$ cd $ORACLE_HOME/dbs
$ mv orapwdggdszyyj orapwdggdszyyj.bak

(2) 将传过来的主库密码文件重命名为备库密码文件
$ mv orapwgdszyyj orapwdggdszyyj
5.备库开启日志应用

如果备库日志应用已终止,则手工开启日志应用

1
alter database recover managed standby database disconnect;

六、验证

1.主库验证
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(1) 检查日志同步状态

SQL> set linesize 500 pagesize 500
SQL> select status,error,synchronized,gap_status from v$archive_dest_status where dest_id=2;

STATUS ERROR SYN GAP_STATUS
--------- ----------------------------------------------------------------- --- ------------------------
VALID NO NO GAP

(2) alert.log

Thu Jul 10 10:48:35 2025
ARC0: Standby redo logfile selected for thread 1 sequence 839 for destination LOG_ARCHIVE_DEST_2
LNS: Standby redo logfile selected for thread 1 sequence 840 for destination LOG_ARCHIVE_DEST_2
2.备库验证
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SQL> select process, sequence#, status, delay_mins from v$managed_standby;

PROCESS SEQUENCE# STATUS DELAY_MINS
--------- ---------- ------------ ----------
ARCH 0 CONNECTED 0
ARCH 0 CONNECTED 0
ARCH 0 CONNECTED 0
ARCH 839 CLOSING 0
RFS 0 IDLE 0
RFS 0 IDLE 0
RFS 840 RECEIVING 0
MRP0 840 WAIT_FOR_LOG 0

8 rows selected.

SQL> select SEQUENCE#,registrar,applied from v$archived_log;
3.主库SYS密码验证(可选)
1
2
3
4
5
6
7
8
9
10
11
SQL> select password from user$ where name='SYS';

PASSWORD
------------------------------
CCDFB319061353AA

SQL> select password from user$ where name='SYS';

PASSWORD
------------------------------
CCDFB319061353AA
  • Title: ORA-16191: Primary log shipping client not logged on standby
  • Author: 𝓓𝓸𝓷
  • Created at : 2025-07-10 09:27:55
  • Updated at : 2025-07-10 16:17:51
  • Link: https://www.zhangdong.me/oracle-ora-16191.html
  • License: This work is licensed under CC BY-NC-SA 4.0.
评论