有没有可能停止执行一个SQL查询?

7

我想问一下是否有可能在SQL查询执行期间停止它。我希望这样做是为了防止其他人在同时执行相同的查询时导致应用程序发生卡顿。我正在使用Visual Studio C#作为前端,Oracle 11g作为后端。


1
请注意,"jam" 的意思是 死锁 - Justin
1
@Justin:实际上,死锁不会发生在查询中(除非使用SELECT FOR UPDATE)。 - Tony Andrews
2
在我看来,这是服务器应该处理的事情,而不是客户端。因此,DBA需要找到一种机制来避免这种情况,并且对程序员来说应该是透明的。 - m0skit0
5
在Oracle中,除非您明确使用SELECT FOR UPDATE命令,否则查询不会锁定任何内容。 - Tony Andrews
2
@Justin,查询不仅不会阻塞任何内容,DML也不会阻塞查询,除非查询像Tony所说的那样进行锁定。 - DCookie
显示剩余11条评论
3个回答

2
你可以将SQL查询包装在PL/SQL函数中,在函数/过程中执行select语句之前获取锁定(使用dbms_lock包),当然你必须在最后释放锁定。这样,你就可以序列化执行此函数。
另一个选项是使用数据库作业。

1
你在进行什么查询时遇到了问题?很可能可以通过优化来解决你遇到的任何问题。
这并不是很现实,因为对于每个查询,你都必须先查看是否有其他人已经在运行它。这将在系统中创建大量的开销和复杂性。

0

你肯定可以杀死查询 query_id。要测试,请打开 mysql 控制台 -u root -p,执行长时间查询并按 ctrl + c ;) 但是,我无法想到任何实用的方法来使用它,跟踪可能想要终止的查询等。但是,如果你真的需要它来拯救世界,你可能会成功。


1
KILL QUERY 是 MySQL 命令。它不能在 Oracle 中使用。 - APC
@APC 没看到标签!我的错! - mkk

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