sql >> データベース >  >> RDS >> Oracle

Oracleでロックされた行を見つける方法

    Oracle のロックの概念は、他のシステムのそれとはかなり異なります。

    Oracleの行の場合 ロックされると、レコード自体が新しい値(存在する場合)で更新され、さらに、ロック(ロールバックセグメントに存在するトランザクションロックへのポインタ)がレコードに直接配置されます。

    これは、Oracleでレコードをロックすることを意味します レコードのメタデータを更新し、論理ページ書き込みを発行することを意味します。たとえば、SELECT FOR UPDATEを実行することはできません。 読み取り専用の表領域。

    それ以上に、レコード自体はコミット後に更新されません。代わりに、ロールバックセグメントが更新されます。

    これは、トランザクション自体が長い間終了した場合でも、各レコードが最後に更新したトランザクションに関する情報を保持していることを意味します。トランザクションが有効かどうか(つまり、レコードが有効かどうか)を確認するには、ロールバックセグメントにアクセスする必要があります。

    Oracleには従来のロックマネージャがありません。つまり、すべてのロックのリストを取得するには、すべてのオブジェクトのすべてのレコードをスキャンする必要があります。これには時間がかかりすぎます。

    ロックされたメタデータオブジェクトなど、いくつかの特別なロックを取得できます(v$locked_objectを使用) )、ロック待機(v$sessionを使用) )などですが、データベース内のすべてのオブジェクトのすべてのロックのリストではありません。



    1. EFが不要なヌルチェックを使用してSQLクエリを生成するのはなぜですか?

    2. OracleのDBTIMEZONE関数

    3. PythonからOracleにアクセスするにはどうすればよいですか?

    4. NetBeans 9.0、パート2のJava9でJShellを使用する