终止长时间运行的进程

时间:2011-03-03 16:31:23

标签: c database oracle solaris

您好我在Solaris上使用C语言。我有一个连接到数据库的进程。我需要确定相同的进程是否长时间运行相同的查询(比如说15秒),然后我需要断开连接并重新建立数据库连接。

  

我知道我可以检查一下   具有进程ID的进程。但是我   我更关心知道如何   确定是否有相同的过程   运行相同的查询?

任何帮助都非常明显。

3 个答案:

答案 0 :(得分:1)

如果您直接从客户端开始查询,则可以查看v$session.last_call_et。此列显示此会话的最后一次服务器调用的启动时间。在这种情况下,服务器调用是执行查询。这不起作用是你的客户端启动一个pl / sql块并碰巧从那里启动查询[s]。在这种情况下,last_call_et将指向pl / sql块的开始,因为这是您的会话启动的最后一件事。 这可能是最简单的。

有帮助吗?

罗纳德 - http://ronr.blogspot.com

答案 1 :(得分:1)

“我需要确定相同的进程是否长时间运行相同的查询(例如15秒),然后我需要断开连接并重新建立数据库连接。”

不确定您要解决的问题。

如果删除连接,则数据库会话可能会持续一段时间。可能仍然持有锁。

此外,如果一个PL / SQL块正在循环并运行1000个查询,每个查询需要十分之一秒,那么是否应将其视为中止逻辑的1个语句?

您可以查看V $ SESSION和SQL_ID或SQL_HASH_VALUE。然后在十五秒后再次检查并查看它是否已更改。您还可以查看v $ sessstat / v $ statname,例如“执行计数”或“用户调用”,以确定它是长时间运行的SQL还是多个SQL调用。

答案 2 :(得分:0)

我的建议是你确定根本原因而不是治疗症状。