22.08.2012 11:04
OlegON
 
Напоролся на неприятность, в виде возможности юзеров загонять базу в своп дедиками. Блокировать эти подключения невозможно. В итоге выжирается память на совсем не то, что нужно. Простейший джоб, раз в минуту выкидывающий новые дедики, не с разрешенных машин.
Код:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'kill_exceeded_dedic',
job_type => 'PLSQL_BLOCK',
job_action => '
for c in (
select * from (
select sid,serial# from v$session where server=''DEDICATED'' and type=''USER'' 
and machine!=sys_context(''USERENV'', ''HOST'') and lower(machine) not in (''workgroup\ex'') order by logon_time desc
) where rownum<5
) 
loop 
begin 
execute immediate ''alter system disconnect session '''''' || c.sid || '','' || c.serial# || '''''' immediate''; 
exception when others then null; 
end; 
end loop;',
repeat_interval => 'FREQ=MINUTELY; INTERVAL=1;',
enabled => TRUE
);
END;
/
22.08.2012 11:23
OlegON
 
Немного убогий вариант, выкидывающий только новые, если общее количество дедиков превышает 5
Код:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'kill_exceeded_dedic',
job_type => 'PLSQL_BLOCK',
job_action => '
for c in (
 select * from (
  select sid,serial#,machine,logon_time from v$session where server=''DEDICATED'' and type=''USER''
  and machine!=sys_context(''USERENV'', ''HOST'') and lower(machine) not in (''workgroup\ex'') 
  and (sid,serial#) not in (
   select * from (select sid,serial# from v$session where server=''DEDICATED'' and type=''USER'' 
   and machine!=sys_context(''USERENV'', ''HOST'') and lower(machine) not in (''workgroup\ex'') order by logon_time) where rownum<6
   )
  )
)
loop 
begin 
execute immediate ''alter system disconnect session '''''' || c.sid || '','' || c.serial# || '''''' immediate''; 
exception when others then null; 
end; 
end loop;',
repeat_interval => 'FREQ=MINUTELY; INTERVAL=1;',
enabled => TRUE
);
END;
/
10.03.2013 13:10
OlegON
 
надоело, выкидываю все дедики
Код:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'kill_dedic',
job_type => 'PLSQL_BLOCK',
job_action => '
for c in (select sid,serial#,machine,logon_time from v$session where server=''DEDICATED'' and type=''USER'' and lower(machine) not in (''workgroup\ex'',''kk''))
loop 
begin 
execute immediate ''alter system disconnect session '''''' || c.sid || '','' || c.serial# || '''''' immediate''; 
exception when others then null; 
end; 
end loop;',
repeat_interval => 'FREQ=MINUTELY; INTERVAL=1;',
enabled => TRUE
);
END;
/
Часовой пояс GMT +3, время: 22:09.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.