我们知道在dataguard12.2 以前的版本,如果修改primary SYS用户的口令时,不能只使用alter user 命令,同时还要手工将primary端的密码文件拷贝至standby端。否则,log传输会报下面错误:
ORA-16191 Primary log shipping client not logged on standby
当我们使用SYS 用户以remote login方式认证登录数据库并传输redo日志时, primary和standby两端的SYS用户口令必须一致。
由于standby数据库始终处于mount或readonly状态,所以其不能执行primary传递过来的“grant sysdba to x” 命令,这就是为什么我们需要手工拷贝密码文件的原因。
一. 12.2以下版本 dataguard环境
a) pirmary 端更改sys用户密码
SQL>alter user sys identified by oracle123;
b) 需要手工将primary端密码文件拷贝至standby端的Home目录下
$scp $ORACLE_HOME/dbs/orapw<primary_sid> oracle@<standby_host>:<$ORACLE_HOME>/dbs/
c) 拷贝所有(如果是RAC配置)standby端的密码文件后,按standby SID更改成对应的名字
mv $ORACLE_HOME/dbs/orapw<primary_sid> $ORACLE_HOME/dbs/orapw<standby_sid>
二. 12.2 版本dataguard环境
12.2版本由于有了这个新特性,当我们在primary更改 SYS,SYSDG等用户口令后,它会自动传递到所有的standby端database的配置信息里,自动同步到所有standby端的所有密码文件中。