oracle中已killed session的处理
### Oracle中已Killed Session的处理 #### 一、背景介绍 在Oracle数据库管理中,有时会遇到一些异常情况,比如某个Session长时间未响应或占用大量资源,这时可能需要管理员手动干预,通过`ALTER SYSTEM KILL SESSION 'SID,SERIAL#'`命令来强制终止这个Session。然而,在某些情况下,即使Session已经被标记为“KILLED”,Oracle系统仍然可能不会立即回收该Session所占用的资源。这种情况下,就需要采取进一步措施来清理这些残留的Session。 #### 二、识别已Killed Session 当一个Session被标记为“KILLED”后,通常可以通过以下步骤来识别它: 1. **确定被Killed的Session**: - 使用`ALTER SYSTEM KILL SESSION 'SID,SERIAL#'`命令手动终止Session。 - 检查`v$session`视图中的状态列,如果状态为“KILLED”,则表示该Session已被终止。 2. **查找残留进程**: - 由于被Killed的进程的物理地址(PADDR)发生了变化,因此无法通过`v$session`和`v$process`视图之间的关联来查找SPID。 - 可以通过以下SQL语句找出存在于`v$process`中但不在`v$session`中的进程: ```sql SELECT p.addr FROM v$process p WHERE pid <> 1 MINUS SELECT s.paddr FROM v$session s; ``` 3. **验证进程性质**: - 确认找到的进程不是重要的后台进程。可以使用以下SQL语句获取相关信息: ```sql SELECT spid, username, terminal, program, background FROM v$process WHERE addr IN ('C0000005C32975D8', 'C0000005C3297AE0', 'C0000005C3297FE8'); ``` #### 三、处理已Killed Session 1. **确认进程性质**: - 通过查询结果判断是否为重要的后台进程。如果确认不是重要进程,则可以继续下一步操作。 - 示例查询结果显示这些进程不是重要后台进程,而是与共享服务器相关的进程或通过TNS连接的进程。 2. **操作系统级终止进程**: - 如果确认不是重要后台进程,可以通过操作系统命令来终止该进程。例如,使用`kill -9 [SPID]`命令,其中[SPID]是操作系统进程ID。 - 示例中,使用`kill -9 9370`命令终止了进程。 3. **检查清理结果**: - 终止进程后,再次检查`v$session`视图中是否有状态为“KILLED”的Session。 - 如果没有返回任何结果,则表示已成功清理了被Killed的Session。 #### 四、总结 本文详细介绍了如何处理Oracle数据库中已Killed的Session。通过一系列步骤,包括识别已Killed的Session、查找残留进程、验证进程性质以及操作系统级终止进程等,可以有效地解决此类问题,确保数据库资源得到合理管理和利用。这种方法对于数据库管理员来说是非常实用的,能够帮助他们在遇到类似问题时快速响应并解决问题。
- mafeiyan2013-06-03有点失望,网上有现成的
- 粉丝: 3
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助