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

Oracle は、DML ステートメントの実行中にテーブル全体をロックしますか、それとも行だけをロックしますか?

    LOCK TABLE コマンドを使用して明示的にロックを発行できます。 詳細

    それ以外の場合、挿入は他の行をロックしません。 Oracle の読み取り分離モデルにより、行はコミットするまでセッションにのみ存在するため、他の誰もそれを操作できません。 詳細 .

    update ステートメントは、影響を受ける行のみをロックします。 SELECT ... FOR UPDATE を使用して悲観的なロック戦略を実装していない限り。 詳細を見る .

    最後に、Oracle ではライターはリーダーをブロックしません。したがって、ロックされた行であっても他のセッションで読み取ることができますが、変更することはできません。 詳細 .

    この動作は Oracle カーネルに組み込まれており、構成できません。

    Justin は、テーブル レベルの DDL ロックについて適切な指摘をしています。このロックにより、テーブルで DDL を実行しているセッションは、DML セッションがコミットされるまで待機します。ただし、DDL が CREATE INDEX のようなものである場合は、ORA-00054 ですぐに失敗します。



    1. SQLクエリからアプリケーションコードへのバックトレース?

    2. SQLServerで削除されたレコードを復元するノウハウ

    3. Postgresでタイムスタンプを整数(Unixエポック)に変換する方法

    4. IP範囲のクエリに使用されないPostgreSQLインデックス