Oracle 终止会话过程

Posted

技术标签:

【中文标题】Oracle 终止会话过程【英文标题】:Oracle kill sessions procedure 【发布时间】:2018-05-24 10:47:17 【问题描述】:

我想创建将终止所有会话的过程。运行语句后,我得到错误:

[警告] ORA-24344:编译错误 10/13 PL/SQL 成功: ORA-00942: 表或视图不存在 6/6 PL/SQL: SQL 语句 忽略 15/31 PLS-00364:循环索引变量“V_KILL”使用无效 15/9 PL/SQL:语句被忽略(1:0):警告:已编译但使用 编译错误

 CREATE OR REPLACE PROCEDURE KILL_ORACLE_SESSIONS
    IS

    BEGIN
        FOR v_kill IN
        (SELECT
                'alter system kill session '''
                ||sid||','||serial#||',@1'|| ''' immediate;' as statement
                        FROM
                v$session
                    WHERE
                sql_id='sql_id_here'
        )
        LOOP
            dbms_output.put_line (v_kill.statement);
        END LOOP;
    END;
    /

问题在哪里? 谢谢

【问题讨论】:

你没有v$session的权限 只是我无法在 V$SESSION TO username 上执行 GRANT SELECT;相反,我确实将 V_$SQL 上的选择授予 username; 【参考方案1】:

很可能您没有选择查看v$session 的权限,因为您的用户通过角色获得了此权限。 PL/SQL 块内的权限必须直接授予用户(即GRANT SELECT ON V$SESSION TO username;)。角色(例如 DBAROLE)不适用于 PL/SQL。

【讨论】:

GRANT SELECT ON V_$SESSION TO username; 如所述here

以上是关于Oracle 终止会话过程的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 存储过程在 Informatica 存储过程转换映射中的会话结束时运行

如何为用户终止所有活动和非活动的 oracle 会话

oracle存储过程中临时表的使用,该怎么处理

终止会话,重新启动数据库但无法删除用户 Oracle

终止oracle会话

ORA-00603: ORACLE 服务器会话因致命错误而终止 (急)