【问题标题】:Row Change Description is missing in Object Change Notification for large number of updates ---operation=[ALL_ROWS大量更新的对象更改通知中缺少行更改描述---操作= [ALL_ROWS
【发布时间】:2018-03-21 08:43:38
【问题描述】:

是否可以更新 rowid 限制。 在注册用于在 OCN 中侦听的表时,当执行单个或多个 INSERT、UPDATE OR DELETE 时,我得到了 rowid。响应或结果如下

Registration ID         : 336
Notification version    : 1
Event type              : OBJCHANGE
Database name           : tdb
Table Change Description (length=1)
    operation=[DELETE], tableName=ACCOUNT_COPY, objectNumber=205803
    Row Change Description (length=1):
      ROW:  operation=DELETE, ROWID=AAAyPrAAFAAAYp/AAE

但是当 INSERT,UPDATE OR DELETE 行数超过 100 时。 我没有得到 rowids,得到如下响应。

Registration ID         : 336
Notification version    : 1
Event type              : OBJCHANGE
Database name           : tdb
Table Change Description (length=1)
    operation=[ALL_ROWS, INSERT], tableName=ACCOUNT

【问题讨论】:

    标签: java oracle streaming change-notification


    【解决方案1】:

    这是设计使然。当在短时间内发生许多插入时,服务器会发送一个 ALL_ROWS 事件来通知客户端应该使表缓存失效。在这种情况下,发送细粒度通知事件在服务器上的成本太高了。

    【讨论】:

    • 感谢您的回复。我已经理解了 ALL_ROWS 通知在短时间内批量更新的这种行为。但是有没有办法更改配置并获取所有 rowids。根据 oracle doc 出现 FULL-TABLE-NOTIFICATION 的可能原因是:由于 ROWIDs 导致的共享内存消耗总量超过动态共享池大小的 1%。在一个事务中更改了太多行(上限约为 80)。 IOT 修改行的逻辑 ROWID 总长度太大(上限约为 1800 字节)。我们可以升级这些限制吗??
    • 您可以突破限制,但仍会受到限制。如果您正在构建通知机制(而不是数据缓存),那么您应该查看 Advanced Queuing (AQ)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    相关资源
    最近更新 更多