起因
之前通过rman将一台生产库恢复到了另外一台服务器上。今天使用sys用户连接数据库时,一直报用户名密码错误,后台通过sys / as sysdba登录服务器之后,使用alter user sys identified by newpassword修改密码之后依然不能使用密码登录数据库,因此才有如下解决方式。
原因是因为数据库回复后并没有生成对应的密码文件,因此sys用户无法作为sysdba登录,在开始之前需要先检查数据库的remote_login_passwordfile参数为exclusive,这也是oracle数据库的默认值。
检查方式如下:
|
|
VALUE值为EXCLUSIVE即可
关于密码文件:
- oracle官网解释说在用DBCA创建数据库对的时候会自动创建密码文件,所以用DBCA创建的数据库一般是没问题的,但是我这次是用rman恢复的实例,不知道是否我原库是RAC的原因,恢复完之后并没有密码文件
- 具有管理员权限的角色(
SYSDBA
,SYSOPER
,SYSBACKUP
,SYSDG
, orSYSKM
)都会通过密码文件进行验证,而不是通过数据库来进行验证,但前提是该用户在数据库中存在。 - 密码文件中保存的密码是区分大小写的
- RAC的密码文件是保存在ASM磁盘中的
解决方案
重建密码文件即可,其中密码文件的路径为$ORACLE_HOME/dbs/orapw$instance_name
其中最后的文件名必须是orapw与instance_name拼接起来的名字,假设这里的instance_name为TEST
使用如下命令重建密码文件
|
|
重建之后即可正常使用密码登录sys了,其中password指定的就是sys的密码
验证密码文件是否生效可登陆数据库后同若如下命令验证
|
|
如果密码文件没生效,则查出的结果为空,如果密码生效了,则查出的是记录在密码文件中的用户,默认仅有SYS用户。