批量kill杀死某些会话session的PL/SQL
原文:http://blog.itpub.net/9240380/viewspace-666622/
SQL> declare
2 v_sid v$session.sid%type; --定义如下两个type类型,用于接收cursor
v_serial# v$session.serial#%type;
3 4 cursor cur_session is select sid,serial# from v$session where program ='plsqldev.exe'; --#定义cursor
5 begin
6 open cur_session; --打开cusor
7 loop --打开游标马上开始循环,因为cursor是一条条取数据的
8 fetch cur_session into v_sid,v_serial#; --把游标的数据放入上面定义的type变量中
9 --根据以上的type变量及游标生成批量杀session的动态sql脚本,并执行
10 execute immediate 'alter system kill session '''||v_sid||','||v_serial#||''' immediate';
11 exit when cur_session%notfound; --要加个异常处理,不然永远是死循环
12 dbms_output.put_line('cursor date have been fetched ending');
13 end loop; --loop也有成双匹配出现
14 close cur_session; --游标处理完后,关闭游标
15 end;
16 /
declare
*
ERROR at line 1:
ORA-00030: User session ID does not exist.
ORA-06512: at line 10
明显杀会话时候,会话不存在。再执行类似的PL/SQL 块
SQL> SET serverout ON
SQL> DECLARE
2 v_ename EMP.ENAME%TYPE;
3 v_salary EMP.SAL%TYPE;
4 CURSOR c_emp IS SELECT ename,sal FROM emp;
5 BEGIN
6 OPEN c_emp;
7 loop
8 exit when c_emp%notfound;
9 FETCH c_emp INTO v_ename,v_salary;
10 DBMS_OUTPUT.PUT_LINE('Salary of Employee: '|| v_ename ||' is '|| v_salary);
11 end loop;
12 CLOSE c_emp;
13 END ;
14 /
Salary of Employee: SMITH is 800
Salary of Employee: ALLEN is 1600
Salary of Employee: WARD is 1250
Salary of Employee: JONES is 2975
Salary of Employee: MARTIN is 1250
Salary of Employee: BLAKE is 2850
Salary of Employee: CLARK is 2450
Salary of Employee: SCOTT is 3000
Salary of Employee: KING is 5000
Salary of Employee: TURNER is 1500
Salary of Employee: ADAMS is 1100
Salary of Employee: JAMES is 4400
Salary of Employee: FORD is 3000
Salary of Employee: MILLER is 1300
Salary of Employee: MILLER is 1300
结果最后一行循环执行了2次,在杀会话plsql中,杀最后一个会话操作也执行了2次,所以会遇到报错。
调整PL/SQL 块语句,将exit when cur_session%notfound; 放在fetch 之后,也就是要循环执行的语句之前就解决了
declare
v_sid v$session.sid%type; --定义如下两个type类型,用于接收cursor
v_serial# v$session.serial#%type;
cursor cur_session is select sid,serial# from v$session where program ='plsqldev.exe'; --#定义cursor
begin
open cur_session; --打开cusor
loop --打开游标马上开始循环,因为cursor是一条条取数据的
fetch cur_session into v_sid,v_serial#; --把游标的数据放入上面定义的type变量中
exit when cur_session%notfound; --要加个异常处理,不然永远是死循环
--根据以上的type变量及游标生成批量杀session的动态sql脚本,并执行
execute immediate 'alter system kill session '''||v_sid||','||v_serial#||''' immediate';
dbms_output.put_line('cursor date have been fetched ending');
end loop; --loop也有成双匹配出现
close cur_session; --游标处理完后,关闭游标
end;
/
SQL> select sid,serial#,status from v$session where program ='plsqldev.exe';
SID SERIAL# STATUS
---------- ---------- --------
26 27 INACTIVE
1159 189 INACTIVE
SQL>
SQL> declare
2 v_sid v$session.sid%type; --定义如下两个type类型,用于接收cursor
3 v_serial# v$session.serial#%type;
4 cursor cur_session is select sid,serial# from v$session where program ='plsqldev.exe'; --#定义cursor
5 begin
6 open cur_session; --打开cusor
7 loop --打开游标马上开始循环,因为cursor是一条条取数据的
8 fetch cur_session into v_sid,v_serial#; --把游标的数据放入上面定义的type变量中
9 exit when cur_session%notfound; --要加个异常处理,不然永远是死循环
10 --根据以上的type变量及游标生成批量杀session的动态sql脚本,并执行
11 execute immediate 'alter system kill session '''||v_sid||','||v_serial#||''' immediate';
12 dbms_output.put_line('cursor date have been fetched ending');
13 end loop; --loop也有成双匹配出现
14 close cur_session; --游标处理完后,关闭游标
15 end;
16 /
cursor date have been fetched ending
cursor date have been fetched ending
PL/SQL procedure successfully completed.
SQL> select sid,serial#,status from v$session where program ='plsqldev.exe';
no rows selected
批量kill杀死某些会话session的PL/SQL的更多相关文章
- 开发人员需求能kill杀死其它阻塞自己的会话,测试发现需要alter system权限有风险
模拟开发人员需求,可以杀死其它阻塞自己的会话1.能有查询阻塞会话确认的权限SQL> grant select on v_$session to testa;SQL> grant selec ...
- PL/SQL 报错:动态执行表不可访问,本会话的自动统计被禁止。 在执行菜单里你可以禁止统计,或在v$session,v$sesstat 和vSstatname表里获得选择权限。
现象: 第一次用PL/SQL Developer连接数据库,若用sys用户登录并操作则正常,若用普通用户比如haishu登录并创建一个表则报错“动态执行表不可访问,本会话的自动统计被禁止.在执行菜单里 ...
- 锁_rac环境kill锁表会话后出现killed状态(解决)
原创作品,出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46876961 ra ...
- 六.dbms_session(提供了使用PL/SQL实现ALTER SESSION命令)
1.概述 作用:提供了使用PL/SQL实现ALTER SESSION命令,SET ROLE命令和其他会话信息的方法 .2.包的组成 1).set_identifier说明:用于设置会话的客户ID号.语 ...
- 简单PHP会话(session)说明
现在程序员愈发的不容易了,想要精通,必然要寻本溯源,这其实与目前泛滥的愈发高级的语言以及众多的框架刚好相反,因为它们在尽可能的掩盖本源使其简单,个人称之为程序员学习悖论. 注:作者接触web开发和ph ...
- paip.mysql 批量kill 连接.
paip.mysql 批量kill 连接. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net ...
- PL/SQL中批量执行SQL脚本(不可把所有的语句都复制到New SQL Windows)
PL/SQL中批量执行SQL脚本,不可把所有的语句都复制到New SQL Window,因为这样会导致缓冲区过大而进程卡死! 最好的办法是将要执行的SQL脚本存放到指定文件中,如C:\insert.s ...
- http 会话(session)详解
会话(session)是一种持久网络协议,在用户(或用户代理)端和服务器端之间创建关联,从而起到交换数据包的作用机制 一.查看session id 可利用相关工具,比如firebug,httpwatc ...
- Tensorflow会话Session
转载自: http://blog.csdn.net/Hanging_Gardens/article/details/72784392 https://www.cnblogs.com/hypnus-ly ...
随机推荐
- Linux 重置root密码
1.首先输入:sudo passwd root(设置root密码) 2.输入当前系统的账户密码(账户:my的密码) 3.输入新的root密码,确认新 4.密码,密码更新成功 5.在提示符处输入:su按 ...
- Java基础之引用(String,char[],Integer)总结于牛客网的专项练习题
1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer ...
- 实用爬虫-02-爬虫真正使用代理 ip
实用爬虫-02-爬虫真正使用代理 ip 因为这里呢,是实用爬虫,想要仔细学习一些基础的,可以去查看: Python 爬虫教程:https://www.cnblogs.com/xpwi/category ...
- 【转】pscp实现远程文件(夹)传输
原文地址:http://blog.163.com/yang_jianli/blog/static/16199000620128251383197/ pscp与linux下的scp命令相似,功能相同,在 ...
- spring事务的理解
特性 一致性:业务处理要么都成功,要么都失败,不能部分成功不分失败 原子性:业务操作是由多个动作完成,这些动作不可分割,要么都执行,要么都不执行 隔离性:事务间之间要做隔离,不要互相影响 持久性:操作 ...
- August 04th 2017 Week 31st Friday
Love is a vine that grows into our hearts. 爱是长在我们心里的藤蔓. What is love? Maybe no one can explain it cl ...
- ZT 打工者买彩票中1000万 5年后变逃犯身上剩80元
打工者买彩票中1000万 5年后变逃犯身上剩80元 2014-01-07 08:22 来源:都市快报 我有话说 挥霍—— 从800万到80元 在湖南永州零陵区富家桥镇茶叶湾村,陈某是不折不扣的名人 ...
- FOR YOU
给你 作者:余秀华 一家朴素的茶馆, 面前目光朴素的你皆为我喜欢 你的胡子,昨夜辗转的面色让我忧伤 我想带给你的,一路已经丢失得差不多 除了窗外凋谢的春色 遇见你以后,你不停地爱别人,一个接一个 我没 ...
- [TOP10]最受欢迎的10个Metasploit模块和插件
很多人都想知道最受欢迎的10个Metasploit模块和插件是什么(TOP10),事实上这是一个很难回答的问题,因为什么才叫"Top"?我想每个人都有每个人的看法.于是我们通过调查 ...
- JS:二维数组排序和获取子级元素
JS:二维数组排序和获取子级元素 1. 二维数组排序 1.按数值排序 var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]]; 如果我们要按每个子数组的第一列来排序要如 ...