У меня есть сценарий, который мне нужно использовать для внесения некоторых изменений в базу данных. Для этого мне нужно убить все сеансы, прежде чем начинать изменения.
set serveroutput on;
begin
for rec in (SELECT se.sid,se.serial#,se.inst_id FROM gv$session se where type <> 'BACKGROUND' and username not in ('SYSRAC','SYS') and sid <> (select sys_context('userenv','sid') from dual) and status <> 'KILLED')
loop
execute immediate 'Alter System Kill Session '''|| rec.Sid|| ',' || rec.Serial# || ',@' ||rec.inst_id||''' IMMEDIATE';
dbms_output.put_line('Eliminada: '||rec.sid);
end loop;
end;
/
Проблема: у меня есть база данных с более чем 3000 подключениями. Во время выполнения этого сценария некоторые сеансы обычно отключаются сами по себе, что приводит к следующей ошибке:
ERROR at line 1:
ORA-00030: User session ID does not exist.
ORA-06512: at line 4
ORA-06512: at line 4
Как я могу управлять l oop, чтобы игнорировать сеансы, которые отключаются от базы данных для себя?