0

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

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

我试图深入挖掘并找到问题所在。我发现那张桌子USER_CHANGE_NOTIFICATION_REGS

SELECT * from USER_CHANGE_NOTIFICATION_REGS

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

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

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

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

图片:

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

4

2 回答 2

0

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

如果这没有帮助,请执行以下操作:

1)向我们发送一个完整的小测试项目,用于使用相应的 DDL/DML 脚本进行复制

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

于 2019-10-28T15:08:41.367 回答
0

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

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

于 2019-10-29T20:34:16.280 回答