ホームページ  >  記事  >  Oracleでテーブルがロックされた理由を確認する方法

Oracleでテーブルがロックされた理由を確認する方法

小老鼠
小老鼠オリジナル
2023-07-05 15:09:452912ブラウズ

Oracle がテーブルをロックする理由は、プログラムがテーブルに対して挿入を実行し、まだコミットされていない場合、別のプログラムも同じテーブルに対して挿入を実行し、その時点でリソースがビジーであるためです。例外、つまりテーブルをロックします。

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。