Oracle的关于session的销毁资源回收问题的解决方案
来源:互联网 发布:数控车床编程30例带图 编辑:程序博客网 时间:2024/06/05 14:10
在Oracle中kill一个session采用如下语句:alter system kill session 'sid,serial#' ;
通过以下实验我们发现kill session并没有真正释放资源,还需要我们在OS里kill进程来达到资源的真正释放。
SQL> select sid,serial#,paddr,username,status from v$session where username is not null;
SID SERIAL# PADDR USERNAME STATUS
---------- ---------- -------- ------------------------------ --------
145 10 6CE4DDCC SJH INACTIVE
147 21 6CE4E3BC SFX INACTIVE
152 10 6CE4D1EC SYS ACTIVE
158 19 6CE4CBFC SYS INACTIVE
SQL> alter system kill session '145,10';
System altered
SQL> alter system kill session '147,21';
System altered
SQL> select sid,serial#,paddr,username,status from v$session where username is not null;
SID SERIAL# PADDR USERNAME STATUS
---------- ---------- -------- ------------------------------ --------
145 10 6CE7F368 SJH KILLED
147 21 6CE7F368 SFX KILLED
152 10 6CE4D1EC SYS ACTIVE
158 19 6CE4CBFC SYS INACTIVE
//kill session后PADDR这个字段变成一样的了。由于PADDR字段已经改变,我们无法通过v$session和v$process关联来获得spid(v$session的paddr和v$process的addr字段进行关联)。怎么处理?用进程和session之间的关系处理如下:
SQL> select p.addr from v$process p where pid <> 1
2 minus
3 select s.paddr from v$session s;
ADDR
--------
6CE4DDCC
6CE4E3BC
//ADDR找到了,那进程的spid也就是进程号就找到了。
SQL> select ADDR,PID,SPID FROM v$process where addr='6CE4DDCC';
ADDR PID SPID
-------- ---------- ------------
6CE4DDCC 19 3444
SQL> select ADDR,PID,SPID FROM v$process where addr='6CE4E3BC';
ADDR PID SPID
-------- ---------- ------------
6CE4E3BC 20 260
最后在unix环境用kill -9 spid杀掉进程,在windows环境用orakill sid spid杀掉进程。
从上面的实验我们发现oracle只是简单的把相关的session的paddr指向同一个虚拟地址。这样导致v$session和v$process关联失败,进程中断。oracle使用PMON进程去清理这些session,但等待一个被标记kill的session退出往往很花时间。实验结束的时候查看session:
SQL> select sid,serial#,paddr,username,status from v$session where username is not null;
SID SERIAL# PADDR USERNAME STATUS
---------- ---------- -------- ------------------------------ --------
142 54 6CE4E9AC SYS INACTIVE
145 10 6CE7F368 SJH KILLED
147 21 6CE7F368 SFX KILLED
152 10 6CE4D1EC SYS ACTIVE
158 19 6CE4CBFC SYS INACTIVE
//依然还在。但重新在session上执行操作的时候,会被告之ORA-00028: 您的会话己被终止。再次查询:
SQL> select sid,serial#,paddr,username,status from v$session where username is not null;
SID SERIAL# PADDR USERNAME STATUS
---------- ---------- -------- ------------------------------ --------
142 54 6CE4E9AC SYS INACTIVE
152 10 6CE4D1EC SYS ACTIVE
158 19 6CE4CBFC SYS INACTIVE
//session消失了。估计重新执行被kill的process,oracle会立即启动PMON来清除killed的session。实际上不杀进程,如果在killed的session上执行操作也会告之ORA-00028: 您的会话己被终止。PMON也会去立即清理该session。
本文来自融心-心灵的旅程(http://hexun.com/weiyingjun/default.html) 详细出处参考:http://weiyingjun.blog.hexun.com/54996653_d.html
- Oracle的关于session的销毁资源回收问题的解决方案
- Oracle的关于session的销毁资源回收问题的解决方案
- 关于session的销毁问题
- 关于application,session,request对象什么时候创建、销毁的问题
- PHP的垃圾回收机制及session的销毁原理
- 关于session销毁的一些总结
- 关于session的问题集锦解决方案
- 关于PHP--session的问题集锦解决方案
- 关于session的问题集锦解决方案
- session销毁的操作
- android tab切换的资源回收解决方案
- 关于Oracle中Session的干掉问题。
- Activity已销毁,创建的线程未回收问题
- Activity已销毁,创建的线程未回收问题
- 关于Oracle的session
- 关于Listener监听的session的定时销毁
- oracle数据库,关于乱码问题的解决方案
- 关于模态对话框的销毁问题
- Android Framework------之Keyguard 简单分析
- java-web 导出pdf文件并增加水印和照片
- SLAM入门学习资料分享
- LeetCode : Top K Frequent Elements
- 微信开发将自己的网络映射成外网80端口
- Oracle的关于session的销毁资源回收问题的解决方案
- 尽量在SQL中Group
- 存取数据为不可变数组又想改变内容
- spring MVC理解和主要使用的注解详解
- 欢迎使用CSDN-markdown编辑器
- 第17篇 原版更新到合成项目(一)及webrtc一次连通关键点分析
- CentOS-6.5中安装mysql-5.7.16-linux-glibc2.5-x86_64
- 小球移动js代码
- python 正态分布随机数 numpy.random.randn 使用小技