欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

怎么找出是那个session锁住了一个表

更新时间: 2014-01-05 02:12:50 责任编辑: Author_N1

 

如何找出是那个session锁住了一个表
有个存储过程sp_init_emp 内容为:

select count(1) into i_count from user_tables where table_name='SESSION_TMP_EMP'
if i_count<1 then
    execute immediate 'create global temporary table SESSION_TMP_EMP
                        (
                              empid integer,
                              empname varchar2(22),
                              stype char(1)
                        ) on commit preserve rows' ;
else
   execute immediate 'truncate table SESSION_TMP_EMP ';
end if ;

execute immediate 'insert into SESSION_TMP_EMP 
                   select empid,empname,stype 
                   from rpt_emp where in_data=20130131';

commit;

也就是说,这个存储过程里面用到了一个session表


现在sqlplus中启动2个session
在session 1 中执行 exec sp_init_emp;

session 1执行完之后,在session 2 中 我想drop table SESSION_TMP_EMP
执行之后,会发现drop不了
ORA-14452: attempt to create, alter or drop an index on temporary table already in use

现在的问题是,我一定要drop掉这个表,
假设我们不知道是那个session 执行了sp_init_emp这个存储过程把SESSION_TMP_EMP表锁了

请问,这种情况下,如何找出是那个session把SESSION_TMP_EMP表锁了
--参考方法--
dba_ddl_locks找找
--参考方法--
SELECT A.SID,A.SERIAL#,A.USERNAME,B.TYPE FROM V$SESSION A,V$LOCK B WHERE A.SID=B.SID

--参考方法--
引用:
SELECT A.SID,A.SERIAL#,A.USERNAME,B.TYPE FROM V$SESSION A,V$LOCK B WHERE A.SID=B.SID
我就用这个查看。
--参考方法--
重点查v$session, v$sql, v$lock
--参考方法--
和我查询方式一样这个不错
--参考方法--
select b.owner,b.object_name,a.session_id,a.locked_mode,a.oracle_username,a.os_user_name
from v$locked_object a,dba_objects b
where b.object_id = a.object_id
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:12:50
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7054/
本文WWW.DOC100.NET DOC100.NET版权所有。