我們在運算元據庫
的 時候,有時候會由於操作不當引起資料庫表被鎖定,這麼我們經常不知所措,不知怎麼給這些表解鎖,在pl/sql developer工具的的選單「tools」裡面的「sessions」可以查詢現在存在的會話,但是我們很難找到那個會話被鎖定了,想找到所以被鎖的 會話就更難了,下面這叫查詢語句可以查詢出所以被鎖的會話。如下:1、
檢視被鎖的表:
select
p.spid,
c.object_name,
b.session_id,
a.serial#,
b.oracle_username,
b.os_user_name
from
v$process p, v$session a, v$locked_object b, all_objects c
where
p.addr = a.paddr
anda.process = b.process
andc.object_id = b.object_id;
解鎖:alter system kill session
'b.session_id,a.serial#';或
在系統層面終止程序:
[windows] ntsd -c q -p
p.spid
[linux]
ps -ef|grep
p.spid2、
查詢當前表鎖的方法:
select
all_objects.object_name,
s.sid,
s.serial#,
s.osuser,
s.program,
s.machine,
s.client_info
from
v$lock k, v$session s, all_objects
where
k.sid = s.sid
andk.typein(
'tx'
,'tm')
andk.id1 = all_objects.object_id;
v$locked_object
:用以詳細的描述了當前鎖定物件的詳細資訊,
object_id
為物件id
,session_id
為當前登入使用者
session
號,oracle_username
為oracle
的使用者名稱,
os_user_name
為作業系統使用者名稱等
v$lock
:該檢視說明當前鎖定的所有物件,鎖定
sid號,鎖定型別等資訊; 3
、查詢鎖 --
存在鎖請求,即被阻塞
select
sn.username,
m.sid,
sn.serial#,
m.type,
decode(m.lmode, 0
, 'none',
1,'null',
2,'row share',
3,'row excl.',
4,'share',
5,'s/row excl.',
6,'exclusive'
, lmode,
ltrim(to_char(lmode,
'990'
))) lmode,
decode(m.request, 0
, 'none',
1,'null',
2,'row share',
3,'row excl.',
4,'share',
5,'s/row excl.',
6,'exclusive'
, request,
ltrim(to_char(m.request,
'990'
))) request,
m.id1,
m.id2
from
v$session sn, v$lock m
where
sn.sid = m.sid
andm.request !=0
order
byid1, id2, m.request
--不存在鎖請求,但是鎖定的物件被其他會話請求鎖定
select
sn.username,
m.sid,
sn.serial#,
m.type,
decode(m.lmode, 0
, 'none',
1,'null',
2,'row share',
3,'row excl.',
4,'share',
5,'s/row excl.',
6,'exclusive'
, lmode,
ltrim(to_char(lmode,
'990'
))) lmode,
decode(m.request, 0
, 'none',
1,'null',
2,'row share',
3,'row excl.',
4,'share',
5,'s/row excl.',
6,'exclusive'
, request,
ltrim(to_char(m.request,
'990'
))) request,
m.id1,
m.id2
from
v$session sn, v$lock m
where
sn.sid = m.sid
andm.request =0
andm.lmode !=4
and(id1, id2)in(
select
s.id1, s.id2
from
v$lock s
where
request !=0
ands.id1 = m.id1
ands.id2 = m.id2)
order
byid1, id2, m.request
解決oracle表鎖死
oracle中檢視表是否被鎖 select rule a.sid,b.owner,object name,b.object type from v lock a,all objects b where a.type tm and a.id1 b.object id 查到的都是被鎖的表 這樣可以把它殺...
Oracle表被鎖解決方法
最近在工作中遇到了oracle資料庫表被鎖的情況,導致無法對錶進行修改,再這裡給大家分享一下解決方法,避免大家從踩坑 1 查詢鎖的session id mysql select session id from v locked object 例 3334 2 根據session id查詢鎖的會話資訊...
oracle之鎖表的解決方法
首先,查處鎖定表的session 的sid,serial os user name,machine name,terminal 和執行的語句 select l.session id sid,s.serial l.locked mode,l.oracle username,s.user l.os us...