2つのトランザクションがSCNを共有できる条件(ある場合)は何ですか?
別の言い方をすれば、複数のDMLステートメントがSCNを共有する場合、それらが同じトランザクションの一部であることが保証されるという保証はありますか?
2つのトランザクションは、Oracleのバグを除いてSCNを共有しません。
オラクルがこれをどのように保証するかは、バージョン、プラットフォーム、および構成設定によって異なります。たとえば、Oracle 9.2の時代には、デフォルトでゼロ以外のmax_commit_propagation_delay
がありました。これは、一方のノードに挿入されてコミットされた行が、もう一方のノードのクエリにすぐに表示されない可能性があることを意味します。その構成では、Oracleは Lamport SCN生成 アルゴリズムを使用できます。このアルゴリズムでは、ノード間通信を必要とせずにSCNが並列に生成されます。 10.1以降では、 コミット戦略に関するブロードキャスト (リンクはPPT Julian Dykeからのプレゼンテーションです。これは優れていますが、予想よりも大きい可能性があります)です)代わりに使用され、max_commit_propagation_delay
のデフォルトは0です(10.1を使用し、デフォルト以外のmax_commit_propagation_delay
--を設定すると、Lamportに戻る可能性があります)。