Поскольку вы продолжаете получать страницы результатов, я предполагаю, что вы начали сеанс в SQL * Plus. Если это так, то легко сделать это: ударить ctrl + break много, много раз, пока он не остановится.
Более сложный и более общий способ (-ы), который я подробно описываю ниже, в порядке увеличения свирепости / зла. Первый, вероятно, будет работать для вас, но если это не так, вы можете продолжать двигаться вниз по списку.
Большинство из них не рекомендуется и может иметь непредвиденные последствия.
1. Уровень Oracle - убить процесс в базе данных
Согласно ответу ОбиВанКеноби и ALTER SESSION документации
alter system kill session 'sid,serial#';
Чтобы найти sid
, идентификатор сеанса и serial#
, серийный номер, выполните следующий запрос - обобщенный из OracleBase - и найдите ваш сеанс:
select s.sid, s.serial#, p.spid, s.username, s.schemaname
, s.program, s.terminal, s.osuser
from v$session s
join v$process p
on s.paddr = p.addr
where s.type != 'BACKGROUND'
Если вы используете RAC , вам нужно немного изменить его, чтобы учесть несколько экземпляров, inst_id
- это то, что их идентифицирует:
select s.inst_id, s.sid, s.serial#, p.spid, s.username
, s.schemaname, s.program, s.terminal, s.osuser
from Gv$session s
join Gv$process p
on s.paddr = p.addr
and s.inst_id = p.inst_id
where s.type != 'BACKGROUND'
Этот запрос также будет работать, если вы не используете RAC.
Если вы используете такой инструмент, как PL / SQL Developer, окно сессий также поможет вам его найти.
Для немного более сильного "kill" вы можете указать ключевое слово IMMEDIATE, которое указывает базе данных не ждать завершения транзакции:
alter system kill session 'sid,serial#' immediate;
2. Уровень ОС - Выпуск SIGTERM
kill pid
Предполагается, что вы используете Linux или другой вариант * nix. A SIGTERM - это сигнал завершения от операционной системы к конкретному процессу с просьбой прекратить работу. Он пытается изящно завершить процесс.
Если вы ошибетесь, это может привести к прерыванию основных процессов ОС, поэтому будьте внимательны при наборе.
Вы можете найти pid
, идентификатор процесса, выполнив следующий запрос, который также сообщит вам полезную информацию, такую как терминал, с которого запущен процесс, и имя пользователя, на котором он запущен, чтобы вы могли убедиться, что вы выбрали правильный один.
select p.*
from v$process p
left outer join v$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Еще раз, если вы используете RAC, вам нужно немного изменить это на:
select p.*
from Gv$process p
left outer join Gv$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Изменение предложения where
на where s.status = 'KILLED'
поможет вам найти уже убитый процесс, который все еще "работает".
3. ОС - выпуск SIGKILL
kill -9 pid
Используя тот же pid
, который вы выбрали в 2, SIGKILL - это сигнал от операционной системы к определенному процессу, который вызывает немедленное завершение процесса. Еще раз будьте осторожны при наборе текста.
Это должно быть редко необходимо. Если вы выполняли DML или DDL , это остановит обработку любого отката, а может затруднить восстановление базы данных до согласованного состояния в случае сбоя .
Все остальные опции убьют все сеансы и приведут к тому, что ваша база данных - и в случае с 6 и 7 сервером - станет недоступной. Их следует использовать только в случае крайней необходимости ...
shutdown immediate
Это на самом деле политичнее, чем SIGKILL , хотя, очевидно, он действует на все процессы в базе данных, а не на ваш конкретный процесс. всегда хорошо быть вежливым с вашей базой данных.
Завершение работы базы данных должно производиться только с согласия вашего администратора баз данных, если он у вас есть. Приятно также рассказать людям, которые используют базу данных.
Закрывает базу данных, завершает все сеансы и выполняет rollback
для всех незафиксированных транзакций. Это может занять некоторое время, если у вас есть большие незафиксированные транзакции, которые необходимо откатить.
5. Oracle - Завершение работы базы данных (менее приятный способ)
shutdown abort
Это примерно то же самое, что и SIGKILL , но еще раз для всех процессов в базе данных. Это сигнал для базы данных, чтобы немедленно остановить все и умереть - тяжелый крах. Завершает все сеансы и не выполняет откат; из-за этого это может означать, что для базы данных снова потребуется больше времени до startup
. Несмотря на зажигательный язык, shutdown abort
не является чистым злом и обычно может безопасно использоваться.
Как и прежде, сначала сообщите людям соответствующие люди.
6. ОС - перезагрузить сервер
reboot
Очевидно, что это останавливает не только базу данных, но и сервер, поэтому используйте его с осторожностью и с согласия ваших системных администраторов в дополнение к администраторам баз данных, разработчикам, клиентам и пользователям.
7. ОС - последний этап
У меня перезагрузка не работает ... Как только вы достигли этой стадии, вам лучше надеяться, что вы используете виртуальную машину. Мы закончили тем, что удалили это ...