gpt4 book ai didi

Oracle 数据库更改通知和 ROWID

转载 作者:行者123 更新时间:2023-12-04 15:14:58 27 4
gpt4 key购买 nike

甲骨文database change notification feature在行插入、更新和删除时发送 rowids(物理行地址)。正如 oracle 的文档中所指出的,应用程序可以使用此功能来构建中间层缓存。但是,当我们详细了解行 ID 的工作原理时,这似乎自相矛盾。

当执行各种数据库操作时,ROWID(物理行地址)可以更改,如 this stackoverflow thread 所示.除此之外,正如汤姆在此 thread 中提到的那样聚簇表可以具有相同的 rowid。

基于上述研究,使用数据库更改通知期间发送的 rowid 作为应用程序缓存中的键似乎并不安全,对吗?这也引发了一个问题——是否应该使用数据库更改通知功能来构建应用服务器缓存?还是建议在缓存对象的表进行任何导致 rowid 更改的操作时重新启动所有应用程序服务器集群(以重新加载/刷新缓存)?对于生产环境,这是一个很好的假设吗?

最佳答案

在我看来,可能会更改 ROWID 的操作都不是在应用程序运行时在生产环境中执行的操作。此外,我见过很多使用 ROWID 交叉事务(通常只持续几秒钟或几分钟)的高效软件。如果 ROWID 更改,该软件可能会在您的缓存之前失败。因此,基于更改通知创建数据库缓存对我来说似乎是合理的。只需提供一个关于 ROWID 的小声明。

唯一有点问题的操作是更新导致移动到另一个分区。但这种情况很少发生,因为它违背了分区的目的,至少如果它经常发生的话。特定数据库模式的设计者将能够告诉您此类操作是否可以发生以及是否与缓存相关。如果所有表都没有 ENABLE ROW MOVEMENT设置,你甚至不需要问设计师。

关于重复的 ROWID:ROWID 不是全局唯一的,它们在一个表中是唯一的。并且您在更改通知中同时获得了 ROWID 和表名。所以 ROWID 和表名的元组是构建可靠缓存的完美唯一键。

关于Oracle 数据库更改通知和 ROWID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7461573/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com