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

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

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常用的SQL语法和数据对象 08-05
深入讲解ora-00600 2262错误的解决方法 04-03
exp的版本高于数据库版本导出时出现报错 03-03
用events 跟踪解决不能创建物化试图一例 06-17
解决未找到oracle客户端和网络组件现象 04-22
oracle数据库exp imp按用户导出导入实例 (1) 03-31
如何判断一个字符串的内容是否是数值 04-03
Oracle建立二进制文件索引的方法 09-29
怎样使用errorstack进行错误跟踪及诊断 11-15
Oracle数据库中有关CBO优化的三个问题 09-01
Oracle数据库中如何改善表空间的管理 04-11
教你快速掌握如何使用"opatch"打补丁 03-10
影响oracle数据库系统性能的初始化参数 11-19
讲解jython访问oracle数据库的具体步骤 03-19
oracle数据库中如何建立二进制文件索引 (1) 03-24
关于Oracle中表外键更名规则详细介绍 04-11
Oracle中用Rowid查找和删除重复记录 04-11
如何正确的使用or展开来改写sql查询 03-26
用简单的方法获取oracle语句的执行时间 05-16
详细讲解各种数据库使用jdbc连接的方式 03-28
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息