【问题标题】:Receiving Database Change Notifications in Oracle Using BizTalk Server使用 BizTalk Server 在 Oracle 中接收数据库更改通知
【发布时间】:2015-05-29 12:40:54
【问题描述】:

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

如何获取Row ID?

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

grant change notification to UserName

我怎样才能使这些权限保持不变?

【问题讨论】:

    标签: xml oracle biztalk


    【解决方案1】:

    选项 3 是您需要启用的。

    来自Registration Properties 使用数据库更改通知开发应用程序

    注册属性

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

    1. Purge On Notify 选项:在第一次更改通知后取消注册。

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

    3. ROWIDs 选项:ROWIDs 更改的行是通知 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 ) 或者,如果 IOT 的修改行的逻辑 ROWID 的总长度太大(大约超过 1800 字节。)。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-10
        • 1970-01-01
        • 2017-04-10
        相关资源
        最近更新 更多