gpt4 book ai didi

oracle - 注销 oracle 更改通知

转载 作者:行者123 更新时间:2023-12-04 02:21:15 33 4
gpt4 key购买 nike

此主题与 Java 中的主题相关,但我找不到 C# 的解决方案。 http://theblasfrompas.blogspot.com/2010/01/closing-obsolete-database-change.html

我正在使用带有更改通知的 Oracle.ManagedDataAccess.dll。

一切正常,但我有一个问题。当我的应用程序启动时,我创建了数据库通知(超时为 0 - 它必须是)并且我处理了 OracleDependency。当我的应用程序停止时,我可以使用此句柄以这种方式调用删除注册:

oracleDependency.RemoveRegistration(connection);

当我的应用程序以某种方式崩溃并且我无法调用 RemoveRegistration 方法时,就会出现问题。我失去了对 OracleDependency 的处理,所以在重新启动应用程序后我无法删除过时的注册。与往常一样,启动应用程序将创建新的注册,但现在将存在两个 - 一个新的和一个过时的。这样我的应用程序将收到两次通知。问题是 - 如何删除我的应用程序创建的过时通知。

好的,我的进一步调查如下:我发现存在静态方法 OracleDependency.GetOracleDependency(string guid) 的 oracle 文档因此,在我创建 oracle 依赖项之后,我保存了他的 ID(似乎是它的 guid)。当我的应用程序停止时,我可以使用此方法来获取我的依赖项。不幸的是,它在应用程序重新启动后不起作用:/如果我尝试通过此 Id 获取 OracleDependency,它返回 null 但它仍然存在于 USER_CHANGE_NOTIFICATION_REGS

最佳答案

从数据库中删除所有更改通知注册的 Java 实现

Statement stmt= conn.createStatement();
ResultSet rs = stmt.executeQuery("select regid,callback from USER_CHANGE_NOTIFICATION_REGS");
while(rs.next())
{
long regid = rs.getLong(1);
String callback = rs.getString(2);
((OracleConnection)conn).unregisterDatabaseChangeNotification(regid,callback);
}
rs.close();
stmt.close();

您需要在类路径中包含 ojdbc6/7.jar 才能执行此代码。

原帖:https://community.oracle.com/message/9315024#9315024

关于oracle - 注销 oracle 更改通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29205747/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com