Oracle がテーブルをロックする理由は、プログラムがテーブルに対して挿入を実行し、まだコミットされていない場合、別のプログラムも同じテーブルに対して挿入を実行し、その時点でリソースがビジーであるためです。例外、つまりテーブルをロックします。
このチュートリアルのオペレーティング システム: Windows 10 システム、Oracle バージョン 19c、Dell G3 コンピューター。
Oracle がテーブルをロックする理由は何ですか?
テーブルをロックする主な理由は次のとおりです:
(1) プログラム A が挿入を実行します。 on tableA, Before commit, Program B also inserts tableA. このとき、リソースビジー例外が発生し、ロックテーブル
(2) ロックテーブルは、並列ではなく同時実行で発生することがよくあります (並列では、スレッドデータベースを操作する場合、別のスレッドはデータベースを操作できません。CPU と I/O の割り当て原則)
テーブルがロックされる可能性を減らす方法:
(1) 挿入、更新を減らす、および delete ステートメント 実行とコミットの間の時間。具体的には、バッチ実行をシングル実行に変更し、SQL 自体の非実行速度を最適化します。
(2) 例外が発生した場合はロールバックします
テーブルをロックする理由としては、次のことが考えられます。行データが変更され忘れられています。送信するとテーブルもロックされます。
1. テーブルをロックする場合は、理由を確認してから決定することをお勧めします。
1 ロック テーブル クエリのコードは次の形式です:
select count(*) from v$locked_object; select * from v$locked_object;
2. どのテーブルがロックされているかを確認します
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
3 どのセッションが原因かを確認します
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
4. どの SQL が原因かを確認します
select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id = b.sid and b.SQL_ID = c.sql_id and c.sql_id = '' order by b.logon_time;
5. 対応するプロセスを強制終了します
コマンドを実行します: alter system kill session'1025,41';
1025その中には sid があり、41 はシリアル#.
2. Oracle ユーザーが頻繁にロックされる理由
ログイン時にプロンプトが表示されます: user test is locked
1. ユーザーdba ロールでログインしてロックを解除し、最初に特定の時刻を表示するために特定の時刻形式を設定します。
SQL> alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss’;
Session altered.
2. 特定のロックされた時刻を表示します
SQL> select username,lock_date from dba_users where username='TEST'; USERNAME LOCK_DATE ------------------------------ ------------------- TEST 2021-03-10 08:51:03
3. ロックを解除
SQL> alter user test account unlock;
ユーザーが変更されました。
以上がOracleでテーブルがロックされた理由を確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。