oracle查詢鎖表與解鎖情況提供解決方案
如果發(fā)生了鎖等待,我們可能更想知道是誰(shuí)鎖了表而引起誰(shuí)的等待
以下的語(yǔ)句可以查詢到誰(shuí)鎖了表:
SELECT /*+ rule */ s.username,
decode(l.type,'TM','TABLE LOCK',
'TX','ROW LOCK',
NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT NULL
以下的語(yǔ)句可以查詢到誰(shuí)在等待:
SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name, o.owner,o.object_name,o.object_type,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
ORDER BY o.object_id,xidusn DESC
解鎖命令:
alter system kill session 'sid,serial#'
1).
select LOCK_INFO.OWNER || '.' || LOCK_INFO.OBJ_NAME as "已鎖物件名稱", --物件名稱(已經(jīng)被鎖住)
LOCK_INFO.SUBOBJ_NAME as "已鎖子物件名稱", -- 子物件名稱(已經(jīng)被鎖住)
SESS_INFO.MACHINE as "機(jī)器名稱", -- 機(jī)器名稱
LOCK_INFO.SESSION_ID as "會(huì)話ID", -- 會(huì)話SESSION_ID
SESS_INFO.SERIAL# as "會(huì)話SERIAL#", -- 會(huì)話SERIAL#
SESS_INFO.SPID as "OS系統(tǒng)的SPID", -- OS系統(tǒng)的SPID
(SELECT INSTANCE_NAME FROM V$INSTANCE) "實(shí)例名SID", --實(shí)例名SID
LOCK_INFO.ORA_USERNAME as "ORACLE用戶", -- ORACLE系統(tǒng)用戶名稱
LOCK_INFO.OS_USERNAME as "OS用戶", -- 作業(yè)系統(tǒng)用戶名稱
LOCK_INFO.PROCESS as "進(jìn)程編號(hào)", -- 進(jìn)程編號(hào)
LOCK_INFO.OBJ_ID as "對(duì)象ID", -- 對(duì)象ID
LOCK_INFO.OBJ_TYPE as "對(duì)象類型", -- 對(duì)象類型
SESS_INFO.LOGON_TIME as "登錄時(shí)間", -- 登錄時(shí)間
SESS_INFO.PROGRAM as "程式名稱", -- 程式名稱
SESS_INFO.STATUS as "會(huì)話狀態(tài)", -- 會(huì)話狀態(tài)
SESS_INFO.LOCKWAIT as "等待鎖", -- 等待鎖
SESS_INFO.ACTION as "動(dòng)作", -- 動(dòng)作
SESS_INFO.CLIENT_INFO as "客戶資訊" -- 客戶資訊
from (select obj.OWNER as OWNER,
obj.OBJECT_NAME as OBJ_NAME,
obj.SUBOBJECT_NAME as SUBOBJ_NAME,
obj.OBJECT_ID as OBJ_ID,
obj.OBJECT_TYPE as OBJ_TYPE,
lock_obj.SESSION_ID as SESSION_ID,
lock_obj.ORACLE_USERNAME as ORA_USERNAME,
lock_obj.OS_USER_NAME as OS_USERNAME,
lock_obj.PROCESS as PROCESS
from (select *
from all_objects
where object_id in (select object_id from v$locked_object)) obj,
v$locked_object lock_obj
where obj.object_id = lock_obj.object_id) LOCK_INFO,
(select SID,
SERIAL#,
LOCKWAIT,
STATUS,
(select spid from v$process where addr = a.paddr) spid,
PROGRAM,
ACTION,
CLIENT_INFO,
LOGON_TIME,
MACHINE
from v$session a) SESS_INFO
where LOCK_INFO.SESSION_ID = SESS_INFO.SID
order by LOCK_INFO.SESSION_ID;
2).
select sql_text
from v$sqltext
where address in (select sql_address from v$session where sid = &sid)
order by piece;
3).
ALTER SYSTEM KILL SESSION '會(huì)話ID,會(huì)話SERIAL#';
4).
kill -9 OS系統(tǒng)的SPID
相關(guān)文章
oracle刪除主鍵查看主鍵約束及創(chuàng)建聯(lián)合主鍵
本節(jié)文章主要介紹了oracle刪除主鍵查看主鍵約束及創(chuàng)建聯(lián)合主鍵,示例代碼如下,需要的朋友可以參考下2014-07-07Oracle模糊查詢的幾種方法匯總【最后一種最優(yōu)】
這篇文章主要介紹了Oracle模糊查詢的幾種方法匯總,針對(duì)每種方法小編給大家做了解析說(shuō)明,在這推薦第三種,需要的朋友可以參考下2023-07-07SQL案例學(xué)習(xí)之字符串的合并與拆分方法總結(jié)
這篇文章主要給大家介紹了關(guān)于SQL案例學(xué)習(xí)之字符串的合并與拆分的相關(guān)資料,文中分別介紹了兩種方法,對(duì)大家學(xué)習(xí)或者使用oracle具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-08-08Oracle靜態(tài)注冊(cè)與動(dòng)態(tài)注冊(cè)詳解
這篇文章主要介紹了Oracle靜態(tài)注冊(cè)與動(dòng)態(tài)注冊(cè),需要的朋友可以參考下2014-07-07delete archivelog all無(wú)法清除歸檔日志解決方法
最近在因歸檔日志暴增,使用delete archivelog all貌似無(wú)法清除所有的歸檔日志,究竟是什么原因呢?本文將為您解答,需要的朋友可以參考下2012-12-12ORACLE實(shí)現(xiàn)字段自增示例說(shuō)明
如何實(shí)現(xiàn)oracle中字段的自增,下面用一個(gè)例子來(lái)說(shuō)明,有此需求的各位朋友可以參考下2013-11-11PL/SQL編程經(jīng)驗(yàn)小結(jié)開(kāi)發(fā)者網(wǎng)絡(luò)Oracle
PL/SQL編程經(jīng)驗(yàn)小結(jié)開(kāi)發(fā)者網(wǎng)絡(luò)Oracle...2007-03-03Oracle中行列轉(zhuǎn)換兩種實(shí)現(xiàn)方法
在Oracle中可以使用多種方法來(lái)實(shí)現(xiàn)行轉(zhuǎn)列和列轉(zhuǎn)行,這篇文章主要給大家介紹了關(guān)于Oracle中行列轉(zhuǎn)換的兩種實(shí)現(xiàn)方法,文中介紹的是用PIVOT和UNPIVOT函數(shù),需要的朋友可以參考下2023-11-11