Oracle.ManagedDataAccess OracleInternal.NotificationServices.ONSException

时间:2018-01-09 14:26:13

标签: c# .net oracle odp.net

我们使用'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();

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

约亨

4 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

数据源=(DESCRIPTION =(地址=(PROTOCOL = tcp)(主机= mydbhost)(PORT = 1521))(CONNECT_DATA =(SERVICE_NAME = myservicename)))); 负载平衡= false; ha events = false ;最小池大小= 1;增量池大小= 1;用户ID = mydbuser

答案 2 :(得分:0)

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

基本上,您需要配置ONS或禁用LoadBalancing和HAEvent,如下所示:

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

答案 3 :(得分:-1)

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