Oracle ロック テーブルの状況には次のものが含まれます: 1. プログラム A はテーブル A に対して挿入を実行しますが、コミット前にプログラム B もテーブル A に対して挿入を実行します。このとき、リソース ビジー例外が発生します。 ; 2. テーブル ロックは、並列処理ではなく同時実行で行われることがよくあります。並列では、1 つのスレッドがデータベースを操作するとき、他のスレッドはデータベースを操作できません。CPU と I/O の割り当ての原則。
このチュートリアルの動作環境: Windows 10 システム、Oracle バージョン 19c、Dell G3 コンピューター。
テーブルをロックする主な理由は次のとおりです:
1. プログラム A は tableA に対して挿入を実行しますが、コミット前にプログラム B も tableA に対して挿入を実行します。今回は、リソースがビジーであるという例外が発生します。これは、ロック テーブル
2です。ロック テーブルは、多くの場合、並列処理ではなく同時実行で発生します (並列では、1 つのスレッドがデータベースを操作するときに、もう 1 つのスレッドがデータベースを操作する)データベース、CPU、I/O 割り当て原則を操作できません)
テーブルがロックされる可能性を減らす方法:
1. 次の実行間の時間を短縮します。ステートメントを挿入、更新、削除し、コミットします。具体的には、バッチ実行を単一実行に変更し、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 ユーザーが頻繁にロックされる理由
ログイン時にプロンプト: test user is locked
1. dba ロールを使用します。ユーザーとしてログインしてロックを解除します。まず、特定の時刻を表示するために特定の時間形式を設定します。
SQL> alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss’;
セッションが変更されました。
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 サイトの他の関連記事を参照してください。