如何查看和终止正在运行的存储过程PLSQL

详细说明

1. 执行测试plsql块

--结合睡眠函数和for循环构造一个执行时间稍长的plsql
BEGIN
    FOR i IN 1..10 LOOP
        put_line(i||' '||to_char(sysdate,'yyyy-MM-dd HH:mm:ss'))
        dbms_lock.sleep(10)
    END loop
END

2. 查看正在运行的PLSQL

这条命令会显示session id和PLSQL语句,使用者需要从中找到自己想要终止的PLSQL的session id;

> PS PLSQL;

f87ef49d-5d4d-437e-a066-de2b58799239 : BEGIN
    FOR i IN 1..10 LOOP
        put_line(i||' '||to_char(sysdate,'yyyy-MM-dd HH:mm:ss'))
        dbms_lock.sleep(10)
    END loop
END

第一行的f87ef49d-5d4d-437e-a066-de2b58799239,就是\<SESSION_ID>

3. 终止正在运行的某条PLSQL

这条命令会发送一个终止信号给该session id中的PLSQL进程,待该进程下一次自检之时,发现有终止信号,则会结束自己;

-- KILL PLSQL ;
> kill PLSQL f87ef49d-5d4d-437e-a066-de2b58799239;

对应的plsql语句会抛出异常,EXECUTION FAILED: Task EXEC PLSQL error HiveException: [Error 40000] PLSQL process being killed.

image.png

自检是借鉴了操作系统中进程调度的思想。自检的粒度为一条PLSQL语句,也就是说每执行一条PLSQL语句会自检一次(也就是被OS调度一次)。所以如果有一条SQL语句执行时间特别长,那么KILL该进程后并不会马上生效,需要等到该SQL语句执行完毕才会发生自检并终止。这种情况如果确定要终止该进程,可到inceptor的4040页面去kill掉当前的SQL,这样外层PLSQL就会立即终止。


评论
登录后可评论
发布者
星
星小环分享号
官方
文章
194
问答
272
关注者
27
banner
关注星环科技
获取最新活动资讯

加入TDH社区版技术交流群

获取更多技术支持 ->

扫描二维码,立即加入