【问题标题】:Oracle.ManagedDataAccess OracleInternal.NotificationServices.ONSExceptionOracle.ManagedDataAccess OracleInternal.NotificationServices.ONSException
【发布时间】:2018-06-18 14:43:09
【问题描述】:

我们使用“Oracle.ManagedDataAccess”ODP.NET 驱动程序来访问 Oracle 的数据库。

使用连接字符串连接数据库时:

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=10.40.40.38)(Port=1521)))(CONNECT_DATA=(SERVICE_NAME=D3T))); User Id=test; Password=test'

内部错误信息:

OracleInternal.NotificationServices.ONSException**:ONS:打开连接后没有配置节点列表。

代码:

string connect = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=10.40.40.38)(Port=1521)))(CONNECT_DATA=(SERVICE_NAME=D3T))); User Id=test; Password=test";
OracleConnection connection = new OracleConnection(connect);
connection.Open();

与数据库的连接工作正常。但是配置内部有什么问题?

【问题讨论】:

  • this page 有帮助吗?
  • Oracle服务器上没有启动或配置ONS服务。为什么会出现此错误?
  • 这些。服务器上的config内容如下: localport=6150 remoteport=6250 nodes=10.40.40.38:6250 但是ONS服务(onsctl)没有启动。
  • 我从 Devart 切换到 Oracle .NET Core 2 beta 驱动程序后得到了这个。
  • 我在启动应用程序时遇到了同样的问题。我打开连接时收到了六次'OracleInternal.NotificationServices.ONSException' in Oracle.ManagedDataAccess.dll

标签: c# .net oracle odp.net


【解决方案1】:

我发现此链接很有帮助: https://www.databaseusers.com/article/6046913/ONS%3A+No+node+lists+were+configured

基本上,你需要像这样配置 ONS,或者禁用 LoadBalancing 和 HAEvents:

Oracle.ManagedDataAccess.Client.OracleConfiguration.LoadBalancing = false;
Oracle.ManagedDataAccess.Client.OracleConfiguration.HAEvents = false;

【讨论】:

    【解决方案2】:

    感谢雅各布·彼得森。

    但是,如果您无法在 C# 代码中找到上述设置,请按如下方式配置您的配置。 “如果块已经存在,则添加设置”

    <oracle.manageddataaccess.client>
        <version number="*">
          <settings>
            <setting name="LoadBalancing" value="false" />
            <setting name="HAEvents" value="false" />
          </settings>      
        </version>   
      </oracle.manageddataaccess.client>
    

    【讨论】:

    • 这消除了错误。但是It't mean, I don't understand it all 是什么意思?
    【解决方案3】:

    我们使用单个连接字符串(没有任何 xml)配置 OracleConnection。
    可以使用以下名称设置这两个参数,其他部分是示例,与此问题无关。

    数据源=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=mydbhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=myservicename)));负载平衡=false;ha events= false;Min Pool Size=1;Incr Pool Size=1;user id=mydbuser

    【讨论】:

      【解决方案4】:

      我多年来一直使用 ODP.NET 托管客户端,直到最近更新迁移到 .NET Core 并使用 Oracle.ManagedDataAccess 和 Oracle.ManagedDataAccess.Core Nuget 包时才看到这些 OSN 异常。

      感谢 Jacob Peterson 和其他建议忽略或禁用这两个属性“LOAD BLANCING=False;HA Events=False”的成员。如果在打开连接时启用,每个都会生成 3 个异常。

      我假设新版本假定启用这些功能,无论服务器和/或连接字符串是否为此准备。

      所以,我建议忽略它们或将禁用的值附加到连接字符串。

      【讨论】:

        【解决方案5】:

        如果我在我的 conn 字符串中添加“load balance=false;ha events=false”,我遇到了同样的问题并修复了它。

        【讨论】:

        猜你喜欢
        • 2017-03-21
        • 1970-01-01
        • 1970-01-01
        • 2015-02-17
        • 2019-03-28
        • 2019-11-07
        • 1970-01-01
        • 2015-10-12
        • 1970-01-01
        相关资源
        最近更新 更多