Oracle 的数据库更改通知功能在行插入、更新和删除时发送 rowid(物理行地址)。如 oracle 的文档中所述,应用程序可以使用此功能来构建中间层缓存。但是,当我们详细了解行 ID 的工作原理时,这似乎是矛盾的。
当执行各种数据库操作时,ROWID(物理行地址)可能会发生变化,如该 stackoverflow 线程所示。除此之外,正如汤姆在此线程中提到的那样,聚簇表可以具有相同的 rowid。
根据上述研究,使用在数据库更改通知期间发送的rowid作为应用程序缓存中的键似乎并不安全,对吧?这也引发了一个问题——数据库更改通知功能是否应该用于构建应用程序服务器缓存?或者当缓存对象的表经历任何导致rowid改变的操作时,是否建议重新启动所有应用程序服务器集群(以重新加载/刷新缓存)?对于生产环境,这是一个很好的假设吗?