Oracle
のロックの概念は、他のシステムのそれとはかなり異なります。
Oracle
の行の場合 ロックされると、レコード自体が新しい値(存在する場合)で更新され、さらに、ロック(ロールバックセグメントに存在するトランザクションロックへのポインタ)がレコードに直接配置されます。
これは、Oracle
でレコードをロックすることを意味します レコードのメタデータを更新し、論理ページ書き込みを発行することを意味します。たとえば、SELECT FOR UPDATE
を実行することはできません。 読み取り専用の表領域。
それ以上に、レコード自体はコミット後に更新されません。代わりに、ロールバックセグメントが更新されます。
これは、トランザクション自体が長い間終了した場合でも、各レコードが最後に更新したトランザクションに関する情報を保持していることを意味します。トランザクションが有効かどうか(つまり、レコードが有効かどうか)を確認するには、ロールバックセグメントにアクセスする必要があります。
Oracleには従来のロックマネージャがありません。つまり、すべてのロックのリストを取得するには、すべてのオブジェクトのすべてのレコードをスキャンする必要があります。これには時間がかかりすぎます。
ロックされたメタデータオブジェクトなど、いくつかの特別なロックを取得できます(v$locked_object
を使用) )、ロック待機(v$session
を使用) )などですが、データベース内のすべてのオブジェクトのすべてのロックのリストではありません。