oracle创建自动查杀脚本

-- 注意需要oracle19C的版本才行

--创建日志记录表
CREATE TABLE session_kill_log (
    log_time  TIMESTAMP,
    sid       NUMBER,
    sql_id    VARCHAR2(13),  
    action    VARCHAR2(20),
    error_msg VARCHAR2(4000)
);

CREATE INDEX idx_log_time ON session_kill_log(log_time DESC);

ALTER TABLE session_kill_log ADD sql_fulltext CLOB;
ALTER TABLE session_kill_log ADD username VARCHAR2(30);

ALTER TABLE session_kill_log 
ADD (
    avg_elapsed_time_sec NUMBER(10),
    avg_cpu_time_sec NUMBER(10)
);
ALTER TABLE session_kill_log ADD last_call_et NUMBER;
ALTER TABLE session_kill_log ADD (status VARCHAR2(20));


CREATE OR REPLACE PROCEDURE kill_long_sessions AS
    v_count NUMBER := 0;
    v_start_time TIMESTAMP;
    v_error_msg VARCHAR2(4000);
BEGIN
    v_start_time := SYSTIMESTAMP;

    -- ✅ 记录作业启动日志(新增status字段)
    INSERT INTO session_kill_log(
        log_time, username, sid, sql_id, sql_fulltext, 
        action, error_msg, avg_elapsed_time_sec, avg_cpu_time_sec, last_call_et, status
    )
    VALUES (
        v_start_time, NULL, NULL, NULL, NULL,
        'JOB_START', NULL, NULL, NULL, NULL, NULL
    );

    -- 🔄 获取待终止会话信息(包含status字段)
    FOR rec IN (
        SELECT 
            aa.sid,
            aa.serial#,
            aa.username,
            aa.sql_id,
            aa.sql_fulltext,
            aa.avg_elapsed_time_sec,
            aa.avg_cpu_time_sec,
            aa.last_call_et,
            aa.status  -- 新增status字段
        FROM (
            SELECT
                s.sid,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值