ロックの変換

既に保持しているロック・モードの変更は、ロック変換 と呼ばれます。

ロックの変換が行われるのはあるプロセスがすでにロックを保持しているデータ・オブジェクトにアクセスする場合に、 そのアクセスのモードが、すでに保持しているロックよりさらに制約の大きいロックを必要とするものである場合です。 照会によって間接的に 1 プロセスの中で同じデータ・オブジェクトに、何度もロックを要求できますが、 1 つのデータ・オブジェクトのロックは任意の一時点で 1 つしか保持できません。

一部のロック・モードは表にのみ適用され、その他のロック・モードは行、ブロック、またはデータ・パーティションにのみ適用されます。 行またはブロックの場合、通常、X ロックが必要なときに S または U ロックを保持している場合に、変換が行われます。

IX および S ロックは、ロック変換での特殊ケースです。 どちらも他方よりも制約が大きいとは見なされないため、 これらのロックの一方を保持しているときに他方が必要になった場合には、 変換は結果として SIX (意図的排他共有) ロックになります。 他のすべての変換の結果は、要求されているモードの制限がより大きい場合は、 要求されたロック・モードが、保持するロックのモードになります。

照会が行を更新するとき、二重変換が発生する場合もあります。 索引アクセスによって行が読み取られ、S としてロックされる場合、行を含む表には、目的ロックが含まれています。 ただし、ロック・タイプが IX ではなく IS である場合、後で行が変更されると、表ロックは IX に変換され、 行ロックは X に変換されることになります。

ロック変換は、通常、照会が実行されるときに暗黙的に行われます。 システム・モニター・エレメントの lock_current_mode および lock_mode は、データベースで発生しているロック変換に関する情報を提供することができます。