锁表,相信大家都遇到过,解锁的方法想必大家也都知道,但是一个个的杀进程难免有些低级,我们用存储过程来实现这一功能,就变得异常简单了。1.建立视图,查询进程信息,注意要给当前用户赋予系统权限select any dictionarycreate or replace view mysession as
select b.sid,b.serial# from v$lock a,v$session b where a.SID = b.SID and status="INACTIVE"
--and program<>"plsqldev.exe"
order by machine;2.创建存储过程,循环上边试图中的数据,一一kill,注意需要当前用户赋予系统权限alter systemcreate or replace procedure kill_session is
v_sid varchar2(30);
v_serial varchar2(30);
v_sql varchar2(1000);
TYPE DyData IS REF CURSOR;
rows DyData;
begin v_sql := "select * from mysession ";
OPEN rows FOR v_sql;
LOOP
FETCH rows
into v_sid, v_serial;
v_sql := "alter system kill session """ || v_sid || "," || v_serial || """";
execute immediate v_sql;
--dbms_output.put_line(v_userid || "__" || v_user || "__" || v_pwd);
EXIT WHEN rows%NOTFOUND;
END LOOP;end kill_session;3.执行存储过程begin
-- Call the procedure
kill_session;
end;注意有时候可能会把自己的进程也杀掉,只需要自己修改一下第一步的视图,把自己排除即可。
相关阅读:Oracle 10 DBMS_MONITOR跟踪和分析其它session SQL http://www.linuxidc.com/Linux/2013-08/88774.htm快速找到跟踪其他session产生的trc文件 http://www.linuxidc.com/Linux/2013-08/88582.htmOracle 彻底 kill session http://www.linuxidc.com/Linux/2013-06/86339.htmMySQL主从故障处理--session 级别参数复制错误 http://www.linuxidc.com/Linux/2013-04/83091.htm如何查看Oracle数据库的session阻塞 http://www.linuxidc.com/Linux/2013-01/77199.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12Oracle_PL/SQL的基本写法_BEGIN_END块结构及简单的事务实现Oracle--用户管理与权限分配相关资讯 Oraclesession 本文评论 查看全部评论 (0)