Добрый день!
Есть темповая таблица, которую необходимо альтернуть (добавить столбец).
Понятное дело, при 300 активных сессиях кто-то эту таблицу использует - из за этого валится ora-14450.
Могу я как то отследить, какая именно сессия обращается к необходимой мне таблице?
И
alter system kill ...?
Если же это отследить невозможно - как отключить все активные сессии?
Ответ
Получить информацию о сессиях, использующих временную таблицу можно следующим запросом:
select s.*
from v$lock l, dba_objects d, v$session s
where d.owner='СХЕМА' and d.OBJECT_NAME='ИМЯ-ТАБЛИЦЫ'
and l.id1=d.object_id and l.type='TO' and s.sid=l.sid
далее сессии можно убить с помощью ALTER SYSTEM KILL SESSION 'sid,serial#, где sid и serial# взяты из предыдущего запроса. Если сессий много, можно убить их все автоматически, следующим PL/SQL блоком (предварительно проверив то ли вы получаете, что надо, первым запросом):
begin
for c1 in(select distinct s.sid, s.serial#
from v$lock l, dba_objects d, v$session s
where d.owner='СХЕМА' and d.OBJECT_NAME='ИМЯ-ТАБЛИЦЫ'
and l.id1=d.object_id and l.type='TO' and s.sid=l.sid) loop
execute immediate 'ALTER SYSTEM KILL SESSION '''||c1.sid||','||c1.serial#||'''';
end loop;
end;
/
Комментариев нет:
Отправить комментарий