免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1362 | 回复: 0
打印 上一主题 下一主题

oracle数据库中的棘手问题-快速获取数据库中正在执行的SQL [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-29 08:29 |只看该作者 |倒序浏览
现有一个oracle数据库的生产系统,里面存储有一千多万的用户信息,而且是一个OLTP系统,对用户的响应速度要求都在毫秒级别,该系统自开通至今已经有2年多了,一直运行很平稳,但最近发现应用经常重起,应用是通过OCI系统调用去存取数据库的,每次重起前都发现数据库的响应速度特别慢,平时只需毫秒级的SQL在出现问题时执行时间可能要1分多钟,应用为了自我保护就终止了和数据库的连接,重起启动应用。
现在我想通过重起应用前,执行一个语句,能够捕捉到重起前,应用正在执行的SQL,但从网上查到一些类似的SQL语句,效率都很低,执行一次可能是1分钟以上,这对于生产系统,恢复时间可能太长,不知各位有没有好一点的办法来定位当时的语句,附上我用来捕捉一个oracle客户端执行的SQL的shell,效率不高,望大侠们指教。
#!/bin/sh
sqlplus /nolog <<EOF
connect / as sysdba
col machine format a30
col program format a40
set line 200
select sid,serial# ,username,osuser,machine,program,process,to_char(logon_time,'yyyy/mm/dd hh24:mi:ss')
from v\$session where paddr in
( select addr from v\$process where spid in($1));

select sql_text from v\$sqltext_with_newlines
where hash_value in
(select SQL_HASH_VALUE from v\$session where
paddr in (select addr from v\$process where spid=$1)
)
order by piece;

exit;
EOF
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP