【问题标题】:ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATAORA-12504: TNS:listener 未在 CONNECT_DATA 中指定 SERVICE_NAME
【发布时间】:2011-01-28 06:35:36
【问题描述】:

我正在尝试使用 Visual Studio 2010 中的服务器资源管理器连接本地 Oracle 11g 数据库。我尝试按照说明设置所有内容,但仍然收到 ORA-12504 错误。

这是错误:

这是我的 tnsnames.ora 内容:

# tnsnames.ora Network Configuration File: C:\app\rsahi\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.


VENUS =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = SPRPRG020)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = VENUS)
    )
  )

LISTENER_VENUS =
  (ADDRESS = (PROTOCOL = TCP)(HOST = SPRPRG020)(PORT = 1521))

listener.ora 文件内容,

# listener.ora Network Configuration File: C:\app\rsahi\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = SPRPRG020)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = C:\app\rsahi

【问题讨论】:

    标签: visual-studio-2010 oracle11g odp.net


    【解决方案1】:

    在 Visual Studio 的服务器资源管理器数据连接面板中试试这个:

    Data source name: SPRPRG020/VENUS

    即数据源名称格式为 SERVER_NAME_OR_IP/DATABASE_NAME

    【讨论】:

    • 使用 SSIS,本技巧确实描述了 SQL Server 导入和导出向导中“选择数据源”步骤的“数据源”字段中所需的格式。
    • 这对我有用!!!我试图连接到 Oracle 数据库以构建 SSRS 报告。我已经在我的 VS 服务器资源管理器中成功添加了数据库......所以我认为我非常接近。但我无法将连接作为实际的 SSRS 数据源建立......直到我尝试了@Rena Luna 的建议。我查看了与 Oracle DB 的现有服务器资源管理器连接的连接字符串,发现它有 IP:port/ 不确定 部分指的是什么,因为我不是 Oracle 人。把它作为连接字符串(Oracle Db 连接类型)放在我的 SSRS 数据源中!!
    【解决方案2】:

    在“连接属性”->“高级”的“数据源”字段中设置HOST/SERVICE_NAME格式的信息。例如。 127.0.0.1/测试

    【讨论】:

      【解决方案3】:

      如果对连接 ODP.NET 和 Oracle DB 没有太多了解,我建议您开始在连接参数中使用 SERVICE_NAME(例如:VENUS)。

      Oracle 声明:

      从 11g 开始,使用 /etc/hosts 文件中提供的主机名作为别名/服务名的功能已更改。因此,用户必须在连接时提供服务名称或使用默认服务名称配置目标侦听器。

      绕过 SERVICE_NAME 客户端要求的一种方法是通过在 tnsnames.ora 中告诉侦听器始终向您发送相同的 SERVICE 来强制侦听器这样做

      DEFAULT_SERVICE_LISTENER =  VENUS
      

      但我不建议你这样做,因为它的限制很大。

      【讨论】:

        【解决方案4】:

        我在尝试使用 Oracle 11g 创建 LinkedServer 时遇到了同样的问题。我的 oracle 实例名称是:PC-2.my.xgen,我的侦听器名称是“NB”。第一条语句的最后一个参数实际上是Oracle服务器实例和监听器名称的串联。

        所以我在 SQL server 中写下了以下语句。

        --add a linked server into SQL server
        --last parameter contains OracleInstance / Listener Name of desired database
        EXEC sp_addlinkedserver   'OracleLinkedServer4', 'Oracle',   'MSDAORA', 'PC-2.my.xgen/nb'
        
        --add login information into linked server
        EXEC sp_addlinkedsrvlogin 'OracleLinkedServer4', false,  Null, 'system',  '123456'
        

        在 Oracle 数据库“NB”中,我有一个名为:CRD_CIL_NOTIFICATION_TYPE 的表。所以我写下了以下语句来获取记录。

        select * from OracleLinkedServer4..SYSTEM.CRD_CIL_NOTIFICATION_TYPE
        

        【讨论】:

          【解决方案5】:

          在“连接属性”->“高级”中设置“数据源”字段中的信息,格式为HOST:PORT/SERVICE_NAME。例如。 10.xxx.xxx.xxx:1521/SIDNAME

          【讨论】:

            猜你喜欢
            • 2015-06-21
            • 2020-01-16
            • 1970-01-01
            • 2014-10-25
            • 1970-01-01
            • 1970-01-01
            • 2015-12-14
            • 2020-02-10
            • 2014-06-06
            相关资源
            最近更新 更多