网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>数据库技术>>Oracle技术>>Oracle开发>查看文档  
  教你快速掌握oracle中"kill"进程的方法 (1)     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:68次  录入:管理员--2008-01-31  
 

1:首先,我们需要在oracle中找到锁住的对象:

width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "ffffff" align="center">
select xidusn, object_id, session_id, locked_mode from v$locked_object;

2:得到session_id后,再根据session_id找到v$session对应的sid号和serial#:

select username,sid,serial# from v$session where sid=session_id;

3:用oracle的slq kill掉相关的session sql语句:

alter system kill session 'sid,serial#';

4:如果不能kill掉,报ora-00031错:说明之前有kill过,这样找到这个进程spid slq语句:

select pro.spid from v$session ses,
v$process pro where ses.sid=129 and ses.paddr=pro.addr;

5:根据这个spid对应linux下的进程pid

linux命令:

ps -ef | gre | 'ora' (找到所有ora开头的进程)

kill -9 (pid)

下面主要介绍如果这个进程是killed状态的时候该怎么处理:

首先介绍三个视图:v$process是oracle处理的进程,v$session是oracle处理的会话,v$sqlarea是oracle处理的sql语句存放区就是共享池那东西。三个表联合查一下。

select p.pid,s.sid,s.serial#,p.spid,s.username,s.osuser,
p.serial#,p.terminal,p.program,p.background,s.status,
a.sql_text 
from v$process p, v$session s,v$sqlarea a where 
p.addr = s.paddr and s.sql_address = a.address (+) order by p.spid;

这里面查出来的就是oracle实时正在处理的sql语句过程等。当然还包含基本的(pmon)(dbw0)(lgwr)等后台进程。有时候大家在编译时,会发生怎么都编译不过去的现象,其实过程是好着的.这就是oracle出现了死锁。死锁了肯定是锁最后一个会话,那就是你编译的那个.这时候大家有可以要重新shutdown immediate才行解决问题.其实运行上面的语句再配合下面的就可以了。

在oracle数据库中,可以通过kill session的方式来终止一个进程,alter system kill session 'sid,serial#' ;这里sid,serial#就是上面的v$session.sid,v$session.serial#这二值,多运行几次上面的select语句就可以查出你被锁住的那个过程.其它不明的不能通杀了.这里关键就是要查出你要杀的v$session.sid,v$session.serial#二个值.然后做alter system kill session 'sid,serial#' ;做完以后.你的客户端一般就直接提示session killed.但也有不提示没反映.再运行select语句,发现v$session.status为killed.再等待还是一样.

从书上查知被kill掉的session,状态会被标记为killed,oracle会在该用户下一次touch时清除该进程.oracle就等待pmon去清除这些session.通常等待一个被标记为killed的session退出需要花费很长的时间.但我从来都没等及过.这不又白杀了.没关系,用必杀招,在linux下杀.你用select查出来的时候还有一个v$process.spid列.在liunx的$下运行top.[/img]你知发现了原来这一列的值,就是top下的pid值.那这样好办了.直接在liunx的$下 kill -9 v$process.spid 这个值是要你在select下要记录下的.好了.这就必杀了.过程编译不过去,肯定是有会话地运行.

select p.pid,s.sid,s.serial#,p.spid,s.username,s.osuser,
p.serial#,p.terminal,p.program,p.background,s.status,a.sql_text 
from v$process p, v$session s,v$sqlarea a where 
p.addr = s.paddr and s.sql_address = a.address (+) 
order by p.spid;和liunx的下的top你们会发现很多东西的.
比如说接口程序是很占cpu的还有查到实时会话.

ps和top都可以看系统中正在运行的进程

ps命令提供了当前运行进程的快照。

使用带有 -ef 选项的 ps ,返回系统中所有用户的所有进程的完整列表。如果您将此 ps 命令的结果传送到 grep 中,则该结果更易于查看。例如:

$ ps -ef | grep oracle

这条命令会显示:

uid pid ppid c stime tty time cmd 

oracle 1633 1 0 13:58 ?00:00:00 ora_pmon_ora1 

oracle 1635 1 0 13:58 ?00:00:00 ora_dbw0_ora1 

oracle 1637 1 0 13:58 ?00:00:01 ora_lgwr_ora1 

oracle 1639 1 0 13:58 ?00:00:02 ora_ckpt_ora1

下面是ps的选项

-a:列出所有的进程。

-l:显示长列表。

-m:显示内存信息。

-w:显示加宽可以显示较多的信息。

-e:显示所有进程。

a:显示终端上的所有进程,包括其它用户的进程。

-au:显示较详细的信息。

-aux:显示所有包含其它使用者的进程。

注:如果需要即时查看最活跃的进程,可以使用"top" 。

 
 
上一篇: 判断字段中是否含有中文字符的实例脚本    下一篇: “字符型”转换成“日期型”的实例脚本
  相关文档
oracle数据库9i和10g环境下使用*.ora 04-29
Oracle 容灾复制解决方案分析Shar Plex 06-17
轻松掌握删除oracle 10g垃圾表的好方法 11-21
linux上安装oracle汉字乱码问题的解决方法 08-07
讲解oracle failsafe与rac的联系与区别 06-11
轻松掌握oracle数据库开发中序列的使用 08-05
讲解linux环境下oracle的自动启动与停止 03-31
循序渐进讲解oracle数据库管理员的职责 (1) 04-29
Oracle的恢复管理器及DBMS_JOB包分析 04-11
实例讲解如何重复利用这个外部表的表结构 05-07
把非归档模式的Oracle数据改成归档模式 09-29
如何在高级的复制中切换主体定义站点 03-26
在Oracle9i中Oracle DATA计算时间差 04-23
Oracle数据库中基本动态Web开发和应用 04-11
创建物化视图提高查询速度 04-11
oracle 11g最有特点的五大特性都有哪些 01-28
教你轻松掌握Oracle内存结构 09-29
Oracle 9i 数据库移动过程 04-11
教你快速掌握Oracle中"HINT"的30个用法 09-29
个人经验总结:oracle数据库scn号详解 08-12
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息