我在本地机器上安装了oracle客户端,其中tnsnames.ora文件中的内容如下:
dbtest_212.113.74.23 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 212.113.74.23)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dbtest)
    )
  )
然后在Delphi 7中新建应用程序,在窗体上放置ADOConnection控件,双击该控件设置数据链接属性如下:
提供程序:Oracle Provider for OLE DB
数据源:dbtest_212.113.74.23
用户名称:xxx
密码:xxx
单击“测试连接”按钮,报“ORA-12154:TNS:无法处理服务名”。如果将数据源改为“dbtest”,测试连接成功。请问这是为什么,我觉得这个地方应该填的是本地网络服务名“dbtest_212.113.74.23”,而不应该是服务名(在oracle 9i中也称为全局数据库名,替代了原来的数据库实例名的概念)“dbtest”,因为我是本地Delphi程序远程连接oracle服务器,应该是本地Delphi程序连接oracle客户端,oracle客户端再去连接oracle服务器才行啊。
还有一个更奇怪的问题,为了解决上述问题,我利用控制面板自带的“数据源(ODBC)”建立了一个系统数据源“testDSN”,其中“TNS Service Name”设置为“dbtest_212.113.74.23”,用户名和密码合法,然后测试数据源,连接成功;如果将“TNS Service Name”设置为“dbtest”,用户名和密码不变,测试数据源,连接失败,这符合我的预期,即我上述说的原因。然后我在Delphi中将ADOConnection控件的数据链接属性修改如下:
提供程序:Microsoft OLE DB Provider for ODBC Drivers
使用数据源名称:testDSN
用户名:xxx
密码:xxx
单击“测试连接”按钮,报相同错误“ORA-12154:TNS:无法处理服务名”。但如果用上述在“数据源(ODBC)”中测试连接失败的testDSN设置,在Delphi中却可以使ADOConnection控件测试连接成功。
我真是被搞糊涂了,究竟这是什么原因导致的。说明一点,“dbtest_212.113.74.23”作为本地网络服务器名在PL/SQL Developer和SQL PLUS中使用时,都可以正常连接oracle服务器。

解决方案 »

  1.   

    本地网络服务器名你配置成dbtest应该就没问题,dbtest_212.113.74.23这个样子估计会认为是一个IP地址?只是怀疑,你试着验证下
      

  2.   

    http://kb.cnblogs.com/a/1285855/
      

  3.   

    用SERVICE_NAME = dbtest来连接oracle服务器。
      

  4.   

    ------
    我也這樣想。
    如果tnsnames中只有一個連接配置信息,可能聰明的oledb程序會自己根據service_name去到取。另外其實不用額外建tns,直接把tns的那一打穿連接內容放到adoconnectstring的datasource中就行
    datasource="(DESCRIPTION =
      (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 212.113.74.23)(PORT = 1521))
      )
      (CONNECT_DATA =
      (SERVICE_NAME = dbtest)
      )"
      

  5.   

    你把本地net服务名 中的下划线 和“.”都去掉,没见过这么写的,odbc都能连接 就是ado不行  那估计是人家认为你的服务名没有办法解析了,但是你有个全局数据库id为什么能登陆,就不明白了,连接oracle都是需要net服务名连接的,oracle自身也是这么连接,难道ado能看到全局数据库?那是不可能的,必须,必然还有可能就是命名方法的配置,多加几种再试试看,也许写法没问题呢?
      

  6.   

    SFC_TEST =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 10.133.33.88)(PORT = 1521))
        )
        (CONNECT_DATA =
          (service_name = sfcdb)
        )
      )
    ADOConnection控件配置如下:
    提供程序:Microsoft OLE DB Provider for Oracle
    数据源:SFC_TEST
    用户名称:xxx
    密码:xxx
    单击测试连接报错:测试连接失败,因为初始化提供程序时发生错误。发生了一个Oracle错误,但无法从Oracle中检索错误信息。我的TNS是通的,Oracle客户端也有装。各位请帮忙看看是什么原因呢?
      

  7.   

    大哥,请问是在oracle客户端配置吗?如果配置呢?