【问题标题】:How to kill all sessions by a single click in PLSQL Developer?如何在 PLSQL Developer 中单击一下就杀死所有会话?
【发布时间】:2016-06-21 01:16:42
【问题描述】:

我正在使用PL/SQL Developer。 现在我需要通过单击来终止我的 oracle 数据库中具有特定状态(例如 INACTIVE)的所有会话。目前我正在一个一个地杀死会话。 我目前的策略是

第一个 GOTO 会话

然后点击鼠标右键,逐行选择kill

我已尝试同时使用 ShiftCTR 键来一次选择多行,但它们是未能选择多行。

期待答案以节省我的时间。提前致谢。

【问题讨论】:

  • 你试过用shift键全选吗?还是使用 ctrl 键?
  • 为什么不直接重新启动或退回数据库,那么您就不会面临终止 Oracle 会话的风险。
  • @JorgeCampos 已经尝试过
  • 您为什么要这样做?大多数会话大部分时间都处于非活动状态。这是完全正常的。仅仅因为状态为 INACTIVE 而终止会话会给用户带来很多问题。
  • 您要释放哪些资源?实际上处于非活动状态的会话将占用少量资源。除非您非常关心几 MB 的 RAM 或者您有数千个会话,否则这是没有意义的。如果您担心空闲会话的资源,您可能希望远离专用服务器会话并使用共享服务器。如果您的会话拥有大量资源,这意味着您应该找出少数有问题的会话并终止它们。

标签: oracle plsqldeveloper


【解决方案1】:

使用自定义模板只需单击 3 次即可终止非活动会话。

(如果您真的需要一键式解决方案,您可能需要使用 Delphi 创建一个自定义插件。但这需要大量工作。)

一旦您创建并习惯了模板,运行模板只需一秒钟。首先,转到模板窗口,通常位于屏幕的左下角。右键单击背景并选择“新建模板...”。输入模板的名称。

现在输入此文本。这是一个 PL/SQL 块,会终止所有非活动会话。

begin
    for sessions_to_kill in
    (
        select 'alter system kill session '''||sid||','||serial#||',@'||inst_id||''' immediate' v_sql
        from gv$session
        where status = 'INACTIVE'
            --Can't kill your current session.
            and not (sid = sys_context('userenv', 'sid') and inst_id = sys_context('userenv', 'instance'))
    ) loop
        execute immediate sessions_to_kill.v_sql;
    end loop;
end;

要调用模板,请右键单击 SQL 窗口中的某处,选择“插入模板”和名称。在 PL/SQL 块出现在 SQL 窗口中之后运行它。

【讨论】:

  • 感谢您的想法。到目前为止,我的问题没有其他答案。所以我会接受它作为答案。
  • 非常有用。谢谢。您也可以使用以下方法避免异常(尝试终止您自己的会话): sid SYS_CONTEXT('USERENV', 'SID')
猜你喜欢
  • 2011-07-08
  • 1970-01-01
  • 2011-08-11
  • 2013-01-05
  • 1970-01-01
  • 2016-01-29
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多