【问题标题】:Is it possible to stop an sql query from executing?是否可以停止执行 sql 查询?
【发布时间】:2011-11-01 22:38:04
【问题描述】:

我想问是否可以在执行期间停止 sql 查询。我希望这样做,以便如果其他人同时执行相同的查询,应用程序不会卡住。我使用visual studio c#作为前端,使用oracle 11g作为后端

【问题讨论】:

  • 仅供参考,“果酱”是指deadlock
  • @Justin:不是真的,死锁不会发生在查询中(除非使用 SELECT FOR UPDATE)。
  • 恕我直言,这是服务器应该处理的事情,而不是客户端。因此,DBA 需要找到一种机制来避免这种情况,并且它应该对程序员是透明的。
  • @Justin:查询不会在 Oracle 中锁定 任何东西,除非您明确要求它们锁定(使用 SELECT FOR UPDATE)。
  • @Justin,查询不仅不会阻塞任何东西,DML 也不会阻塞查询,除非查询像 Tony 所说的那样锁定。

标签: c# asp.net oracle oracle10g oracle11g


【解决方案1】:

您可以将 sql 查询包装在 pl/sql 函数中,并在执行函数/过程中的 select 语句之前获取锁(使用 dbms_lock 包)(当然您必须在最后释放锁)。这样就可以序列化这个函数的执行了。

另一种选择是使用数据库作业。

【讨论】:

    【解决方案2】:

    如果有问题,您正在执行什么查询?很可能可以对其进行优化以解决您遇到的任何问题。

    这样做并不现实,因为对于每个传入的查询,您都必须先查看其他人是否已经在运行它。这将在系统中产生大量开销和复杂性。

    【讨论】:

      【解决方案3】:

      当然你可以 KILL QUERY query_id。要测试打开的控制台 mysql -u root -p,执行长查询和 ctrl + c ;) 但是,我想不出任何实际的使用方法,跟踪你可能想要杀死的查询等但是如果你真的需要它拯救世界,你可能会成功

      【讨论】:

      • KILL QUERY 是一个 MySQL 命令。它不适用于 Oracle。
      • @APC 还没有看到标签!我的错!
      猜你喜欢
      • 1970-01-01
      • 2012-02-22
      • 2013-10-12
      • 2010-10-15
      • 2014-02-12
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多