eygle's life

没有Oracle,世界将会怎样?

用户操作
[即时聊天] [发私信] [加为好友]
盖国强ID:eygle
322979次访问,排名163好友0人,关注者16
eygle的文章
原创 223 篇
翻译 0 篇
转载 5 篇
评论 368 篇
eygle的公告


最近评论
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
lynx1111:老大, 能问一下一本书赚多少银子吗?
cyco008:我运行的两种取得的SCN值也不同,而且第一次运行select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;与第二次也不同,之后的与第二次才一样。
liuya1985liuya:买了,看完了 感觉不错。
请问怎样才看一个DBA,我是做J2EE开发的,计划转做DBA,事实是也正在努力,两个多月了想找一份初级DBA或是维护又或是开发的工作,仍未找到......
liuya1985liuya:不错 买了
文章分类
收藏
    相册
    友情链接
    eygle的个人站点
    Fenng的个人站点
    我在itpub的Blog
    雪狼的个人站点
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 Oracle HowTo:如何快速杀死占用过多资源(CPU,内存)的数据库进程收藏

    新一篇: 我的写作进度之三-初稿完成 | 旧一篇: Oracle HowTo:如何在Oracle10g中启动和关闭OEM

    作者:eygle
    出处:http://www.eygle.com/blog
    日期:October 27, 2005
    本文链接:http://www.eygle.com/archives/2005/10/oracle_howto_kill_session.html

    « Why My server Down? | Blog首页 | Oracle HowTo:如何在Oracle10g中启动和关闭OEM »


    很多时候由于异常或程序错误会导致个别进程占用大量系统资源,需要结束这些进程,通常可以使用以下命令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
    

    此时该进程被迅速清除。

    发表于 @ 2005年11月10日 23:19:00|评论(loading...)|编辑

    新一篇: 我的写作进度之三-初稿完成 | 旧一篇: Oracle HowTo:如何在Oracle10g中启动和关闭OEM

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © eygle