Как определить, заблокирована ли таблица Oracle или нет?

22

Мы использовали программное обеспечение BI и базу данных хранилища, которые установлены в Oracle Enterprise 11gR2.

Некоторые из этих пакетных отчетов будут пытаться получить доступ к таблице базы данных, которая все еще может быть заблокирована. Как я могу узнать, заблокирована ли таблица Oracle или нет? Есть ли какой-нибудь оператор SQL, который отображает детали истории, как анализ?

Selahattin
источник
Я имею в виду, я хочу отображать вещи в течение определенного промежутка времени.
Селахаттин
Например: я хочу перечислить все заблокированные таблицы между 14:00:00 - 17:00:00 для дальнейшего анализа.
Селахаттин
Вообще я хочу найти заблокированные таблицы в Oracle?
Селахаттин
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 http://www.dba-oracle.com/t_find_oracle_locked_objects.htm

Ali786
источник
2

Вы можете запросить заблокированные в данный момент объекты из V $ LOCKED_OBJECT .

Хотя истории блокировок нет, ведение журнала всех блокировок может привести к значительному снижению производительности и сохранению большого количества данных.

Наиболее близкая база данных - это история активных сессий V $ ACTIVE_SESSION_HISTORY , DBA_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';
mahi_0707
источник
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;

Вы можете использовать ниже запрос, который даст вам более подробную информацию. Блокировка стола

Сантош
источник