前面那篇文章提到了在启动静态监听、将数据库启动到mount模式下以网络方式注册数据库,是比较顺利的一种情况,之前还遇到了一个比较困惑的问题,下面就来讨论一下这种情况。
之前在成功配置监听文件、TNS文件,也将数据库启动到了mount状态下,但死活就是无法通过网络方式注册到数据库,出现下面这个报错信息:
ORA-01031: insufficient privileges
提示没有足够的权限,有没有搞错?我是以sys用户登陆,sys不就具有最高权限么?而且密码并没有输入错误。仔细检查了listener.ora以及tnsnames.ora文件,确认没有任何问题。因为在另一个环境就是这样设置的。尝试查看一下拥有SYSDBA权限的用户:
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
no rows selected.
看到这里,问题比较明朗了,密码文件没有起到作用。因为通过网络注册数据库,是要读取密码文件的,而SYS是默认具有SYSDBA权限的,这里显示不出来,说明密码文件没有被成功读取,自然也就无法注册到数据库了。打个简单的比喻,小明在一次语文期末考试之前想要作弊,作弊的方式是通过花点银子去买一份答案,结果买到一份假答案,那考试自然是过不了关的了。此情此景,殊途同归。
回忆一下系统建库之后,默认生成了一个正确的密码文件,但是我手贱,把这个文件给删除了,重新创建了一个,并且命名为orapw10gstandby.ora。这个命名犯下两个错误,这两个错误也让我重新审视对密码文件规范化的认知程度。首先,密码文件是没有.ora后缀的;其次,后缀之前应该以标准的“orapwSID”方式命名。这样一来,我删除了这个错误命名的密码文件,重新建立密码文件:
orapwd file=/home/db/oracle/10g/dbs/orapwora password=oracle entries=10
重新在数据库中查询拥有SYSDBA的用户:
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
这不,又重新回来了,再检验通过网络注册数据库,一切正常,于是这个问题也算告一段落了。
之所以写这么长一篇,还是为了强调密码文件的重要性,往往我们忽视掉的地方恰恰是最值得重视的。
阅读(1688) | 评论(0) | 转发(0) |