使用BizTalk Server在Oracle中接收数据库更改通知

时间:2015-05-29 12:40:55

标签: xml oracle biztalk

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

Notification Response Message

如何获取行ID?

第二个问题是,无论何时在我的数据库中发生任何更改,通知都不会发生,除非我在我的数据库中运行以下查询

grant change notification to UserName

如何保持这些权限?

2 个答案:

答案 0 :(得分:0)

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

Registration Properties开发具有数据库更改通知的应用程序

  

注册属性

     

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

     
      
  1. 清除通知选项:在第一次更改通知后取消注册。

  2.   
  3. 超时选项:在一段时间间隔后指定注册过期。

  4.   
  5. ROWID选项:ROWID已更改的行是通知ROWID选项的一部分。

  6.   
  7. 可靠通知选项:默认情况下,通知在共享内存中生成。如果选择此选项,则会在持久数据库队列中生成通知。通知以原子方式排列,用于更改已注册对象的事务。由于通知在数据库中是持久的,因此如果实例在生成通知后崩溃,则可以在其随后重新启动时传递,或者在运行RAC时由群集的幸存实例传递。 (注意:此处涉及通知性能和可靠性之间的权衡。由于在生成可靠通知时存在CPU和I / O成本,因此如果需要更好的通知性能,建议选择内存中的默认选项)。

  8.   
  9. 操作过滤器:能够收到特定操作的通知(例如仅针对INSERTUPDATE的通知)。

  10.   
  11. 交易延迟:指示连续通知之间的计数。

  12.         

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

         

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

答案 1 :(得分:0)

第一个问题的答案非常简单: 您需要在BizTalk接收位置中选择添加ROWID,如下所示:

   SELECT ROWID, [your other column names here] FROM TIACODEV.EMP_DETAILS [WHERE if you need it]

不确定如何解决第二个问题