rebuild oracle password file

起因

之前通过rman将一台生产库恢复到了另外一台服务器上。今天使用sys用户连接数据库时,一直报用户名密码错误,后台通过sys / as sysdba登录服务器之后,使用alter user sys identified by newpassword修改密码之后依然不能使用密码登录数据库,因此才有如下解决方式。

原因是因为数据库回复后并没有生成对应的密码文件,因此sys用户无法作为sysdba登录,在开始之前需要先检查数据库的remote_login_passwordfile参数为exclusive,这也是oracle数据库的默认值。

检查方式如下:

1
SQL> show parameter remote_login_passwordfile

VALUE值为EXCLUSIVE即可

关于密码文件:

  1. oracle官网解释说在用DBCA创建数据库对的时候会自动创建密码文件,所以用DBCA创建的数据库一般是没问题的,但是我这次是用rman恢复的实例,不知道是否我原库是RAC的原因,恢复完之后并没有密码文件
  2. 具有管理员权限的角色(SYSDBA, SYSOPER, SYSBACKUP, SYSDG, or SYSKM)都会通过密码文件进行验证,而不是通过数据库来进行验证,但前提是该用户在数据库中存在。
  3. 密码文件中保存的密码是区分大小写的
  4. RAC的密码文件是保存在ASM磁盘中的

解决方案

重建密码文件即可,其中密码文件的路径为$ORACLE_HOME/dbs/orapw$instance_name

其中最后的文件名必须是orapwinstance_name拼接起来的名字,假设这里的instance_name为TEST

使用如下命令重建密码文件

1
$ orapwd file="$ORACLE_HOME/dbs/orapwTEST" password=testtest

重建之后即可正常使用密码登录sys了,其中password指定的就是sys的密码

验证密码文件是否生效可登陆数据库后同若如下命令验证

1
SQL> select * from v$pwfile_users;

如果密码文件没生效,则查出的结果为空,如果密码生效了,则查出的是记录在密码文件中的用户,默认仅有SYS用户。