这篇文章的动力来自于一个朋友的提问,他问我备库的密码文件直接重建可以吗,我说最好还是复制,如果重建可能会有一些潜在的问题,当然这个所谓潜在问题也是自己给自己打的马虎眼,到底哪里有问题,脑海里搜索了一番似乎没有找到什么有效的信息,但是隐隐之中感觉搭建dataguard好像还从来没有直接重建密码文件的时候,似乎是一种非常规的方式,但是转眼一想一旦发生这种情况的时候,或者密码文件出现了一些潜在问题的时候,怎么有效防范,这个问题就又上升了一个高度,所以我对这个问题做了一些初步的分析,然后在网上竟然看到还真有一些技术大拿对这类看起来细节问题做了深入的解析,我想我就不用再重新写了,直接把他的成果拿过来分享给大家。
这篇文章会提到另外一个问题:在dataguard环境中,对于密码文件的维护管理有什么特别注意的地方吗?
答案是肯定的,在Data Guard环境中更新密码文件并没有想象的那样简单。在会基于这个问题得
我们首先看看我的当前dataguard配置情况,然后再来深入密码文件的一些细节过程。
DGMGRL> show configuration;
Configuration - PeppiEnKokki
Protection Mode: MaxPerformance
Databases:
peppi - Primary database
kokki - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
这个输出可以看到当前存在一个主库peppi,一个物理备库kokki,dataguard环境整体的状态是success.
特别需要说明的是peppi在host pruster,kokki运行在el5上
提出问题
第一个问题是:如果在主库的密码文件做了变更,是否会传播到备库去?我们可以在主库peppi中进行简单的验证,即在主库更新密码文件,然后在备库kokki中查看密码文件的情况。
SQL> connect sys/oracle@peppi as sysdba
Connected.
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE
当前主库peppi所在的密码文件只存在一条记录,如果赋予sysdba给system用户会触发密码文件的更新
SQL> grant sysdba to system;
Grant succeeded.
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE
SYSTEM TRUE FALSE FALSE
这样,主库的密码文件中就会存在两条记录了,那么在备库中存在几条记录呢?
SQL> connect sys/oracle@kokki as sysdba
Connected.
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE
这个输出很清晰地看出主库的密码文件变更并没有传输到备库
然后我们收回system的sysdba权限,因为我们还是不希望system的权限过于宽泛?
SQL> connect sys/oracle@peppi as sysdba
Connected.
SQL> revoke sysdba from system;
Revoke succeeded.
这样对dataguard会有影响吗?
接下来的问题是: 这样对dataguard是否有影响?主库到备库的redo传输需要通过密码文件中的sys用户密码来进行认证,如果在主库配置了其它的sysdba用户也可以,但问题是主库的redo传输是通过密码文件像sys一样的用户来作为认证基础的,一旦主库加密后的密码和备库不一致,那么redo传输就会有麻烦。
?如果需要验证这个问题,可以通过修改peppi中的sys密码,然后看看是如何影响kokki的。
SQL> alter user sys identified by prutser;
User altered.
SQL> connect sys/prutser@peppi as sysdba
Connected.
SQL> connect sys/prutser@kokki as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to Oracle.