以前对oracle的配置从来没有关注过,近期有个项目需要用到,之前一直是在本地oracleclient中的tnsnames里设置好连接然后直接使用plsql去连接远程的DB。但现在我发现,即使我把本地所有的tnsnames文件都删除了,11.1.0\client_1\Network\Admin只保留ldap.ora及sqlnet.ora,plsql仍然可以连接到以前连接的远程DB,请问这是什么原因呢? 如果本地根本就没有tnsnames文件,在连接远程DB的过程中还有什么地方会影响这种情况呢?麻烦有熟悉oracle的朋友帮忙解答下,多谢多谢~~

解决方案 »

  1.   

    可能你删除的不是真正的ORACLE_HOME下的tnsnames.ora
      

  2.   

    现在的问题是,我搜索遍了整个硬盘的tnsname的文件,除了几个我已经改名为tnsnames.ora_bak的之外,只有一个tnsnames.ora的文件,还是放在11.1.0\client_1\Network\Admin\Sample下的,并且我将这个文件删除了也仍旧可以连接到远程DB。
      

  3.   


        肯定是没删对位置,如果不通过tnsnames.ora 你只能通过:
       sqlplus  soctt/[email protected]:1521/orcl 了(TCP/IP)
      

  4.   

    请问删对位置是什么意思,现在我的oracle客户端里面的tnsnames.ora的文件已经全部被改名为bak了,本机除了一个放在sample文件夹中的(这个文件我也尝试删除过,仍然可以连接到远程数据库所以我排除这个文件里额)应该没有这个名字的文件了,我现在就是搞不明白为什么不用tnsnames文件夹我仍然可以使用plsql连接到远程DB
      

  5.   

    你把 本地的network/admin/sqlnet.ora文件里面的 NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
    中的除了tnsnames其他都删掉, 就登陆不上了 .登陆的时候有多种验证方式 如果选择只用TNSNAMES,而你的tns文件正好为空,就肯定登陆不上去了, 另外还可能涉及到数据库的认证方式,包括域认证等等
      

  6.   

    看是不是sqlnet.ora文件里面的 NAMES.DIRECTORY_PATH的参数设置。
      

  7.   

    sqlnet.ora-----作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串。
    例如我们客户端输入
    sqlplus sys/oracle@orcl
    假如我的sqlnet.ora是下面这个样子
    SQLNET.AUTHENTICATION_SERVICES= (NTS)
    NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
    那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的 ip地址然后去连接这个ip上GLOBAL_DBNAME=orcl这个实例,当然我这里orcl并不是一个主机名
    如果我是这个样子
    NAMES.DIRECTORY_PATH= (TNSNAMES)
    那么客户端就只会从tnsnames.ora查找orcl的记录,括号中还有其他选项,如LDAP等并不常用
      

  8.   

    多谢楼上两位的解答。我的理解是tnsnames.ora中保存的是类似odbc中DSN中的连接字符串,而程序可以直接通过Name直接连接远程的DB,但是如果我本地的tnsnames.ora都完全被删除了,无论sqlnet.ora中设定的认证方式是什么,本地的client也不应该知道我连接时输入的name到底有什么含义啊。 令,我本地的sqlnet.ora中的内容是SQLNET.AUTHENTICATION_SERVICES= (NTS),NAMES.DIRECTORY_PATH= (LDAP, TNSNAMES, EZCONNECT)