Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 终止长时间运行的进程_C_Database_Oracle_Solaris - Fatal编程技术网

C 终止长时间运行的进程

C 终止长时间运行的进程,c,database,oracle,solaris,C,Database,Oracle,Solaris,嗨,我正在Solaris上使用C。我有一个连接到数据库的进程。我需要确定同一进程是否长时间(比如15秒)运行同一查询,然后我需要断开并重新建立数据库连接 我知道我可以查一查 进程id为的进程。但我 我更关心的是知道怎么做 确定是否需要相同的过程 运行相同的查询 任何帮助都是值得感激的。如果您直接从客户那里开始查询,您可以查看v$session.last\u call\u et。此列显示此会话的最后一次服务器调用启动的秒数。在这种情况下,服务器调用是执行查询。这是行不通的,因为您的客户机启动了一个

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

我知道我可以查一查 进程id为的进程。但我 我更关心的是知道怎么做 确定是否需要相同的过程 运行相同的查询


任何帮助都是值得感激的。

如果您直接从客户那里开始查询,您可以查看
v$session.last\u call\u et
。此列显示此会话的最后一次服务器调用启动的秒数。在这种情况下,服务器调用是执行查询。这是行不通的,因为您的客户机启动了一个pl/sql块,并且恰好从那里启动了查询。在这种情况下,最后的调用将指向pl/sql块的开始,因为这是会话启动的最后一件事。 这可能是最简单的

有帮助吗


Ronald-

我的建议是,您应该修复根本原因,而不是治疗症状。

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

不确定您正在解决什么问题

如果断开连接,则数据库会话可能会持续一段时间。还可能持有锁

另外,如果一个PL/SQL块正在循环并运行1000个查询,每个查询花费十分之一秒的时间,那么这应该算作中止逻辑的一条语句吗


您可以查看V$SESSION和SQL\u ID或SQL\u HASH\u值。然后在15秒后再次检查,看看是否有变化。您还可以查看v$sessstat/v$statname中的“执行计数”或“用户调用”等内容,以确定是同一个SQL长时间运行还是多个SQL调用。

您使用的是什么数据库?一些数据库引擎可以让您通过SQL(如Oracle的view V$SESSION)访问会话列表,该列表可以被查询。在我的例子中,可以有多个客户端连接到数据库。假设对于客户机C1和C2,对数据库的最后一次调用可以由C2进行,但我很想知道C1执行同一查询的时间。如果您的C1会话仍在执行您的查询,您可以通过在v$session中检查该C1会话的last_call_et列来查看它运行了多长时间。这假设查询是由客户端直接执行的,而不是使用pl/sql块或过程,因为在这种情况下,last_call_et只显示最后一次调用运行的时间(以秒为单位)。在我的情况下,您永远无法确定哪个查询花费了很长的时间。因此根本原因未知,需要通过计算独立查询的处理时间来找出。