最近一直在搞自动化开发,说是开发,实际就是搞一些脚本。但我还是围绕着数据库来去做这些工作。
先说说场景
当前正在做针对ADG环境的自动切换工具,工具由python编写,通过cx_Oracle包实现,现在已经完全打通了,可以做到切换同时多套库,如果有新环境需要用工具切换,那么也只需要将其填入到配置文件中即可实现。
连接数据库的用户是一个专用用户,需要具备的权限为:connect
,resource
,dba
,sysdba
,前几个权限正常赋权,可sysdba这个后来发现是有问题的。
遇到的问题
遇到ORA-01017报错,很容易想到的是用户或密码错误导致的。开始我也是这么想的,而且也是逐步排查了以下几点:
- 用户是否区分大小写?这是11g有个参数,可以开是否区分大小写
SEC_CASE_SENSITIVE_LOGON=true
,默认是开启的。
|
|
我们可以通过密码版本来观察用户的密码情况,10g是不区分大小写,不受SEC_CASE_SENSITIVE_LOGON影响,11g以上是区分的。
- 密码中是否有特殊符号?
我反复尝试了不同类型的密码,发现并不是密码的问题,因为改成最普通的只包含英文字符的密码也无法连接!
解决思路
其实也没有太好的办法,网上找了不少文章来看,然后不断地尝试。
python连接数据库
|
|
二者区别就在于第二种有个sysdba,因此我怀疑是SYSDBA权限的问题,主库已经是赋权sysdba的了,但从库我认为是可以自动同步过去的。后来把dsn换成不同的实例,发现主库是可以连,而从库一直报'ORA-01017',至此,我知道问题应该出现sysdba不同步上了。
疑问
那为什么sysdba没有主从同步?可以通过Oracle Support找到答案。