1、查詢鎖表的sid 和 serial#
select
s.sid
,s.serial#
from
v$locked_object lo
,dba_objects ao
,v$session s
where
ao.object_id
=lo.object_id
andlo.session_id
=s.sid;
2、查詢鎖死的表名,使用者
select
sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from
v$locked_object lo,
dba_objects ao,
v$session sess
where
ao.object_id
=lo.object_id
andlo.session_id
=sess.sid;
3、--找到該物件導致的鎖的session會話,並編寫語句
殺死導致死鎖的會話,怎麼找關於這個表的session卻沒有提到,這裡做個說明:
--找到表物件(表名要大寫)
select * from dba_objects where object_name='tmp_da_gms'
--找到該物件導致的鎖的session會話,並編寫語句(id1是第乙個語句查詢出的object_id值)
select 'alter system kill session '''||sid||','||serial#||''';' from v$session where sid in ( select sid from v$enqueue_lock t where t.type='to' and id1='99879' )
--執行生成後的sql語句解除死鎖
例:要先執行第一步和第二步,查出相應的表名、sid和serial#
1)select
*from
dba_objects
where
object_name
='bl_clinic_consult';
2)select
'alter system kill session '''
||673
||','
||415
||''';'
from
bl_clinic_consult
where
idin
(selectid
from
bl_clinic_consult t
where
t.id
='673')
3)alter
system
kill
session
'1982,442'
;
oracle查詢鎖表並解鎖
一些oracle中的程序被殺掉後,狀態被置為 killed 但是鎖定的資源很長時間不釋放,有時實在沒辦法,只好重啟資料庫。現在提供一種方法解決這種問題,那就是在oracle中殺不掉的,在os一級再殺。1.下面的語句用來查詢哪些物件被鎖 select object name,machine,s.sid...
Oracle 鎖表 鎖表查詢 結束鎖表程序
1.oracle 鎖表 lock table 表名字in exclusive mode 所記錄 select from 表名字 for update 2.oracle 鎖表查詢 selectb.owner,b.object name,a.session id,a.locked mode from v...
3 全域性鎖 表鎖 行鎖,死鎖
對整個資料庫例項加鎖。mysql提供加全域性讀鎖的方法 flush tables with read lock ftwrl 這個命令可以使整個庫處於唯讀狀態。使用該命令之後,資料更新語句 資料定義語句和更新類事務的提交語句等操作都會被阻塞。可以用unlock tables主動釋放鎖 1.如果在主庫備...