|
| |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
很多时候由于非常或程序错误会导致个别进程占用大量系统资源,需要结束这些进程,通常可以使用以下命令Kill进程: alter system kill session \\\'sid,serial#\\\'; 但是此命令释放资源极为缓慢,详细可以参考:Oracle中Kill session的研究. 为了更迅速的释放资源,通常我们使用如下步骤来Kill进程: 1.首先在操作系统级kill进程 2.在数据库内部kill session 这样通常可以迅速中止进程,释放资源。 今天就碰到这样一个案例,其他朋友在数据库里kill session,可是长时间仍无效果: [oracle@danaly ~]$ sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.1.0 - Production on Thu Oct 27 11:09:50 2005 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options SQL> select sid,username,status from v$session; SID USERNAME STATUS ---------- ------------------------------ -------- .... 154 SCOTT KILLED ... 30 rows selected. 那按照我前面提到的步骤,首先查询得到该session对应的OS进程号: SQL> select \\\'kill -9 \\\'||spid from v$process where addr = (select paddr from v$session where sid=&sid); Enter value for sid: 154 old 1: select \\\'kill -9 \\\'||spid from v$process where addr = (select paddr from v$session where sid=&sid) new 1: select \\\'kill -9 \\\'||spid from v$process where addr = (select paddr from v$session where sid=154) \\\'KILL-9\\\'||SPID -------------------- kill -9 22702 SQL> ! 在操作系统级kill该进程: [oracle@danaly ~]$ ps -ef|grep 22702 oracle 22702 1 0 Oct25 ? 00:00:02 oracledanaly (LOCAL=NO) oracle 12082 12063 0 11:12 pts/1 00:00:00 grep 22702 [oracle@danaly ~]$ kill -9 22702 [oracle@danaly ~]$ ps -ef|grep 22702 oracle 12088 12063 0 11:12 pts/1 00:00:00 grep 22702 [oracle@danaly ~]$ exit exit SQL> select sid,username,status from v$session; SID USERNAME STATUS ---------- ------------------------------ -------- ... 154 SCOTT KILLED ... 30 rows selected. SQL> select sid,serial#,username from v$session where sid=154; SID SERIAL# USERNAME ---------- ---------- ------------------------------ 154 56090 SCOTT 再次在数据库中kill该session,并指定immediate选项: SQL> alter system kill session \\\'154,56090\\\' immediate; System altered. SQL> select sid,serial#,username from v$session where sid=154; no rows selected 此时该进程被快速清除。 返回类别: 教程 上一教程: 数据库查询结果的动态排序(2) 下一教程: 小知识?SQL SERVER 中系统表的作用 您可以阅读与"如何迅速杀死占用过多资源(CPU,内存)的数据库进程"相关的教程: · 如何使用ERWIN进行基于MYSQL的数据库设计 · 关于MSSQL占用过多内存的问题 · 如何得到当前所在的SQL的数据库名称 · 如何获取SQL SERVER数据库里表的占用容量大小 · 关于MSSQL占用过多内存的问题 |
| 快精灵印艺坊 版权所有 |
首页 |
||