Si jamais vous avez besoin d'ajouter des modifications sur les comptes des utilisateurs dans un environnement DataGuard, dans mon cas, j'essaie d'ajouter un compte "evta" avec le rôle "sysdba"
Primaire :
==========
SQL> CREATE USER EVTA IDENTIFIED BY EVTA ;
SQL> GRANT CREATE SESSION TO EVTA ;
SQL> GRANT SYSDBA TO EVTA ;SQL> SELECT * FROM V$PWFILE_USERS;
USERNAME SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM CON_ID
---------- ----- ----- ----- ----- ----- ----- ----------
SYS TRUE TRUE FALSE FALSE FALSE FALSE 0
EVTA TRUE FALSE FALSE FALSE FALSE FALSE 0
Dans ce cas la création du compte sera synchronisé vers le Standby, cependant si nous faisons une vérification de la vue v$pwfile_user, nous ne verrons pas les mêmes modifications.
Standby :
==========
SQL> SELECT * FROM V$PWFILE_USERS;
USERNAME SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM CON_ID
---------- ----- ----- ----- ----- ----- ----- ----------
SYS TRUE TRUE FALSE FALSE FALSE FALSE 0
Malheureusement, si nous essayons de faire la modification sur le serveur Standby, une erreur apparaîtra.
Standby :
==========
SQL> grant sysdba to evta ;
grant sysdba to evta
*
ERROR at line 1:
ORA-16000: database or pluggable database open for read-only access
Standby :
==========
USERNAME SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM CON_ID
---------- ----- ----- ----- ----- ----- ----- ----------
SYS TRUE TRUE FALSE FALSE FALSE FALSE 0
Malheureusement, si nous essayons de faire la modification sur le serveur Standby, une erreur apparaîtra.
Standby :
==========
SQL> grant sysdba to evta ;
grant sysdba to evta
*
ERROR at line 1:
ORA-16000: database or pluggable database open for read-only access
SQL> select name, open_mode, database_role from v$database ;
NAME OPEN_MODE DATABASE_ROLE
--------- -------------------- ----------------
DBAD READ ONLY WITH APPLY PHYSICAL STANDBY
NAME OPEN_MODE DATABASE_ROLE
--------- -------------------- ----------------
DBAD READ ONLY WITH APPLY PHYSICAL STANDBY
La solution ?
Copier le orapwd de la base de données primaire vers le standby, après ça...
Standby :
==========
==========
SQL> SELECT * FROM V$PWFILE_USERS;
USERNAME SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM CON_ID
------------ ----- ----- ----- ----- ----- ----- ----------
SYS TRUE TRUE FALSE FALSE FALSE FALSE 0
EVTA TRUE FALSE FALSE FALSE FALSE FALSE 0
et voilà.