Jak ustalić, czy tabela Oracle jest zablokowana, czy nie?

22

Korzystamy z oprogramowania BI i bazy danych repozytorium, które są zainstalowane na Oracle Enterprise 11gR2.

Niektóre z tych raportów wsadowych będą próbowały uzyskać dostęp do tabeli bazy danych, która może być nadal zablokowana. Jak mogę się dowiedzieć, czy stół Oracle jest zablokowany, czy nie? Czy jest jakaś instrukcja SQL, która wyświetla do analizy szczegóły historii?

Selahattin
źródło
Mam na myśli, że chcę wyświetlać rzeczy w określonym przedziale czasu.
Selahattin
Na przykład: chcę wyświetlić listę wszystkich zablokowanych tabel między godziną 14:00 a 17:00:00 w celu dalszej analizy.
Selahattin
Zasadniczo chcę znaleźć zamknięte stoły w wyroczni?
Selahattin
1
@Selahattin Czy mówisz o blokadzie poziomu aplikacji? Oracle zazwyczaj nie wykonuje blokowania tabel ze względu na poziom serializacji i projekt
Philᵀᴹ

Odpowiedzi:

32

Poniższe zapytanie podaje szczegóły wszystkich blokad.

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
Ravindra Reddy
źródło
10

Poniższego skryptu można użyć, aby szybko zidentyfikować wszystkie obiekty blokady w systemie 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;

Odniesienie: -Oracle Tips by Burleson Consulting http://www.dba-oracle.com/t_find_oracle_locked_objects.htm

Ali786
źródło
2

Możesz zapytać o aktualnie zablokowane obiekty z V $ LOCKED_OBJECT .

Nie ma historii blokad, rejestrowanie wszystkich bloków spowodowałoby ogromne obciążenie wydajnościowe i dużo danych do przechowywania.

Baza danych jest najbliższa historii aktywnych sesji V $ ACTIVE_SESSION_HISTORY , DBA_HIST_ACTIVE_SESS_HISTORY (jeśli masz odpowiednią licencję na korzystanie z niej), w której możesz przeglądać sesje blokujące, instrukcje i inne informacje, ale nie zablokowane tabele. W przeciwnym razie możesz spróbować wysłać zapytanie do odpowiednich widoków i zapisać potrzebne dane za pomocą własnego, niestandardowego skryptu.

Balazs Papp
źródło
2

Za pomocą poniższego zapytania możesz znaleźć blokady na stole.

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;

Blokowanie zamków

Santosh
źródło
0

Jeśli chcesz zwolnić blokadę na zablokowanym obiekcie, zabij odpowiednią sesję.

-- 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';
mahi_0707
źródło
0

Możesz sprawdzić blokadę stołu v$locki dba_objectswyświetlić. Poniższe zapytanie podaje szczegóły blokady.

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

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

Możesz użyć poniższego zapytania, które poda więcej szczegółów. Blokada stołu

Santosh
źródło