给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用户登录以显示成功如图:

 

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

 

 

 

 

 

 

 

这个错误提示ORA-01031是Oracle数据库中的错误代码,表示当前用户缺少足够的权限来进行所需的操作。根据错误消息,您正在尝试使用sys用户连接到hisense数据库,并使用sysdba角色进行连接。 sysdbaOracle数据库中的超级管理员角色,拥有最高权限。然而,即使是sysdba角色也需要遵守访问控制规则。此错误提示ORA-01031表示,您当前连接的用户缺乏执行此操作所需的特权。 要解决这个问题,您可以尝试以下步骤: 1. 检查您当前使用的用户是否具有sysdba角色的特权。您可以在SQL*Plus或SQL Developer中通过执行以下命令来验证用户的角色: SELECT * FROM SESSION_ROLES; 2. 确保您正在使用正确的用户名和密码连接到数据库。检查用户名和密码拼写是否正确,并且确保您具有连接到数据库权限。 3. 如果您知道sys用户的密码,并且具有sysdba角色的权限,可以尝试使用以下命令以sysdba权限连接到数据库: CONNECT sys/[password] AS SYSDBA; 4. 如果您无法解决问题,请联系数据库管理员(DBA)并向其告此错误DBA可能需要授予您所需的权限,或提供其他解决方案。 总之,ORA-01031错误表示当前用户缺少足够的权限来执行所需的操作。通过检查用户名、密码、角色等信息,您可以尝试解决这个问题。如果问题仍然存在,建议与数据库管理员(DBA)联系以获得更详细的支持和解决方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值