Oracleテーブルがロックされているかどうかを確認する方法は?


22

Oracle Enterprise 11gR2にインストールされているBIソフトウェアとリポジトリデータベースを使用しています。

これらのバッチレポートの一部は、まだロックされている可能性のあるデータベーステーブルにアクセスしようとします。Oracleテーブルがロックされているかどうかを確認するにはどうすればよいですか?分析の履歴詳細のように表示されるSQLステートメントはありますか?


特定の時間間隔内に物を表示したいということです。
セラハッティン

たとえば、さらに分析するために、午後2時00分00秒から午後5時0分00秒の間にロックされているすべてのテーブルを一覧表示します。
セラハッティン14年

一般的に私はオラクルでロックされたテーブルを見つけたいですか?
セラハッティン14年

1
@Selahattinアプリケーションレベルのロックについて話していますか?Oracleは、一般的に、そのシリアル化のレベルやデザインにテーブルロックを実行しません
Philᵀᴹ

回答:


32

次のクエリは、すべてのロックの詳細を提供します。

SELECT B.Owner, B.Object_Name, A.Oracle_Username, A.OS_User_Name  
FROM V$Locked_Object A, All_Objects B
WHERE A.Object_ID = B.Object_ID

10

次のスクリプトは、Oracleシステム内のすべてのロックオブジェクトを迅速に識別するために使用できます。

select
   c.owner,
   c.object_name,
   c.object_type,
   b.sid,
   b.serial#,
   b.status,
   b.osuser,
   b.machine
from
   v$locked_object a ,
   v$session b,
   dba_objects c
where
   b.sid = a.session_id
and
   a.object_id = c.object_id;

参照:-Burleson ConsultingによるOracleのヒントhttp://www.dba-oracle.com/t_find_oracle_locked_objects.htm


2

V $ LOCKED_OBJECTから現在ロックされているオブジェクトを照会できます。

ただし、ロックの履歴はありません。すべてのロックを記録すると、パフォーマンスのオーバーヘッドが大きくなり、大量のデータが保存されます。

データベースに最も近いのは、アクティブセッション履歴V $ ACTIVE_SESSION_HISTORYDBA_HIST_ACTIVE_SESS_HISTORY(使用する適切なライセンスを持っている場合)であり、ブロックされたセッション、ステートメント、その他の情報を表示できますが、ロックされたテーブルは表示できません。それ以外の場合は、適切なビューを照会し、必要なデータを独自のカスタムスクリプトで保存してみてください。


2

以下のクエリを使用すると、テーブルのロックを見つけることができます。

column oracle_username format a15;
column os_user_name format a15;
column object_name format a37;
column object_type format a37;
select a.session_id,a.oracle_username, a.os_user_name, b.owner "OBJECT OWNER", b.object_name,b.object_type,a.locked_mode from 
(select object_id, SESSION_ID, ORACLE_USERNAME, OS_USER_NAME, LOCKED_MODE from v$locked_object) a, 
(select object_id, owner, object_name,object_type from dba_objects) b
where a.object_id=b.object_id;

ブロッキングロック


0

ロックされたオブジェクトのロックを解除する場合は、対応するセッションを強制終了します。

-- Query to Get List of all locked objects
SELECT B.Owner, B.Object_Name, A.Oracle_Username, A.OS_User_Name  
FROM V$Locked_Object A, All_Objects B
WHERE A.Object_ID = B.Object_ID ; 
-- and A.OS_USER_NAME = 'mahendar' 

-- Query to Get List of locked sessions        
select SID,SERIAL#,INST_ID from gv$session a  where schemaname = 'SYSTEM';
-- and osuser =  'mahendar';
-- o/p: 314 26513   1

-- Statement to Kill the session [pass values in the same order and append @ for inst_id]
alter system kill session '314,26513,@1';

0

テーブルロックを確認しv$lockたり、dba_objects表示したりできます。以下のクエリは、ロックの詳細を提供します。

select a.sid||'|'|| a.serial#||'|'|| a.process
from v$session a, v$locked_object b, dba_objects c
where b.object_id = c.object_id
and a.sid = b.session_id
and OBJECT_NAME=upper('&TABLE_NAME');

クエリ2:

select
(select username from v$session where sid=a.sid) blocker,
a.sid,
' is blocking ',
(select username from v$session where sid=b.sid) blockee,
b.sid
from
v$lock a,
v$lock b
where
a.block = 1
and
b.request > 0
and
a.id1 = b.id1
and
a.id2 = b.id2;

以下のクエリを使用して、詳細を確認できます。 テーブルロック

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.