Oracle 死锁查询与处理

代码一

--- 查看锁以DBA权限登录
select 
  S.MACHINE as "机器名",
  S.SID as "SID",
  S.SERIAL# as "Serial#",
  O.OWNER as "拥有者",
  O.OBJECT_NAME as "对象名",
  O.SUBOBJECT_NAME as "子对象名",
  O.OBJECT_ID as "对象ID",
  O.OBJECT_TYPE as "对象类型",
  L.ORACLE_USERNAME as "ORACLE系统用户名",
  L.OS_USER_NAME as "操作系统用户名",
  L.PROCESS as "进程编号",
  S.LOGON_TIME as "登录时间",
  S.PROGRAM as "程序名",
  S.STATUS as "会话状态",
  S.LOCKWAIT as "等待锁",
  S.ACTION as "动作",
  S.CLIENT_INFO as "客户信息"
from V$LOCKED_OBJECT L
  left join DBA_OBJECTS O
    on O.OBJECT_ID = L.OBJECT_ID
  left join V$SESSION S
    on S.SID = L.SESSION_ID
;
--杀死进程
alter system kill session '<SESSION_ID>,<SERIAL#>';

代码二

--- 查看锁以DBA权限登录
select LI.OWNER || '.' || LI.OBJ_NAME as 被锁对象名称, 
	LI.SUBOBJ_NAME as 被锁子对象名称,
	SI.MACHINE as 机器名称,
	LI.SESSION_ID as SESSION_ID, 
	SI.SERIAL# as SERIAL#,
	LI.ORA_USERNAME as ORACLE系统用户名,
	LI.OS_USERNAME as 操作系统用户名,
	LI.PROCESS as 进程编号,
	LI.OBJ_ID as 对象ID,
	LI.OBJ_TYPE as 对象类型,
	SI.LOGON_TIME as 登录时间,
	SI.PROGRAM as 程序名,
	SI.STATUS as 会话状态,
	SI.LOCKWAIT as 等待锁,
	SI.ACTION as 动作,
	SI.CLIENT_INFO as 客户信息
from (select o.OWNER as OWNER,
		o.OBJECT_NAME as OBJ_NAME,
		o.SUBOBJECT_NAME as SUBOBJ_NAME,
		o.OBJECT_ID as OBJ_ID,
		o.OBJECT_TYPE as OBJ_TYPE,
		lo.SESSION_ID as SESSION_ID,
		lo.ORACLE_USERNAME as ORA_USERNAME,
		lo.OS_USER_NAME as OS_USERNAME,
		lo.PROCESS as PROCESS
	from (select *
			from all_objects
			where object_id in (select object_id from v$locked_object)) o,
			v$locked_object lo
		 where o.object_id = lo.object_id) LI,
		(select SID,
			SERIAL#,
			LOCKWAIT,
			STATUS,
			PROGRAM,
			ACTION,
			CLIENT_INFO,
			LOGON_TIME,
			MACHINE
		from V$SESSION) SI
where LI.SESSION_ID = SI.sid;

--杀死进程
alter system kill session '<SESSION_ID>,<SERIAL#>';

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注