有没有办法让oracle自动disconnect一些很久inactive的进程

[复制链接]
查看11 | 回复9 | 2006-9-4 01:02:51 | 显示全部楼层 |阅读模式
最近遇到一个oracle进程数不够用的情况,后来一查发现是一些用户调试他们的程序的时候没有正常退出系统。导致占用了大量的系统进程数,其实那些都是一些永远不会再active的进程,但是如果我不手工kill 掉,资源就永远不会释放出来。


这个情况让我很头痛,请问各位,有没有办法让oracle自动disconnect一些很久不活动的进程,比如5天没活动的进程就自动杀掉。
谢谢◎!!






回复

使用道具 举报

千问 | 2006-9-4 01:02:51 | 显示全部楼层
profile里设置,不过一般的inactive的会话,pmon会定时处理的。
回复

使用道具 举报

千问 | 2006-9-4 01:02:51 | 显示全部楼层
profile ==> idle_time
或者是script + cronjob
或者是 procudre + dbms_job
回复

使用道具 举报

千问 | 2006-9-4 01:02:51 | 显示全部楼层
profile
回复

使用道具 举报

千问 | 2006-9-4 01:02:51 | 显示全部楼层
最好通过sqlnet设置timeout..
回复

使用道具 举报

千问 | 2006-9-4 01:02:51 | 显示全部楼层
最初由 rollingpig 发布
[B]profile ==> idle_time
或者是script + cronjob
或者是 procudre + dbms_job [/B]

rollingpig帮忙看看我写的procedure错在哪里
CREATE OR REPLACE PROCEDURE "KILL_SESSION_TEST" AS
v_sid varchar2(255);
v_serial varchar2(255);

killer varchar2(1000);
CURSOR cursor_session_info is select sid,serial# from v$session where type!='BACKGROUND' and status='INACTIVE' and last_call_et>2700 and username='ICWEB' and machine='orc';
BEGIN
open cursor_session_info;
loop

fetch cursor_session_info into v_sid,v_serial;

exit when cursor_session_info%notfound;

--dbms_output.PUT_LINE('alter system disconnect session '''||v_sid||','||v_serial||''' post_transaction immediate;');

killer:='alter system disconnect session '''||v_sid||','||v_serial||''' post_transaction immediate;';

dbms_output.PUT_LINE(killer);

execute immediate killer;

--execute immediate 'alter system disconnect session ':v_sid,:v_serial' post_transaction immediate' ;
end loop;

dbms_output.PUT_LINE(cursor_session_info%rowcount||' idle users can be killed!');

close cursor_session_info;
END;
/
下面是执行结果:
SQL> set serveroutput on
SQL> exec kill_session_test
alter system disconnect session '300,54629' post_transaction immediate;
BEGIN kill_session_test; END;
*
第 1 行出现错误:
ORA-00911: 无效字符
ORA-06512: 在 "SYSTEM.KILL_SESSION_TEST", line 14
ORA-06512: 在 line 1
回复

使用道具 举报

千问 | 2006-9-4 01:02:51 | 显示全部楼层
编译通过,就是执行的时候报错,另外如果把execute immediate killer注释掉就能正常运行,显示的命令也可以直接复制粘贴使用,就是不能直接在procedure里执行
回复

使用道具 举报

千问 | 2006-9-4 01:02:51 | 显示全部楼层
"KILL_SESSION_TEST"
加引号?
回复

使用道具 举报

千问 | 2006-9-4 01:02:51 | 显示全部楼层
最初由 lcmlsj 发布
[B]"KILL_SESSION_TEST"
加引号? [/B]

这个是在TOAD里面写的,自动加上去的
回复

使用道具 举报

千问 | 2006-9-4 01:02:51 | 显示全部楼层
最初由 bluemoon0083 发布
[B]
rollingpig帮忙看看我写的procedure错在哪里
CREATE OR REPLACE PROCEDURE "KILL_SESSION_TEST" AS
v_sid varchar2(255);
v_serial varchar2(255);

killer varchar2(1000);
CURSOR cursor_session_info is select sid,serial# from v$session where type!='BACKGROUND' and status='INACTIVE' and last_call_et>2700 and username='ICWEB' and machine='orc';
BEGIN
open cursor_session_info;
loop

fetch cursor_session_info into v_sid,v_serial;

exit when cursor_session_info%notfound;

--dbms_output.PUT_LINE('alter system disconnect session '''||v_sid||','||v_serial||''' post_transaction immediate;');

killer:='alter system disconnect session '''||v_sid||','||v_serial||''' post_transaction immediate;';

dbms_output.PUT_LINE(killer);

execute immediate killer;

--execute immediate 'alter system disconnect session ':v_sid,:v_serial' post_transaction immediate' ;
end loop;

dbms_output.PUT_LINE(cursor_session_info%rowcount||' idle users can be killed!');

close cursor_session_info;
END;
/
下面是执行结果:
SQL> set serveroutput on
SQL> exec kill_session_test
alter system disconnect session '300,54629' post_transaction immediate;
BEGIN kill_session_test; END;
*
第 1 行出现错误:
ORA-00911: 无效字符
ORA-06512: 在 "SYSTEM.KILL_SESSION_TEST", line 14
ORA-06512: 在 line 1
编译通过,就是执行的时候报错,另外如果把execute immediate killer注释掉就能正常运行,显示的命令也可以直接复制粘贴使用,就是不能直接在procedure里执行
[/B]

顶一下,没有人知道吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行