Как убить все активные и неактивные сеансы oracle для пользователя
Я пытаюсь ниже сценарий, чтобы убить все активные и неактивные сеансы oracle для пользователя сразу, но он не работает. Сценарий выполняется успешно, но не убивает сеансы для пользователя.
BEGIN
FOR r IN (select sid,serial# from v$session where username = 'USER')
LOOP
EXECUTE IMMEDIATE 'alter system kill session ''' || r.sid
|| ',' || r.serial# || '''';
END LOOP;
END;
3 ответов
на KILL SESSION
команда на самом деле не убить сессии. Он просто просит сеанс убить себя. В некоторых ситуациях, таких как ожидание ответа из удаленной базы данных или откат транзакций, сеанс не будет убивать себя сразу и будет ждать завершения текущей операции. В этих случаях сеанс будет иметь статус"помечено для kill". Тогда его убьют как можно скорее.
проверяем статус подтвердите:
SELECT sid, serial#, status FROM v$session;
вы также можете использовать немедленно статья:
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
на IMMEDIATE
предложение не влияет на работу, выполняемую командой, но оно возвращает управление обратно в текущий сеанс немедленно, а не ждет подтверждения убийства. Взгляните на Убийство Сеансов Oracle.
обновление если вы хотите убить все сеансы, вы можете просто подготовить небольшой скрипт.
SELECT 'ALTER SYSTEM KILL SESSION '||sid||','||serial#||';' FROM v$session;
шпульки как .sql
файл и выполнить его.
BEGIN
FOR r IN (select sid,serial# from v$session where username='user')
LOOP
EXECUTE IMMEDIATE 'alter system kill session ''' || r.sid || ','
|| r.serial# || ''' immediate';
END LOOP;
END;
это должно работать - я просто изменил ваш скрипт, чтобы добавить immediate
ключевое слово. Как указывалось в предыдущих ответах,kill session
только отмечает сеансы для убийства; он делает это не сразу, но позже, когда это удобно.
из вашего вопроса, казалось, вы ожидаете увидеть результат немедленно. Так что .
выполнить этот скрипт:
SELECT 'ALTER SYSTEM KILL SESSION '''||sid||','||serial#||''' IMMEDIATE;'
FROM v$session
where username='YOUR_USER';
он будет распечатывать sqls, которые должны быть выполнены.