2015-05-29 50 views
1

我已经在Oracle中使用BizTalk实现了数据库更改通知概念,但是我没有收到RowId,这是我发生任何更改时的主要字段。我得到的输出如下,在Oracle中使用BizTalk Server接收数据库更改通知

Notification Response Message

怎样才能行ID?

第二个问题是,只要任何变化都发生在我的数据库中的通知是不是来之前,除非我运行下面的查询在我的数据库

grant change notification to UserName 

我怎样才能使这些权限坚持?

回答

0

选项3是您需要启用的选项。

Registration Properties与数据库更改通知开发应用程序

注册属性

Oracle数据库支持的对象注册下列选项:

  1. 清除在通知选项:注销后首先更改通知。

  2. 超时选项:指定时间间隔后的注册过期。

  3. ROWID s选项:ROWID更改的行是通知ROWID选项的一部分。

  4. 可靠通知选项:默认情况下,通知在共享内存中生成。如果选择此选项,则会在持久数据库队列中生成通知。通知以原子方式与改变注册对象的事务排队。由于通知在数据库中是持久的,因此如果实例在生成通知后崩溃,则可以在后续重新启动时或在运行RAC时由群集的正常实例重新传递它们。 (注意:在通知性能和可靠性之间存在折衷,因为在生成可靠通知时存在CPU和I/O成本,如果需要更好的通知性能,建议选择默认的内存选项)。

  5. 操作过滤器:能够通知特定操作(例如,仅针对INSERTUPDATE的通知)。

  6. 交易滞后:指定连续通知之间的计数。

如果选择了ROWID选项,则更改的行的ROWID将作为通知的一部分发布。 ROWID以外部字符串格式发布。从通知中的ROWID信息中,应用程序应该随后能够通过执行“SELECT * from table_name_from_notification where ROWID = rowid_from_notification”形式的查询来检索已更改行的内容。在常规堆表中,ROWID的长度为18个字节。在索引组织表(IOT)的情况下,ROWID的长度取决于主键的大小,因此可能大于18个字节。

ROWID通知是分层次汇总的。如果在服务器端没有足够的内存来保存ROWID,那么通知可能会被汇总为FULL-TABLE-NOTIFICATION(通知描述符中的特殊标记保留用于此目的)。当收到这样的通知时,应用程序必须保守地假定整个表(即所有行)可能已被修改。 ROWID不是这种通知的一部分。如果由于ROWID导致的总共享内存消耗太大(超过动态共享池大小的1%),或者如果在事务中的单个注册对象中修改了太多的行(超过80个大约),则可能会滚动ROWID )或者如果IOT的修改行的逻辑ROWID的总长度太大(大约超过1800字节)。