如何停止 Oracle 数据库中的查询

4
我们在这里使用的是Oracle版本大于10.0,我们的软件会创建不同类型的报告来评估存储的数据。由于数据量很大,可能需要几分钟才能创建这样的报告,客户希望停止查询。
有没有一种方法告诉DMBS应该停止一个查询?同时,获取状态信息如已读取行数的计数也是很好的。
3个回答

2
根据 Tanel Poder 这里 的博客文章,调用 DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_SESS (sid, serial#, 'CANCEL_SQL');(其中 sid 和 serial# 标识要中断的会话)可能有效,但他还没有测试过。
如果您的应用程序可以进行 OCICancel() 或 jdbc Statement.cancel 调用,那么也可能有效。
在任何一种情况下,我不确定如何获取已读取的行的状态;中断正在输出 spool 文件的 SQL*Plus 会话将告诉您它输出了多少行,但如果它没有开始输出 spool 文件,则不会有这个信息。

+1 链接Tanel的文章 - 我将自己尝试实验,因为这可能非常有用。 - dpbradley

0
如果您可以为查询定义一个截止时间(或其他资源)限制,请设置Oracle配置文件和资源限制,并让关系数据库管理系统负责终止会话:这里的文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接