it-swarm.com.de

Wie kann festgestellt werden, ob eine Oracle-Tabelle gesperrt ist oder nicht?

Wir haben BI-Software und eine Repository-Datenbank verwendet, die auf Oracle Enterprise 11gR2 installiert sind.

Einige dieser Stapelberichte versuchen, auf eine Datenbanktabelle zuzugreifen, die möglicherweise noch gesperrt ist. Wie kann ich herausfinden, ob eine Oracle-Tabelle gesperrt ist oder nicht? Gibt es eine SQL-Anweisung, die der Analyse ähnliche Verlaufsdetails anzeigt?

25
Selahattin

Die folgende Abfrage enthält Details zu allen Sperren.

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
36
Ravindra Reddy

Das folgende Skript kann verwendet werden, um alle Sperrobjekte in Ihrem Oracle-System schnell zu identifizieren.

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;

Referenz: -Oracle-Tipps von Burleson Consulting http://www.dba-Oracle.com/t_find_Oracle_locked_objects.htm

12
Ali786

Sie können die gesperrten aktuell Objekte von V $ LOCKED_OBJECT abfragen.

Es gibt jedoch keinen Verlauf für die Sperren. Das Protokollieren aller Sperren würde einen enormen Leistungsaufwand und eine Menge zu speichernder Daten verursachen.

Die Datenbank verfügt am nächsten über den aktiven Sitzungsverlauf V $ ACTIVE_SESSION_HISTORY , DBA_HIST_ACTIVE_SESS_HISTORY (wenn Sie über die entsprechende Lizenz verfügen), in dem Sie blockierende Sitzungen, Anweisungen und anzeigen können andere Informationen, aber keine gesperrten Tabellen. Andernfalls können Sie versuchen, die entsprechenden Ansichten abzufragen und die erforderlichen Daten mit Ihrem eigenen benutzerdefinierten Skript zu speichern.

2
Balazs Papp

Mit der folgenden Abfrage können Sie Sperren für die Tabelle herausfinden.

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;

Sperren blockieren

2
santosh

Sie können die Tabellensperre von v$lock und dba_objects Aussicht. Die folgende Abfrage gibt Ihnen die Sperrdetails.

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');

FRAGE 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;

Sie können die folgende Abfrage verwenden, um mehr Details zu erhalten. Tabellensperre

0
santosh

Wenn Sie die Sperre für gesperrte Objekte aufheben möchten, beenden Sie die entsprechende Sitzung.

-- 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
mahi_0707