gpt4 book ai didi

sql - 停止 SQL 代码执行

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:49 25 4
gpt4 key购买 nike

我们有一个巨大的 Oracle 数据库,我经常使用 SQL Navigator (v5.5) 获取数据。有时,我需要通过单击 Stop 按钮来停止代码执行,因为我意识到我的代码中缺少某些部分。问题是,在单击 Stop 按钮后,需要很长时间才能完成停止过程(有时需要数小时!)。该程序在底部栏显示 Stopping... 并且我浪费了很多时间直到它完成。

这背后的原理是什么?我怎样才能加快停止过程?以防万一,我不是管理员;我是使用某些 View 访问数据库的受限用户。

最佳答案

要停止查询需要发生两件事:

  1. 必须通知实际的 Oracle 进程您要取消查询
  2. 如果查询对数据库(DDL、DML)进行了任何修改,则需要回滚工作。

对于第一点,正在执行查询的 Oracle 进程应该不时地检查是否应该取消查询。即使它正在执行一项很长的任务(例如大 HASH JOIN),我认为它每 3 秒左右检查一次(我正在寻找此信息的来源,如果找到它我会更新答案)。现在您的软件能够与 Oracle 正确通信了吗?我不熟悉 SLQ Navigator,但我想取消机制应该像使用任何其他工具一样工作,所以我猜你正在等待第二点:

一旦进程被通知停止工作,它必须撤销它在这个查询中已经完成的所有事情(所有语句在 Oracle 中都是原子的,它们不能在中间停止而不回滚)。大多数情况下,在 DML 语句中,回滚将花费比已经完成的工作更长的时间(我是这样看的:Oracle 已优化为向前工作,而不是向后工作)。如果您处于这种情况(大 DML),则在回滚期间必须耐心等待,您无能为力以加快该过程。

如果您的查询是一个简单的 SELECT 并且您的工具不允许您取消,您可以终止您的 session (需要另一个 session 的管理员权限)——这应该是即时的。

关于sql - 停止 SQL 代码执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3940669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com