Oracle错误:TNS:侦听器未在CONNECT_DATA 1中获得SERVICE_NAME

时间:2013-10-02 04:17:20

标签: .net sql oracle

我在尝试连接Oracle数据库时发现错误Visual stutio 2010

http://i.stack.imgur.com/BtIKu.jpg

http://i.stack.imgur.com/q6ffE.jpg

这是TNSNAMES.ORA:

TNS_ALIAS=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST =188.11.32.22)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

这是sqlnet.ora

# sqlnet.ora Network Configuration File: F:\app\user\product\11.2.0\client_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.

# This file is actually generated by netca. But if customers choose to 
# install "Software Only", this file wont exist and without the native 
# authentication, they will not be able to connect to the database on NT.

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

我现在该怎么办?

3 个答案:

答案 0 :(得分:4)

在设置Connection字符串的DataSource属性时,您需要使用简写版本。您的TNSNames文件中的条目将转换为此

var conBuiler = new OracleConnectionStringBuilder();
//DataSource = "HOST:PORT/SERVICE_NAME"
conBuilder.DataSource = "example.domain.com:1521/x99.domain.com"
conBuilder.UserId = "SomeUser";
conBuilder.Password = "Password123";

var orCon = new OracleConnection(conBuilder.ConnectionString);

答案 1 :(得分:3)

这是老帖子,但因为我在同样的情况下,这个论坛出现了谷歌搜索的顶部,然后我决定发布我的解决方案。

我尝试将XML请求发送到Oracle服务器并从一个实例获取:  ORA-12504:TNS:侦听器未在CONNECT_DATA中获得SERVICE_NAME

问题出在FQDN service_name中。它试图通过EZCONNECT解决它,但在Oracle 11g中,EZCONNECT根本不发送服务名称。

解决方案: 1.在“$ ORACLE_HOME \ database \ network \ admin \ sqlnet.ora”中仅使用NAMES.DIRECTORY_PATH中的TNSNAMES,如:

NAMES.DIRECTORY_PATH= (TNSNAMES)
  1. 在“$ ORACLE_HOME \ database \ network \ admin \ tnsnames.ora”中创建一个包含FQDN的附加部分。像:

    示例=   (DESCRIPTION =   (ADDRESS_LIST =     (ADDRESS =(PROTOCOL = TCP)(HOST = example.domain.com)(PORT = 1521))   )   (CONNECT_DATA =     (SERVICE_NAME = x99.domain.com)     (SID = X)   )  )

    EXAMPLE.DOMAIN.COM =   (DESCRIPTION =   (ADDRESS_LIST =     (ADDRESS =(PROTOCOL = TCP)(HOST = example.domain.com)(PORT = 1521))   )   (CONNECT_DATA =     (SERVICE_NAME = x99.domain.com)     (SID = X)   )  )

  2. 使用tnsping utilite ping两个名称:1)tnsping示例; 2)tnsping example.domain.com - 两个名字都必须回答。

  3. NB!使用您自己的主机,SERVICE_NAME和SID;)

    我希望它对某人有帮助。

    BR

    劳尔

答案 2 :(得分:0)

我在连接到oracle即时客户端时面临类似的问题, 1)在Suse / Redhat机器上连接到Oracle时出现问题  使用< export TWO_TASK = // xxxx.xxx.xxxx.xxxx:1521 / service_name>     xxx.xxx.xxx - >表示服务器名称/地址

此处服务名称是在Oracle中创建的数据库,并在tnsnames.ora文件中提及

以下是tnsnames.ora文件的内容 ORDB = (DESCRIPTION =   (ADDRESS =(PROTOCOL = TCP)(HOST = server_name)(PORT = 1521))   (CONNECT_DATA =     (SERVER = DEDICATED)     (SERVICE_NAME = ORDB)   ) )

2)在Solaris Sparc机器中解决相同的问题。

更新../odbc.ini文件

[dsn_name]

添加ServerName参数