备库的账号状态显示是open的,但是连接显示ORA-28000
问题:
Dataguard环境里面,明明在primary已经unlock了账号,并且检查账号在primary和standby都是unlock状态,但是当你远程登录备库的时候就会抛出28000的错误
原因:
1)在备库,如果登录失败了n次之后,接下来就会抛出ORA-28000。如果接下来你把备库重启了,那么账号的状态就会显示为open。
这是因为备库的账号状态会保持和SYS.USER_ASTATUS_MAP一致。
但是因为这是只读的备库,所以是这个表也是从主库同步过来的。
因为主库并没有遇到多次登录尝试失败的情况,所以主库的账号还是显示open的,因此一旦备库重启,数据库就会重新从这里获取表的状态,也就是这个账号还是open的(从primary获取)。
这也就是为什么重启备库后就不会再抛出ORA-28000的原因
2)当你尝试登陆备库,遇到ORA-28000的时候,如果你去检查dba_users表的account_status列,你看到的还是这个账号是OPEN的,实际上不是。
这是因为尝试失败后,虽然账号被锁住,但是因为备库的数据只能和主库同步,所以它是不会被更新的。
注意:你在备库尝试alter user XXX account unlock 是不会成功的,数据库会告诉你账号的状态是和主库同步的,所以只能到主库解锁。