当您不断获得结果页面时,我假设您在 SQL*Plus 中开始了会话。如果是这样,最简单的做法是 bash ctrl + break 多次,直到它停止。
我在下面详细介绍了更复杂和更通用的方式,以增加凶猛/邪恶的顺序。第一个可能对您有用,但如果不是,您可以继续向下移动列表。
其中大部分不推荐使用,可能会产生意想不到的后果。
1。 Oracle 级别 - 杀死数据库中的进程
根据 ObiWanKenobi's answer 和 ALTER SESSION 文档
alter system kill session 'sid,serial#';
要查找 sid(会话 ID)和 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;
kill pid
这假设您使用的是 Linux 或其他 *nix 变体。 SIGTERM 是从操作系统到特定进程的终止信号,要求它停止运行。它试图让进程优雅地终止。
输入错误可能会导致您终止基本的操作系统进程,因此在输入时要小心。
您可以通过运行以下查询找到pid,进程ID,它还会告诉您有用的信息,例如运行进程的终端和运行它的用户名,这样您就可以确保选择正确的一个。
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' 将帮助您找到仍在“运行”的已终止进程。
kill -9 pid
使用您在 2 中选择的 pid,SIGKILL 是操作系统向特定进程发出的信号,该信号会导致进程立即终止。再次输入时要小心。
这应该很少需要。如果您正在执行DML 或DDL,它将停止正在处理的任何回滚,并且可能在发生故障时难以将数据库恢复到一致状态。
所有剩余的选项将终止所有会话并导致您的数据库 - 在 6 和 7 服务器的情况下 - 变得不可用。仅在绝对必要时才应使用它们...
shutdown immediate
这实际上比 SIGKILL 更礼貌,但显然它作用于数据库中的所有进程而不是您的特定进程。对您的数据库有礼貌总是好。
只有在您的 DBA 同意的情况下,才能关闭数据库(如果您有的话)。也很高兴告诉使用数据库的人。
它关闭数据库,终止所有会话并对所有未提交的事务执行rollback。如果您有大量未提交的事务需要回滚,则可能需要一段时间。
5。 Oracle - 关闭数据库(不太好的方法)
shutdown abort
这与 SIGKILL 大致相同,但同样适用于数据库中的所有进程。这是向数据库发出的一个信号,立即停止一切并死亡 - 一次硬崩溃。它终止所有会话并且不回滚;因此,这可能意味着数据库需要更长的时间才能再次到达startup。尽管有煽动性的语言,shutdown abort 并不是纯粹的邪恶,通常可以安全使用。
和以前一样,首先通知相关人员。
6。 操作系统 - 重启服务器
reboot
显然,这不仅会停止数据库,还会停止服务器,因此请谨慎使用,并征得系统管理员以及 DBA、开发人员、客户和用户的同意。
7。 操作系统 - 最后阶段
我的重启不起作用...一旦您到达这个阶段,您最好希望您使用的是虚拟机。我们最终删除了它...