1).查詢是哪些表被鎖了
select a.owner,
a.object_name,
b.xidusn,
b.xidslot,
b.xidsqn,
b.session_id,
b.oracle_username,
b.os_user_name,
b.process,
b.locked_mode,
c.machine,
c.status,
c.server,
c.sid,
c.serial#,
c.program
from all_objects a,
v$locked_object b,
sys.gv_$session c
where ( a.object_id = b.object_id )
and (b.process = c.process )
order by 1,2
或者用
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
(2).釋放session sql:
alter
system
kill
session
'sid, serial#'例:
alter
system
kill
session
'379, 21132
'alter
system
kill
session
'374, 6938
'可以用如下查詢批量得到上面類似的語句:
select 'alter system kill session ''' ||s.sid||','||s.serial#||'''; '
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
(3).如果利用上面的命令殺死乙個程序後,程序狀態被置為 "killed", 但是鎖定的資源很長時間沒有被釋放,那麼可以在os一級再殺死相應的程序(執行緒),首先獲得程序(執行緒)號:
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=#sid; (#sid是上面的sid)
(4).在作業系統中殺掉相應的程序(執行緒):
1)在linux上,用root身份執行命令:
kill -9 12345(12345是第3步查詢出的spid)
其中:sid:表示要殺死的程序屬於的例項名
thread:是要殺掉的執行緒號,即第3步查詢出的spid。
例:c:>orakill orcl 12345
完全可以寫乙個組合查詢的儲存過程來自動執行上述四步操作,方便地殺光所有不自動釋放資源的程序,但一般情況下不推薦這樣做,畢竟在系統中用root使用者kill程序本身就是帶有一定風險的!
Oracle使用者被鎖的原因及解決辦法
oracle使用者被鎖的原因及解決辦法 在登陸時被告知test使用者被鎖 1 用dba角色的使用者登陸,進行解鎖,先設定具體時間格式,以便檢視具體時間 sql alter session set nls date format yyyy mm dd hh24 mi ss session altere...
表被鎖住 解決辦法
一 應急辦法 select request session id spid,object name resource associated entity id tablename from sys.dm tran locks where resource type object declare sp...
oracle 資料表被鎖定解決辦法
今天操作oracle資料庫時,更新一張表中的乙個字段值,一直沒有更新成功,後來發現,表被別的使用者鎖定,後來採用下面的方法解決了這個問題!update ems csg set device id csg000000000000001 where name viss csg 上面的sql語句執行後,表...