As you keep getting pages of results I'm assuming you started the session in SQL*Plus. If so, the easy thing to do is to bash ctrl + break many, many times until it stops.
下面我将按照凶猛/邪恶的顺序详细介绍更复杂和更通用的方法。第一个可能适合您,但如果不适合您,您可以继续沿着列表向下移动。
其中大多数都是不推荐的,并且可能会产生意想不到的后果。
1. 神谕级- 杀死数据库中的进程
As per 欧比旺·克诺比的回答 https://stackoverflow.com/a/9545671/458741和改变会话 http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_2014.htm#sthref3285文档
alter system kill session 'sid,serial#';
为了找到sid
、会话 ID 和serial#
,序列号,运行以下查询 - 总结自甲骨文基地 http://www.oracle-base.com/articles/misc/KillingOracleSessions.php- 并找到您的会话:
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 http://www.sysdba.de/oracle-dokumentation/11.1/rac.111/b28254/toc.htm那么你需要稍微改变一下以考虑到多个实例,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. OS level- 发出一个SIGTERM http://en.wikipedia.org/wiki/SIGTERM
kill pid
这假设您使用的是 Linux 或其他 *nix 变体。 ASIGTERM是操作系统向特定进程发出的终止信号,要求其停止运行。它试图让进程正常终止。
如果出现此错误,可能会导致您终止重要的操作系统进程,因此在输入时要小心。
您可以找到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'
将帮助您找到已杀死但仍在“运行”的进程。
3. OS- 发出一个SIGKILL http://en.wikipedia.org/wiki/SIGKILL
kill -9 pid
使用相同的pid
你在 2 中捡到了一个SIGKILL是操作系统向特定进程发出的导致该进程立即终止的信号。再次打字时要小心。
这应该很少是必要的。如果你在做DML http://en.wikipedia.org/wiki/Data_Manipulation_Language or DDL http://en.wikipedia.org/wiki/Data_Definition_Language它将停止正在处理的任何回滚并且may使得在发生故障时很难将数据库恢复到一致状态。
所有剩余的选项将终止所有会话并导致您的数据库(在 6 和 7 服务器的情况下)变得不可用。仅在绝对必要时才应使用它们......
4. Oracle - Shutdown http://dba-oracle.com/t_oracle_shutdown_immediate_abort.htm数据库
shutdown immediate
这实际上比SIGKILL,尽管显然它作用于数据库中的所有进程而不是您的特定进程。它是always对你的数据库有礼貌是件好事。
关闭数据库只能在获得 DBA 同意的情况下进行(如果您有 DBA 的话)。很高兴告诉那些使用数据库的人。
它关闭数据库,终止所有会话并执行rollback http://ss64.com/ora/syntax-redo.html所有未提交的交易。如果您有大量未提交的事务需要回滚,则可能需要一段时间。
5. Oracle- 关闭数据库(不太好的方法)
shutdown abort
这大约与SIGKILL,尽管再次在数据库中的所有进程上。这是向数据库发出的一个信号,要求数据库立即停止一切并死亡——严重崩溃。它终止所有会话并且不回滚;因此,这可能意味着数据库需要更长的时间来startup http://psoug.org/reference/start_stop.html再次。尽管有煽动性的语言shutdown abort
并不是纯粹的邪恶,通常可以安全使用。
和以前一样,首先通知相关人员。
6. OS- 重新启动服务器
reboot
显然,这不仅会停止数据库,还会停止服务器,因此请谨慎使用,并征得系统管理员以及 DBA、开发人员、客户和用户的同意。
7. OS- 最后一个阶段
我已经重新启动不起作用...一旦你到达这个阶段,你最好希望你正在使用虚拟机。我们最终删除了它......