给sys用户授予sysdba权限报ORA-01994: GRANT failed: password file missing or disabled错误

问题描述:异机迁移后sys用户无法用SQL客户端登陆,但是system和其他用户可以登录

源数据库:Oracle11.2.0.1   目标数据库:Oracle11.2.0.4

问题现象:由于数据库是用RMAN全库备份恢复到异机上的,造成无法用sys用户无法用SQL客户端登陆,一直提示ORA-01017:ivalid username/password:login denied但是system和其他用户可以登录如下图:

 

分析问题原因:由于数据库是用RMAN全库备份恢复到异机上的,这个大家应该能想到,因为RMAN不能备份静态的参数文件、口令文件,虽然异机迁移成功但是sys用户无法用SQL客户端登录,system和其它用户可以,经查看sys和system 的状态是一样并无差异,用户状态也都是解锁状态如下图:

SQL>select * from dba_users where username like 'SYS%';

然后查这两个参数问题就要明显:
SQL> show parameter password;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile            string      EXCLUSIVE
SQL>
remote_login_passwordfile参数是EXCLUSIVE状态说明允许远程访问的,(VALUE= NONE)时是禁止关闭远程访问。

查看v$pwfile_users返回为空
SQL> select * from v$pwfile_users;

no rows selected
SQL>
正常情况下查询v$pwfile_users返回应该是这样的
SQL> select * from v$pwfile_users;
USERNAME                       SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS                            TRUE  TRUE  FALSE
SQL>
这里大家已经猜到了用为没有数据库没有口令文件或是口令文件与数据库没有同步造成的,然后通过给sys用户授予sysdba权限,此问题就更明显了。
SQL> grant sysdba to sys;
grant sysdba to sys
*
ERROR at line 1:
ORA-01994: GRANT failed: password file missing or disabled
SQL>
看到到这里想必大家已经找到了问题的所在,就是没有口令文件或是没有将数据库的口令与本地口令文件同步的原因下面我们创建口令文件并重新授权即可解决问题步骤如下:

创建新的口令文件,口令文件默认路径在$ORACLE_HOME/dbs目录下,格式为 ora+pwd+sid
$orapwd file='$ORACLE_HOME/dbs/orapworcl' password='oracle' entries=10 force=y
$ ls -lh
total 2302992
-rw-r--r--. 1 oracle oinstall     2851 May 15  2009 init.ora
-rw-r-----. 1 oracle oinstall       24 Jul 29 07:20 lkORCL
-rw-r-----. 1 oracle oinstall     2048 Aug  4 07:29 orapwdorcl
-rw-r-----. 1 oracle oinstall     2560 Aug  4 07:34 orapworcl
-rw-r-----. 1 oracle oinstall 10043392 Jul 29 15:33 snapcf_orcl.f
-rw-r-----. 1 oracle oinstall     2560 Aug  4 06:27 spfileorcl.ora

创建完口令文件后给sys用户授予sysdba权限
SQL> alter user sys identified by oracle;

User altered.

SQL>

然后在查看一下视图v$pwfile_users,可以看到已经同步,切记口令文件和数据库设置的密码要一致。
SQL> select * from v$pwfile_users;

USERNAME
--------------------------------------------------------------------------------
SYSDBA          SYSOPER         SYSASM
--------------- --------------- ---------------
SYS
TRUE            TRUE            FALSE

SQL>

然后用SQL客户端用sys用户登录以显示成功如图:

 

问题感言:这个问题花了我几个小时在网上查资料去解决,网上的均是各抒己见,说什么的都有,但都是大同小异,反倒迷惑了自己的思路,其实问题的根本还是要从问题发生的根源去分析才是解决问题的最有效的方法,不能说网上没有好文章,而是相比大海捞针式的去网上搜索答案,不如自己先想想问题的根源再去解决问题或是参考网的建议效率上会跟高查资料也更有针对性。

 

 

 

 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值