【问题标题】:How to stop a running command in oracle 11g DBMS如何在 oracle 11g DBMS 中停止正在运行的命令
【发布时间】:2021-08-26 17:17:48
【问题描述】:

我曾经在 oracle dbms 中编写 PL/SQL 过程。有几次我会遇到像无限循环这样的情况,并且查询不断运行,我想停止它。如果我按 ctrl + C 整个命令行就会关闭。

【问题讨论】:

  • “如果我按 ctrl + C 整个命令行将关闭” 表示 Windows 终端窗口关闭并消失?您是如何开始 SQL*Plus 的?
  • 安装 oracle 11g 后,在开始菜单中单击“运行 SQL 命令行”,终端将打开。
  • 你可以在菜单中编辑快捷方式,或者切换到你自己的,让它运行cmd /k sqlplus.exepowershell.exe -NoExit sqlplus.exe而不是直接调用sqlplus.exe吗?我会看看我是否可以根据williamrobertson.net/documents/… 汇总一个答案,该答案用于从 PL/SQL Developer 启动 SQL*Plus。
  • 我创建了 sqlplus.exe 的快捷方式并将目标更改为 powershell.exe -NoExit sqlplus.exe。当我单击它时,它将打开一个带有 sqlplus 自动运行的 powershell 终端。因此,当我按 ctrl+C 时,它会退出 sqlplus,将 powershell 终端留在我的屏幕上

标签: sql plsql oracle11g rdbms


【解决方案1】:

在 11g 中,您需要终止运行该过程的会话。

您可以使用以下查询选择会话,然后找出您想要杀死/停止的会话。

select sid, serial#, status from v$session where USERNAME='NAME';

然后用下面的命令杀死它

ALTER SYSTEM KILL SESSION 'SID,SERIAL#';

在 18c+ 中,您可以取消与会话关联的当前正在运行的语句:

ALTER SYSTEM CANCEL SQL 'SID, SERIAL#';

【讨论】:

  • 但我无法输入任何内容 下划线类型的光标会一直闪烁
  • 您将无法从同一个控制台执行此操作。打开另一个控制台。再次登录并从另一个会话尝试。
  • 顺便说一句,使用 ctrl+C 会杀死您的命令行,但 不一定 一定会杀死您的会话,也不会释放资源/锁。 Oracle 最终会注意到断开连接,但在此之前您的查询将继续运行。
【解决方案2】:

创建一个目标为 Windows 的快捷方式

powershell.exe -NoExit sqlplus

或者如果你没有 Powershell,

cmd /k sqlplus.exe

(我还建议将“Start in”设置为仅用于 SQL 脚本的新文件夹。)

然后,当 sqlplus 可执行文件被中断并退出时,您将回到命令行,您可以在其中看到错误详细信息,而不是窗口消失。

我不知道如何阻止 Control-C 终止 sqlplus.exe,但我发现这在大多数情况下都可以完成。

根据您使用的开发工具(PL/SQL Developer、SQL Developer、Toad),您可能可以设置一个菜单项以使用当前数据库连接启动 SQL*Plus,而不是依赖桌面/任务栏快捷方式。

More notes on setting up SQL*Plus.

【讨论】:

    猜你喜欢
    • 2022-12-20
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 2020-04-09
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多