2012-03-21 65 views
4

我正在查看Oracle的DBCN API(连续查询通知)并使用它实现指示数据库中新行和/或修改行的事件流。Oracle JDBC:恢复数据库更改通知注册

我所关心的是这样的:如果我配置和启动一个变化监听器,然后我的Java客户端失败,服务器端还在不断增加中交付的变化。但是,当我的Java客户端恢复时,我的选项似乎是有限的:

  1. 开始新的注册。我不想这样做,因为它只会启动一个新的注册(旧的仍在运行“无客户端”),我的新注册将不会发送预先注册的积压。
  2. 我可以查询USER_CHANGE_NOTIFICATION_REGS表,找到之前的注册并取消它,但仍然没有让我积压未送达的通知。

那么,怎样才能恢复我与现有注册一个会话? 或者,我可以从哪里找到并检索积压的通知?

谢谢。

//尼古拉斯

+0

您只能检测插入,更新,删除操作。 [实施例票数] [1] [1]:http://stackoverflow.com/questions/21697500/jdbc-oracle-database-change-notification-duplicate-events%20%27example %27 – 2014-02-11 12:21:50

回答

2

您可以实现服务器端解决方案(PL/SQL),将全部投入变成一个队列(Oracle高级队列)。然后你的java客户端可以连接到这个队列并获得更改。

如果您的客户端发生故障,所做的更改仍会写入服务器上的队列中。当你恢复你的客户端时,它会从队列中获得所有的改变,从你收到的最后一次恢复。

+0

公平的解决方案。谢谢。 – Nicholas 2012-12-11 19:20:27