Oracle のデータベース変更通知機能は、行の挿入、更新、および削除時に行 ID (物理行アドレス) を送信します。オラクルのドキュメントに示されているように、アプリケーションはこの機能を使用して中間層キャッシュを構築できます。しかし、行 ID がどのように機能するかを詳しく見てみると、これは矛盾しているように見えます。
ROWID (物理行アドレス) は、この stackoverflow スレッドで示されているように、さまざまなデータベース操作が実行されると変更される可能性があります。これに加えて、このスレッドでトムが言及しているように、クラスター化されたテーブルは同じ行 ID を持つことができます。
上記の調査に基づいて、データベース変更通知中に送信されたROWIDをアプリケーションキャッシュのキーとして使用するのは安全ではないようですよね? これは、アプリケーション サーバー キャッシュを構築するためにデータベース変更通知機能を使用する必要があるかどうかについても疑問を投げかけます。または、キャッシュされたオブジェクトのテーブルで行 ID が変更される操作が行われたときに、すべてのアプリケーション サーバー クラスタを再起動する (キャッシュをリロード/リフレッシュする) ように推奨されていますか? それは本番環境で行うのに適した仮定でしょうか?