sqlplus登录数据库

今天看了sqlplus登录本地和远程oracle服务器,记录下供大家参考。

表面上oracle“本地登录”和“远程登录”的区别在于是否有“@”符号
SQL>conn username/password as sysdba  是本地登录
SQL>conn username/password@SID as sysdba 是远程登录
一、本地登录和远程登录的本质区别是:
1)本地登录不会调用tnsnames.ora,oracle服务器也无需启动监听器;本地登录是通过环境变量ORACLE_SID来定位数据库的,如果将其删掉,则本地登录会失败。
   ORACLE_SID为安装oracle数据库时自动生成的。
   (1)windows系统默认的ORACLE_SID值为最后所安装的实例,查看该变量值的操作如下:
    开始---运行,输入regedit打开注册表
    在HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1中查看ORACLE_SID的键值,入下图
sqlplus登录数据库_第1张图片
    修改此键值则修改了默认登录的本地数据库实例,有资料说不修改注册表,只修改本次登录的实例可按照如下方法,本人未亲自试验,仅供参考: 在CMD窗口下,先修改ORACLE_SID的值(set ORACLE_SID=xxxx,该修改仅对当前CMD窗口有效),接着用同一CMD窗口访问数据库即可。
    (2)linux可用echo $ORACLE_SID 查看ORACLE_SID的值。
    (3)另外还可以登录数据库后,通过sql查看当前连接的实例
          show parameter instance;
          show parameter instance_name;
          select * from v$instance;
2)远程登录必须要用到tnsnames.ora文件,且远程服务器上oracle的监听器必须是running,而与环境变量ORACLE_SID没有关系。

二、sqlplus登录命令
   这里以远程登录为例,本地登录去掉@SID即可
   开始---运行---cmd
   方法一:首先sqlplus /nolog
           然后connect  username/password@SID 
   方法二:sqlplus username/password@SID 

   特殊情况,密码中包含@特殊符号的时候
       首先sqlplus /nolog,然后connect  username/"pass@word"@SID   --成功登录
       sqlplus username/"pass@word"@SID   --登录失败
       sqlplus ucmp/\"pass@word\"@opencms   --登录成功


三、oracle的两种认证方式
    问题:oracle 本地登录的方式登录oracle服务端:sqlplus "/as sysdba",不需要用户名密码即可登录,禁用此方式的方法:在文件sqlnet.ora中,增加一行即可:sqlnet.authentication_services=(none)
    另外如果应用程序时不时地报错"ORA-03135连接失去联系",该问题可能与sqlnet.ora设置参数SQLNET.EXPIRE_TIME 有关,在文件sqlnet.ora中,增加一行,单位分钟:SQLNET.EXPIRE_TIME = 10

    SQLNET.AUTHENTICATION_SERVICES= (NTS)是基于操作系统验证;
    SQLNET.AUTHENTICATION_SERVICES= (NONE)是基于Oracle验证;
    SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS)是二者共存。

    下面详细说下oracle的认证方式(摘自http://www.cnblogs.com/junnor/archive/2013/03/07/2947273.html)。

    ORACLE数据库通过sqlnet.ora文件中的参数sqlnet.authentication_services,参数文件中的remote_login_passwordfile和口令文件pwdsid.ora三者协同作用实现身份认证.
    Sqlnet.authentication_services=(NTS)|(NONE)
    NTS:操作系统认证方式,不使用口令文件;
    NONE:口令文件认证方式

    Remote_login_passwordfile=(NONE)|(EXCLUSIVE)|(SHARED)
    NONE:不使用口令文件,操作系统认证;
    EXCLUSIVE:口令文件认证方式,但只有一个数据库实例可以使用此文件;
    SHARED:口令文件认证方式,可以有多个数据库实例可以使用此文件,但此设置下只有SYS帐号能被识别,即使文件中存在其他用户的信息,也不允许他们以SYSOPER/SYSDBA登录.

   (1).sqlnet.authentication_services=(NTS)
       同时Remote_login_passwordfile=(NONE),此时为操作系统认证方式.

       当以oracle_dba组下的用户登录进入本地的操作系统后,进行以下操作:
       sqlplus /nolog
       SQL>conn /as sysdba
       可以以sysdba身份登录成功,进行数据库方面的操作.

       当以远程进行登录时,执行:
        sqlplus /nolog
        SQL>conn /as sysdba
        则会显示:
        ERROR:ORA-01031:insufficient privileges
        即不允许以sysdba身份远程登录系统,这也是OS认证这所以称为本地认证方式的原因.

    (2).Sqlnet.authentication_services=(NONE),同时Remote_login_passwordfile=(EXCLUSIVE)|(SHARED),配合口令文件PWDsid.ora,此时为口令文件认证方式:

       当在本地以oracle_dba组下的用户登录进入系统时,进行以下操作:
        sqlplus /nolog
        SQL>conn /assysdba
        则会显示:
        ERROR:ORA-01031:insufficient privileges

       在本地或远程进行下边的操作:
       sqlplus /nolog
       SQL>conn sys/密码@服务名assysdba
       可以进入系统,也就是说口令文件认证方式允许用户从本地或远程以sysdba身份登录,但必须提供口令字.


    (3).Sqlnet.authentication_services=(NTS),同时
        Remote_login_passwordfile=(EXCLUSIVE)|(SHARED),配合口令文件PWDsid.ora,此时为操作系统认证和口令文件认证同时起作用:

        当在本地以oracle_dba组下的用户登录进入操作系统后,进行下边的操作:
        sqlplus /nolog
        SQL>conn /assysdba
        可以进入系统.即操作系统认证方式登录成功.

        当在远程执行:
        sqlplus /nolog
        SQL>conn sys/密码@服务名assysdba
        同时可正常登录到数据库系统,即口令文件认证方式登录成功.

附:

要知道以下几种登陆方式不是一种概念
sqlplus /nolog
1: conn /assysdba本机登陆,使用操作系统认证,有无监听都可以
2: conn sys/password assysdba本机登陆,使用密码文件认证,有无监听都可以
3: conn sys/password@dbanote assysdba可以本机可以远程,使用密码文件认证,必须有监听,必须有tnsnames.ora,remote_login_passwordfile必须是EXCLUSIVE

说明:
从oracle的解释可以知道,SQLNET.AUTHENTICATION_SERVICES=(NTS)是WINDOWS系统专用的,对linux/UNIX是不适用的。

最后做一个简单的总结:
1、在windows下,SQLNET.AUTHENTICATION_SERVICES必须设置为NTS或者ALL才能使用OS认证;不设置或者设置为其他任何值都不能使用OS认证。
2、在linux下,在SQLNET.AUTHENTICATION_SERVICES的值设置为ALL,或者不设置的情况下,OS验证才能成功;设置为其他任何值都不能使用OS认证。

你可能感兴趣的:(远程登录,sqlplus,本地登录)