【问题标题】:Odp.Net - Depending on the client and serverOdp.Net - 取决于客户端和服务器
【发布时间】:2014-02-05 07:10:12
【问题描述】:

我对理论有疑问。 我的应用程序使用 Odp.Net。我添加作为参考文件 Oracle.DataAccess.dll 版本 2.112.3.0。 我正在使用 Odp.Net 来查询数据库和 注册表查询通知。 在每台计算机上,我从http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html 安装 ODAC 11.2 Release 5 (11.2.0.3.20)。

我想知道我的 Odp.Net 版本、Oracle 客户端版本(可以安装在客户端计算机上)和 Oracle 服务器版本之间的依赖关系。

问题是,在我注册查询通知后,我可以在 USER_CHANGE_NOTIFICATION_REGS 表中看到行。但几秒钟后,此通知将取消注册并消失。我读到这与版本问题有关,但我不明白我必须做什么。

我的目标是在我的应用程序中使用相同的 Odp.Net 文件(Oracle.DataAccess.dll + 一些额外的依赖项,如 oci.dll 等)。

【问题讨论】:

    标签: c# sql oracle odp.net


    【解决方案1】:

    ODP版本解密

    a.b.c.d(例如 2.112.3.0):

    • a (2) .Net 版本(在您的情况下为 2.0+)
    • b (112) Oracle 客户端版本(在您的情况下为 11.2+)
    • c, d (3, 0) ODP 版本(用于 Oracle 客户端 11.2 的 .Net 2.0 的 ODP 的 3d 版本)

    另一个例子:“4.100.1.0” - .Net 4.0+ 和 Oracle Client 10.0+ 第一版的 ODP

    【讨论】:

    • 那么为什么在服务器 10.2.0.4.0 和客户端 10.2.0.3.0 上更改通知效果很好,但在服务器 11.2.0.1.0 和客户端 10.2.0.3.0 上它不起作用(就像我几秒钟后从数据库中写入通知消失)。在这两种情况下,我都使用相同的 odp 2.112.3.0
    【解决方案2】:

    11.2.0.1 数据库中存在关于更改通知的错误。

    以下SQL会导致Oracle避免老版本出现bug的代码路径,但建议升级数据库:

    alter system set events '10867 trace name context forever, level 1';

    这并不是一个永久的解决方案。您应该升级 ODP.NET 并将数据库修补到最新的 11.2 补丁集。

    克里斯蒂安·谢伊

    甲骨文

    【讨论】:

    • 我知道您的解决方案,但 1) 我有服务器处于 11.2.0.2 版本的情况,但我仍然没有收到通知 2) 更改系统后...一切正常,但仅在我重新启动时服务器 - 我可以解决它并添加永久系统更改吗?
    • 如果这个修改系统解决了问题,那么你就遇到了错误。除了升级数据库之外,ODP.NET 也必须升级以修复错误。我认为应该在发行说明中提及这一点。
    【解决方案3】:

    已解决 Oracle 服务器版本 11.2.0.1.0 和 11.2.0.2.0 有一个 bug。如果其他版本的客户端注册事件,它将在第一次数据库更改后自动取消注册。为了解决它,我不得不写持久命令: alter system set event='10867 trace name context forever, level 1, COMMENT ='komentarz' SCOPE=SPFILE;

    【讨论】:

    • 上述解决方案是一种解决方法,不应长期依赖。正确的解决方法是修补数据库和 odp.net 客户端。这是一个非常古老的错误,两者的最新补丁集都将修复它。
    猜你喜欢
    • 2013-02-27
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多