¿Cómo determinar si una tabla de Oracle está bloqueada o no?


22

Hemos estado utilizando software de BI y una base de datos de repositorio que está instalada en Oracle Enterprise 11gR2.

Algunos de estos informes por lotes intentarán acceder a una tabla de base de datos que aún puede estar bloqueada. ¿Cómo puedo saber si una tabla de Oracle está bloqueada o no? ¿Hay alguna instrucción SQL que se muestre como detalles del historial para el análisis?


Quiero decir que quiero mostrar cosas dentro de un intervalo de tiempo específico.
Selahattin

Por ejemplo: quiero enumerar todas las tablas bloqueadas entre las 02:00:00 p.m. y las 05:00:00 p.m. para un análisis más detallado.
Selahattin

En general, quiero encontrar tablas bloqueadas en Oracle?
Selahattin

1
@Selahattin ¿Estás hablando de un bloqueo de nivel de aplicación? Oracle generalmente no realiza el bloqueo de tablas debido a su nivel de serialización y diseño
Philᵀᴹ

Respuestas:


32

La siguiente consulta proporciona detalles de todos los bloqueos.

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

El siguiente script se puede utilizar para identificar rápidamente todos los objetos de bloqueo dentro de su sistema 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;

Referencia: -Oracle Tips por Burleson Consulting http://www.dba-oracle.com/t_find_oracle_locked_objects.htm


2

Puede consultar los objetos actualmente bloqueados desde V $ LOCKED_OBJECT .

Sin embargo, no hay historial para los bloqueos, el registro de todos los bloqueos generaría una sobrecarga de rendimiento enorme y una gran cantidad de datos para almacenar.

Lo más cercano que tiene la base de datos es el historial de sesión activa V $ ACTIVE_SESSION_HISTORY , DBA_HIST_ACTIVE_SESS_HISTORY (si tiene la licencia adecuada para usarlo), donde puede ver sesiones de bloqueo, declaraciones y otra información, pero no tablas bloqueadas. De lo contrario, puede intentar consultar las vistas apropiadas y guardar los datos necesarios con su propio script personalizado.


2

Usando la consulta a continuación, puede encontrar bloqueos en la tabla.

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;

Bloqueo de cerraduras


0

Si desea liberar el bloqueo del objeto bloqueado, elimine la sesión correspondiente.

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

Puede verificar el bloqueo de la tabla desde v$locky dba_objectsver. La consulta a continuación le dará los detalles del bloqueo.

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

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

Puede usar la consulta a continuación que le dará más detalles. Bloqueo de mesa

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.