已经有很多人问过这个问题了。
检查表锁定问题: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 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-SQL2
// 功能:检查被加锁的对象以及加锁的会话信息
// 如果需要手工解除锁,请对照要解锁的对象,记下SESSION_ID,SERIAL#项,然后运行下面的ALTER-SQL1
//select LOCK_INFO.OWNER||'.'||LOCK_INFO.OBJ_NAME as OBJ_NAME, // 对象名称(已经被锁住)
// LOCK_INFO.SUBOBJ_NAME as SUBOBJ_NAME, // 子对象名称(已经被锁住)
// SESS_INFO.MACHINE as MACHINE, // 机器名称
// LOCK_INFO.SESSION_ID as SESSION_ID, // 会话SESSION_ID
// SESS_INFO.SERIAL# as SERIAL#, // 会话SERIAL#
// LOCK_INFO.ORA_USERNAME as ORA_USERNAME, // ORACLE系统用户名称
// LOCK_INFO.OS_USERNAME as OS_USERNAME, // 操作系统用户名称
// LOCK_INFO.PROCESS as PROCESS, // 进程编号
// LOCK_INFO.OBJ_ID as OBJ_ID, // 对象ID
// LOCK_INFO.OBJ_TYPE as OBJ_TYPE, // 对象类型
// SESS_INFO.LOGON_TIME as LOGON_TIME, // 登录时间
// SESS_INFO.PROGRAM as PROGRAM, // 程序名称
// SESS_INFO.STATUS as STATUS, // 会话状态
// SESS_INFO.LOCKWAIT as LOCKWAIT, // 等待锁
// SESS_INFO.ACTION as ACTION, // 动作
// SESS_INFO.CLIENT_INFO as CLIENT_INFO // 客户信息
//
//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,
// PROGRAM,
// ACTION,
// CLIENT_INFO,
// LOGON_TIME,
// MACHINE
// from v$session
// ) SESS_INFO
//where LOCK_INFO.SESSION_ID=SESS_INFO.SID ;// ALTER-SQL1
// 功能:杀死会话(SESSION_ID,SERIAL#),可以手工解除锁
// 请手工修改SESSION_ID,SERIAL#为相应值
// 注意:本功能慎重使用,有一定的破坏性,该SQL可以断开客户机和服务器的连接//ALTER SYSTEM KILL SESSION 'SESSION_ID,SERIAL#';
set feedback offdrop table my_session;
create table my_session
as
select a.username, a.sid, a.serial#,
a.lockwait, a.machine,a.status,
a.last_call_et,a.sql_hash_value,a.program
from v$session a
where 1=2 ;
create unique index my_session_u1 on my_session(sid);
create index my_session_n2 on my_session(lockwait);
create index my_session_n3 on my_session(sql_hash_value);drop table my_lock;
create table my_lock
as
select id1, kaddr, sid, request,type
from v$lock
where 1=2;
create index my_lock_n1 on my_lock(sid);
create index my_lock_n2 on my_lock(kaddr);drop table my_sqltext;
create table my_sqltext
as
select hash_value , sql_text
from v$sqltext
where 1=2;
create index my_sqltext_n1 on my_sqltext (hash_value);prompt '删除旧记录.....'
truncate table my_session;
truncate table my_lock;
truncate table my_sqltext;prompt '获取数据.....'
insert into my_session
select a.username, a.sid, a.serial#,
a.lockwait, a.machine,a.status,
a.last_call_et,a.sql_hash_value,a.program
from v$session a
where a.username is not NULL;insert into my_lock
select id1, kaddr, sid, request,type
from v$lock;insert into my_sqltext
select hash_value , sql_text
from v$sqltext s, my_session m
where s.hash_value=m.sql_hash_value;column username format a10
column machine format a15
column last_call_et format 99999 heading "Seconds"
column sid format 9999prompt "正在等待别人的用户"
select a.sid, a.serial#,
a.machine,a.last_call_et, a.username, b.id1
from my_session a, my_lock b
where a.lockwait = b.kaddr;prompt "被等待的用户"
select a.sid, a.serial#,
a.machine, a.last_call_et,a.username, b.type,a.status,b.id1
from my_session a, my_lock b
where b.id1 in
(select distinct e.id1
from my_session d, my_lock e
where d.lockwait = e.kaddr)
and a.sid = b.sid
and b.request=0;prompt "查出其 sql "
select a.username, a.sid, a.serial#,
b.id1, b.type, c.sql_text
from my_session a, my_lock b, my_sqltext c
where b.id1 in
(select distinct e.id1
from my_session d, my_lock e
where d.lockwait = e.kaddr)
and a.sid = b.sid
and b.request=0
and c.hash_value =a.sql_hash_value;
prompt "释放锁住的资源:alter system kill session 'sid, serial#' "
'ALTER SYSTEM KILL SESSION '''||s.sid||', '||s.serial#||''';' Command
from v$locked_object l,v$session s,all_objects o
where l.session_id=s.sid and l.object_id=o.object_id