起因:
RAC-RAC DG 12c rac.
你好 oracle 12c rac 主库用户权限为sysdba
同步过去的备库用户无sysdba权限(该用户已同步)
涉及SQL:
select sysdba from V$PWFILE_USERS where USERNAME=‘C##DBRA’;
no row select
询问创建用户以及授权语句如下:
create user c##dbra identified by dbra;
grant connect,resource,dba to c##dbra container=all;
grant sysdba to c##dbra container=all;
分析:
1.检查主备同步情况,主备正常同步,主库创建用户备库正常同步创建.
2.观察权限,将权限进行拆分进行测试.
首先测试connect,resource权限:
主库创建c##dbra1用户:
create user c##dbra1 identified by dbra;
备库c##dbra1用户同步创建:
SQL> select username from dba_users where username='C##DBRA1';
USERNAME
--------------------------------------------------------------------------------
C##DBRA1
在备库连接c##dbra1用户.
conn c##dbra1/dbra
(因为该用户属于新建用户,不具备connect权限,因为是无法连接的,所以连接失败)
在主库赋予c##dbra1用户connect,resource权限
grant connect,resource to c##dbra1 container=all;
在备库再次尝试连接c##dbra1
conn c##dbra1/dbra
成功连接。
根据以上测试可以确定,权限同步没有问题.
其次对sysdba权限再次进行测试
create user c##dbra2 identified by dbra;
grant sysdba to c##dbra2 container=all;
主库:
select sysdba from V$PWFILE_USERS where USERNAME='C##DBRA2';
SYSDB
-----
TRUE
备库:
select sysdba from V$PWFILE_USERS where USERNAME='C##DBRA2';
no row select
那么问题就出现在sysdba权限上.
原因定位:
给某个用户赋予sysdba权限后,会将该用户记录到密码文件和v
p
w
f
i
l
e
u
s
e
r
s
中
v
pwfile_users中 v
pwfileusers中vpwfile_users也是通过读取密码文件获取.
备库无法将sysdba权限同步到密码文件中.所以会出现以上情况.
解决办法:
从主库重新同步一份密码文件到备库,问题即可解决.在12c中是具备密码文件自动同步的特性.但是不知道为何没有生效.
12c密码文件自动同步特性:
集群同步密码文件方式:
Oracle RAC密码文件管理