В базу стали пускать юзеров с плохими скриптами. Административно не решалось, пришлось периодически выкидывать скриптом
SQL код:
begin for c in (select sid,serial# from v$session where sql_id in (select sql_id from sys.ok_ban_sqlid) and type='USER') loop begin execute immediate 'alter system disconnect session ''' || c.sid || ',' || c.serial# || ''' immediate'; exception when others then null; end; end loop; end;
Но автоматизировать как-то надо было, потому подготовка такая
SQL код:
create table sys.ok_ban_sqlid (sql_id VARCHAR2(13));
create unique index ok_b_sql_i on sys.ok_ban_sqlid (sql_id);
insert into sys.ok_ban_sqlid select '2tsr0z2fpjmv4' from dual;
и, собственно, скрипт на сам джоб. Раз в минуту выкидывает те sql_id, которые в табличке перечислены...
SQL код:
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'OK_BAN_SQL',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN
FOR c IN (SELECT sid, serial# FROM v$session
WHERE sql_id IN (SELECT sql_id FROM sys.ok_ban_sqlid) AND type = ''USER'')
LOOP
BEGIN
EXECUTE IMMEDIATE ''alter system disconnect session '''''' || c.sid || '','' || c.serial# || '''''' immediate'';
EXCEPTION
WHEN OTHERS THEN NULL;
END;
END LOOP;
END;',
start_date => systimestamp,
repeat_interval => 'FREQ=MINUTELY; INTERVAL=1',
enabled => TRUE,
auto_drop => FALSE);
END;
/