使用sys用户已sysdba身份登陆数据库时,如果是在数据库本地登陆,则不必使用口令文件,如果需要以dba身份远程登陆数据库,则必须配置口令文件,而且数据库配置参数remote_login_passwordfile值不能为none。在使用orapwd创建密码文件后是否立即生效,网络上有说需要重启数据库才能生效,也有说不需要的,做个实验验证一下。
1 检查数据库配置参数,不能为none
SQL> show parameter pass
NAME TYPE VALUE
remote_login_passwordfile string EXCLUSIVE
这里的参数是EXCLUSIVE,符合远程登录的条件
2 检查ORACLE_HOME/dbs目录下没有口令文件
[oracle@orclserv1 dbs]$ pwd
/u01/app/oracle/product/11.2.0/db_1/dbs
已经进入到ORACLE_HOME/dbs目录下
[oracle@orclserv1 dbs]$ ls -l
total 16
-rw-rw----. 1 oracle oinstall 1544 Jul 20 19:59 hc_orcl11g.dat
-rw-r--r--. 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r-----. 1 oracle oinstall 24 Jun 22 22:20 lkORCL11G
-rw-r-----. 1 oracle oinstall 2560 Jul 20 20:00 spfileorcl11g.ora
可以看到这个目录下没有口令文件
3 使用sys用户以连接字符串形式登陆数据库
[oracle@orclserv1 admin]$ sqlplus sys/sys123@orcl11g as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Sat Jul 20 20:04:26 2019
Copyright (c) 1982, 2013, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
数据库里设置的sys密码是sys123,可以看到,虽然我们输入的密码是正确的,登陆依然被拒绝,显示无效的用户名和密码
4 在dbs目录下使用orapwd命令创建密码文件,oracle对密码文件的命名有要求,在创建密码文件时一定要符合密码文件的命名要求,否则,创建的密码文件无法被应用,具体的要求技术文件名为orapw$实例名,密码设置为现有sys密码
[oracle@orclserv1 dbs]$ orapwd file=orapworcl11g password=sys123
创建密码后在查看一下当前目录的内容,可以看到,当前目录下已经有了一个名字为orapworcl11g的文件,orcl11g是数据库实例名。
[oracle@orclserv1 dbs]$ ls
hc_orcl11g.dat init.ora lkORCL11G orapworcl11g spfileorcl11g.ora
5 再次登陆数据库
[oracle@orclserv1 dbs]$ sqlplus sys/sys123@orcl11g as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Sat Jul 20 20:27:51 2019
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
数据库不必重启,已经能够登陆。
6 删除创建的密码文件,重新创建密码文件,这次密码不使用原来的sys密码
创建sys密码文件时,如果不使用当前数据库的sys密码会怎样的,还是实验一下看看吧,删除掉原来的sys密码文件,重新创建一个,密码改为root123
[oracle@orclserv1 dbs]$ orapwd file=orapworcl11g password=root123
[oracle@orclserv1 dbs]$ ls -l
total 20
-rw-rw----. 1 oracle oinstall 1544 Jul 20 20:22 hc_orcl11g.dat
-rw-r--r--. 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r-----. 1 oracle oinstall 24 Jun 22 22:20 lkORCL11G
-rw-r-----. 1 oracle oinstall 1536 Jul 20 20:31 orapworcl11g
-rw-r-----. 1 oracle oinstall 2560 Jul 20 20:23 spfileorcl11g.ora
从目录的内容来看,密码文件已经创建,使用新的密码登录一下数据库看看:
[oracle@orclserv1 dbs]$ sqlplus sys/root123@orcl11g as sysdba
,
SQL*Plus: Release 11.2.0.4.0 Production on Sat Jul 20 20:32:10 2019
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
成功登录了数据库,可以看出,使用不同于数据库sys密码创建了密码文件之后,如果要想用sys进行远程登录,就要使用密码文件里的密码了。
7 结论
使用orapwd创建密码文件时,不必重启数据库,即可使用新密码以sysdba身份远程登陆数据库,且新密码可以不同于原来的sys密码。在忘记sys密码时,一种可行的方法是以操作系统方式登陆数据库,用alter user命令重新设置密码,也可以可以使用orapwd命令重置sys密码,这两种fang