Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Oracle

Скрипт джоба на выкидывание по определенному sql_id : Oracle

03.05.2024 20:32


05.10.2023 13:08
OlegON
 
В базу стали пускать юзеров с плохими скриптами. Административно не решалось, пришлось периодически выкидывать скриптом
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;

05.10.2023 13:29
OlegON
 
Если какие-то замечания - прошу добавлять и править.
Часовой пояс GMT +3, время: 20:32.

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