技术路线清晰而简单,引发的后果不太可控,诸君慎用!!
利用sys用户建立过程(需要调用动态性能视图v$session),选出会话数量过高的,自动杀掉session,并通过job定时执行实现监控
核心语句
PCOMM:='alter system kill session '''||PSID||','||SERIAL||''' immediate';--引号中没有分号
EXECUTE IMMEDIATE PCOMM;
--自治事务用于记录杀掉的主机会话
PROCEDURE LOG_GN_KILLSESSION_PROCEDURE(kill_machine VARCHAR2,
V_DATE DATE DEFAULT SYSDATE) IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO CQGZFGLPT.LOG_GN_KILLSESSION--该表通过job定时清理(每周一)
VALUES
(kill_machine,to_date(V_DATE,'YYYY-MM-DD hh24:mi:ss'));
COMMIT;
END;
------------------------------------------杀掉会话--------------------------------------------------------------------------
declare
CURSOR CUR_MACHINE IS
SELECT MACHINE
--存储中调用动态性能视图必须以SYS用户创建存储
FROM (SELECT MACHINE, COUNT(*) JS FROM V$SESSION GROUP BY MACHINE) A
WHERE A.JS > 100;
PMACHINE VARCHAR2(200);
PCOMM VARCHAR2(300);
BEGIN

本文介绍了一种技术方法,通过Oracle的Job定时执行,利用sys用户的权限建立过程,结合动态性能视图v$session,自动监测并杀死会话数量过高的session,以释放数据库资源。操作虽直接有效,但可能带来不可控的后果,使用时需谨慎。
最低0.47元/天 解锁文章

815

被折叠的 条评论
为什么被折叠?



