Oracle 更改通知注册未在 Oracle 18c 上清理

Oracle Change Notification Registration is not cleaning on Oracle 18c

我正在使用 devart dotConnect for Oracle 和 Oracle 12c 数据库。我的应用程序有一个 OracleDependency 对象实例,用于在我更改 table 时读取通知。

它在 Oracle 12C 上运行良好。最近,我使用 Oracle 18c 创建了一个新实例。我意识到通知延迟到达我的应用程序,有时会被错过。

我试图深入挖掘并找到问题所在。我发现 table USER_CHANGE_NOTIFICATION_REGS

SELECT * from USER_CHANGE_NOTIFICATION_REGS

显示已注册的旧通知。当我从 IIS 停止和启动我的 Web 应用程序时,它似乎没有被清除。

我尝试使用 DBMS_CHANGE_NOTIFICATION.DEREGISTER 手动清除这些通知,但它不起作用,因为它是使用不同的会话创建的。我的应用程序仅在该列表自行清理后几个小时后才开始重新工作。

我想知道 Oracle 18c 中是否有一些新的 parameters/settings 来定义某种超时。我是否应该更改我的应用程序中的某些内容以在停止它之前清除注册的通知?

下图中的那些记录是旧的。我怀疑正在延迟发送新通知,因为它正试图从注册的旧通知中调用回调函数(IP:端口)。清除该列表后(我不知道它是如何清除的),应用程序将再次运行。

图片:

https://i.stack.imgur.com/kAlNl.png

尝试降低 command.Notification.Timeout 的值。

如果这没有帮助,请执行:

1) send us 一个小的完整测试项目,用于使用相应的 DDL/DML 脚本进行复制

2) 告诉我们您的 Oracle Server 18c 和 Oracle Client 的确切版本

已解决!问题是 Windows 防火墙。我使用 Oracle 12c 进行了测试,但遇到了同样的问题。然后,我只是关闭 windows 防火墙,之前创建的更改通知正在从 DBA_Change_Notification_Regs table.

中删除

可能是另一个 application/service 负责,但被防火墙阻止了。我想知道它使用哪个应用程序或哪个端口号来执行此操作。