怎莫查看oracle死进程?

[复制链接]
查看11 | 回复9 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
近来数据库变得很慢,但是重启之后就恢复正常,我怀疑是数据库存在一些死进程,死进程是怎莫查询的?请高手执教!
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
select * from v$lock where block=1
这是有死锁的进程
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
死进程与死锁进程应该是不同一个概念
我想应该是从v$session的status来区分!
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
在系统慢的时候做个statspack report让大家分析。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
我最近也很头痛,一个数据库本来的session是120左右,今天查看居然发现有270多个(汗~)
通过OEM查看,发现一台机器上的同一个程式有几十个session(晕~)
估计大多是死进程,请问各位大虾,有没有什么好的方法防止频繁产生这些死进程(服务器是否是修改sqlnet.ora文件,那么客户端的防止方法呢?)
TKS!
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
从v$session的status是区分不了!
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
应用程序有问题,修改程序根治问题
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
创建PROFILE吧. 主要目的是可以限制每个用户的连接时间! 这样会相应减少你的这种情况!
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
公司是做软件开发的,程序员们的程序都要连接数据库进行调试。可是他们的程
序死了以后
数据库还是连接的,这样一来系统的资源(内存)就会被占用被耗尽,于是我就
要经常去杀死已经死了的进程,可是这样很麻烦,我想编一个shell脚本,可不知
道如何下手,就请大虾们帮帮忙了:-)
例如下面这些 323 325 。。。。。。。。。335 337 这些进程不能被杀,主要是
要杀后面有(LOCAL=NO)的进程。我因该怎么做呀?
oracle 14527 10 10:22:39 ?0:01 oraclextecs90 (LOCAL=NO)
oracle 16865 10 11:01:46 ?0:06 oraclextecs90 (LOCAL=NO)
oracle 24346 10 00:00:52 ?0:01 oraclextecs90 (LOCAL=NO)
oracle 24802 10 13:19:32 ?0:03 oraclextecs90 (LOCAL=NO)
oracle 323 10 Apr 12 ?0:01 ora_pmon_xtecs90
oracle 325 10 Apr 12 ?1:35 ora_dbw0_xtecs90
oracle 327 10 Apr 12 ?2:45 ora_lgwr_xtecs90
oracle 329 10 Apr 12 ?2:45 ora_ckpt_xtecs90
oracle 331 10 Apr 12 ?1:54 ora_smon_xtecs90
oracle 333 10 Apr 12 ?0:00 ora_reco_xtecs90
oracle 335 10 Apr 12 ?0:00 ora_s000_xtecs90
oracle 337 10 Apr 12 ?0:00 ora_d000_xtecs90
oracle 14229 10 10:17:29 ?0:00 oraclextecs90 (LOCAL=NO)
oracle 23079 10 22:58:31 ?0:00 oraclextecs90 (LOCAL=NO)
oracle1117 10 14:45:31 ?0:47 oraclextecs90 (LOCAL=NO)
问题的补充:要杀连接已经超时了的进程(时间大于30分钟),而不是要杀死所
有的LOCAL=NO进程。


终于成功了!!!!!!!!!!!!!!!!!!
脚本如下:
ps -e -o pid -o etime -o args|grep LOCAL=NO>/tmp/tmpfile
cat /tmp/tmpfile|while read LINE
do
TIME=`echo $LINE|awk '{print $2}'`
TIME=`echo $TIME|awk -F: '{print $1}'`
if [ $TIME -gt 30 ]
then
echo $LINE >> /tmp/tmpflie2
fi
done
cut -c 1-5 /tmp/tmpfile2 |xargs -t -n1 kill -9
rm -f /tmp/tmpfile
rm -f /tmp/tmpfile2
然后把这个脚本写进crontab,让系统每30分钟运行一次。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
可以用pslist这个小软件来查看。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行