zoukankan      html  css  js  c++  java
  • sys不能远程登录的问题

    环境:在数据服务器A(Red Hat Enterprise Linux Server release 5.5 (Tikanga))上装有数据库ORACLE 10g,但是我们现在从机器B上用DBA账号远程连接数据库时,登录不了。如下所示:

    问题一:SYSDBA不能远程登录(此处是不是指CRT远程登录)

    SYSDBA不能远程登录分两种情况:

    1:提示的是ORA-01017:用户名密码出错

    C:\Users\kerry>sqlplus "sys/wgods123@gsp as sysdba"

    SQL*Plus: Release 11.2.0.1.0 Production on 星期五 1月 11 11:08:07 2013

    Copyright (c) 1982, 2010, Oracle. All rights reserved.

    ERROR:

    ORA-01017: invalid username/password; logon denied

    这样的错误,明明密码和用户名明明输入的都是正确的。这又是为什么叻,出现这种情况,一般是系统参数REMOTE_LOGIN_PASSWORD的设置问题:PFILE文件中有个参数REMOTE_LOGIN_PASSWORDpasswordfile进行控制:

    remote_login_passwordfile =NONE时,停用口令文件验证,Oracle数据库不允许远程SYSDBA/SYSOPER身份登录,无法通过远程进行数据库起停等操作管理;

    remote_login_passwordfile =exclusive时,启用口令文件,允许远程登录;

    remote_login_passwordfile =shared 时,多个数据库可以共享一个口令文件,但是只可以识别一个用户:SYS;

    当口令文件丢失时,用/NOLOG方式登录,通过orapwd重建口令文件来解决。如果口令文件丢失,可以使用orapwd可以重建口令文件。

    这里需要启动密码文件的话,需要前提就是这个值, 这里的值可以NONE,EXCLUSIVE和SHARE。EXCLUSIVE和SHARE都可以,EXCLUSIVE是独占的文件,SHARE是多实例的体系中的共享模式。这个问题基本上就是这个值导致的

    SQL>alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;

    然后重启服务就可远程以sysdba登录。

    但是还有一种情况如下:

    检查一下系统参数REMOTE_LOGIN_PASSWORD的值,发现是EXCLUSIVE。而且密码文件也存在,但是就是报上面错误。

    SQL> SHOW PARAMETER REMOTE_LOGIN_PASSWORD

    NAME TYPE VALUE

    ------------------------------------ ----------- ------------------------------

    remote_login_passwordfile string EXCLUSIVE

    最后发现:SYS账户的密码是错误的,重置SYS密码后

    SQL> alter user sys identified by wgods123;

    问题解决了。

    2:ORA-01031: insufficient privileges

    C:\Users\kerry>sqlplus "sys/wgods123@GSP as sysdba"

    SQL*Plus: Release 11.2.0.1.0 Production on 星期五 1月 11 14:37:11 2013

    Copyright (c) 1982, 2010, Oracle. All rights reserved.

    ERROR:

    ORA-01031: insufficient privileges

    这种情况一般是由于你的密码文件缺损或者不存在了,例如口令文件删除了,而Oracle实例对sysdba的权限是根据这个密码文件来判断的,如果你的用户被grant to sysdba了,那么这个用户的密码和用户名也在这个密码文件了。这样也就发现你不是sysdba的角色,当然as sysdba就会提示权限不足了哟。为什么这样做了,如果我们的数据库没有open,那么对于的一些动态视图是不能打开的,所以oracle必须把这些用户的口令和username放在一个独立的文件里,这样在数据库还不是open的状况写,有个地方判断了。

    如何解决了。我们首先来判断一下

    SQL> SELECT * FROM V$PWFILE_USERS;

    USERNAME SYSDBA SYSOPER

    ------------------------------ ------ -------

    如果这里选择不出了记录的话,就是密码文件没有叻。

    这里解决的方法就是重建orapwd文件

    使用密码文件orapwd 命令 [oracle@wgods dbs]$ orapwd file=/database/oracle/product/dbhome/dbs/orapwgsp entries=4 password=wgods123 force=y

    再次查看 v$pwfile_users 这时候有一条记录了

    扫描上面二维码关注我
    如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
  • 相关阅读:
    cmanformat
    mysql-sql语言参考
    jQuery 判断多个 input checkbox 中至少有一个勾选
    Java实现 蓝桥杯 算法提高 计算行列式
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 算法提高 成绩排序2
    Java实现 蓝桥杯 算法提高 成绩排序2
    Java实现 蓝桥杯 算法提高 成绩排序2
  • 原文地址:https://www.cnblogs.com/kerrycode/p/2984152.html
Copyright © 2011-2022 走看看