免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: TOADLover
打印 上一主题 下一主题

如何查看某个存储过程当前是否在运行? [复制链接]

论坛徽章:
1
丑牛
日期:2014-08-07 17:07:05
21 [报告]
发表于 2009-09-03 11:28 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
22 [报告]
发表于 2009-09-03 11:32 |只看该作者

回复 #20 ILoveMK 的帖子

截图:
我是以sys用户执行你给出的sql语句的(19楼也是以sys用户),p_insert_tbl存储过程是由a_user创建的,不过没有job之类的东西,这个存储过程现在肯定不在运行状态。
-----------
select p.KGLPNMOD,o.kglhdnsp
           from x$kglob o, x$kglpn p
                           where o.kglhdadr = p.kglpnhdl
                                  and upper(o.kglnaobj) like upper('%p_insert_tbl%');
------------
所以可以说:
在同样情况下运行下面这条,把结果贴出来
------------
是保证在“同样的情况下”的!

-----------------
嗯,我要说明的是p_insert_tbl是a_user这个用户创建的,sys应该对它没有执行权限吧?
--反正我以sys用户登录后,在Procedures中找不到这个p_insert_tbl
--这会对你的sql语句的结果产生影响吗?

[ 本帖最后由 TOADLover 于 2009-9-3 11:41 编辑 ]

论坛徽章:
0
23 [报告]
发表于 2009-09-03 12:47 |只看该作者

回复 #22 ILoveMK 的帖子

select p.KGLPNMOD,o.kglhdnsp
           from x$kglob o, x$kglpn p
                           where o.kglhdadr = p.kglpnhdl
                 and p.KGLPNMOD=1
                                      and upper(o.kglnaobj) like upper('%p_insert_tbl%');
-----------------------
显示为空
-----------------------
当我开一个TOAD以a_user执行该存储过程,执行持续时间长达10分钟,在此期间,另开一个TOAD执行上面的sql语句显示结果为空,什么都没显示!
-----------------------------


[ 本帖最后由 TOADLover 于 2009-9-3 12:50 编辑 ]

论坛徽章:
0
24 [报告]
发表于 2009-09-03 12:56 |只看该作者
还有哪位高手有知道怎么查询某个存储过程的执行状态?是否在运行中?

论坛徽章:
0
25 [报告]
发表于 2009-09-03 12:57 |只看该作者
我坚决要把这个问题弄个清楚!
一定。。。。。。
--------------------------------------------
算了。。。。。。。。。。
查不出,一个存储过程一旦开始运行,oracle就查不出它的运行状态了。。。。。。。。。。。
oracle的存储过程好像只有"运行"一个功能,没有记录自己的状态,运行完了,也不知道,没有开始运行,也不知道。。。。。

[ 本帖最后由 TOADLover 于 2009-9-3 13:15 编辑 ]

论坛徽章:
0
26 [报告]
发表于 2009-09-03 12:58 |只看该作者
算了,我觉得不行,应该是查不出的。
------------------
死了这条心了。。。。。。。。。。。。。

[ 本帖最后由 TOADLover 于 2009-9-3 13:12 编辑 ]

论坛徽章:
0
27 [报告]
发表于 2009-09-08 03:25 |只看该作者
这样可以吗?

以排队等候方式,独占p_insert_tbl存储过程。
1。新建一个所有用户都可以读写的表list。
2。如果有一个用户需要执行p_insert_tbl时,先向表list尾端添加1条记录。内容为自身的一些信息。
3。如果表list的第一条记录,是该用户的,修改第一条记录的某个字段,表示p_insert_tbl存储过程正在执行中。然后执行p_insert_tbl存储过程。完成执行后,将该记录删除。
4。如果表list的第一条记录,不是该用户的,暂停1分钟。(p_insert_tbl存储过程每次需要运行十几分钟)然后循环检查,直到表list的第一条记录,是该用户的为止。最后,执行第3步。

由于所有用户都可以读写的表list,因此能够随时检查是那个用户、进程在执行p_insert_tbl存储过程。或者没人执行。
如果能够用事件唤醒机制,会更好。

-------------------------------------------------------------
如果p_insert_tbl存储过程每天仅执行一次,添加记录时,需要带上当天的时间标记。
所有用户在执行之前需要检索表list,当天是否已经执行,或正在执行。

[ 本帖最后由 y2k_connect 于 2009-9-8 03:31 编辑 ]

论坛徽章:
0
28 [报告]
发表于 2009-09-08 08:21 |只看该作者
这样可以吗?

以排队等候方式,独占p_insert_tbl存储过程。
1。新建一个所有用户都可以读写的表list。
2。如果有一个用户需要执行p_insert_tbl时,先向表list尾端添加1条记录。内容为自身的一些信息。
3。如果表list的第一条记录,是该用户的,修改第一条记录的某个字段,表示p_insert_tbl存储过程正在执行中。然后执行p_insert_tbl存储过程。完成执行后,将该记录删除。
4。如果表list的第一条记录,不是该用户的,暂停1分钟。(p_insert_tbl存储过程每次需要运行十几分钟)然后循环检查,直到表list的第一条记录,是该用户的为止。最后,执行第3步。

由于所有用户都可以读写的表list,因此能够随时检查是那个用户、进程在执行p_insert_tbl存储过程。或者没人执行。
如果能够用事件唤醒机制,会更好。

-------------------------------------------------------------
如果p_insert_tbl存储过程每天仅执行一次,添加记录时,需要带上当天的时间标记。
所有用户在执行之前需要检索表list,当天是否已经执行,或正在执行。

++++++++++++++++++++++++++++++++++++++++++++++++++++++
这个应该可以,我试试之后,把结果贴出来

论坛徽章:
0
29 [报告]
发表于 2009-11-12 09:45 |只看该作者
select sid,v$session.username 用户名,last_call_et 持续时间,status 状态,LOCKWAIT 等待锁,machine 用户电脑名,logon_time 开始登入时间,sql_text from v$session ,v$process ,v$sqlarea
            where paddr=addr and sql_hash_value=hash_value
            and v$session.username is not null
            order by last_call_et desc
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP