如何通过终止会话来停止正在运行的SELECT语句?
根据SELECT语句,该命令将不断地输出信息,我想在其中停止它。
如何通过终止会话来停止正在运行的SELECT语句?
根据SELECT语句,该命令将不断地输出信息,我想在其中停止它。
根据ObiWanKenobi的回答和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'
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'
alter system kill session 'sid,serial#' immediate;
kill pid
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
pid
,SIGKILL是操作系统向特定进程发送的信号,导致该进程立即终止。再次小心输入。
这应该很少需要。如果您正在执行DML或DDL,它将停止任何回滚处理,并且在发生故障时可能使恢复数据库到一致状态变得困难。
所有剩余选项都将杀死所有会话,并导致您的数据库 - 在6和7服务器的情况下也是如此 - 变得不可用。只有在绝对必要时才应使用...
shutdown immediate
rollback
操作。如果您有大量未提交的事务需要回滚,可能需要一段时间。
shutdown abort
启动
。尽管语言激烈,shutdown abort
并非纯恶,并且通常可以安全使用。reboot
显然,这不仅会停止数据库,还会停止服务器,因此请谨慎使用,并在DBA、开发人员、客户和用户的同意下使用。
我曾经尝试过重新启动无法解决问题... 一旦你达到了这个阶段,最好希望你正在使用虚拟机。我们最终选择删除它...
这是我使用的方法。首先查询会话和用户:
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';
这将让我知道是否存在同一用户的多个会话。然后,我通常检查以验证是否有会话阻塞了数据库。
SELECT SID, SQL_ID, USERNAME, BLOCKING_SESSION, COMMAND, MODULE, STATUS FROM v$session WHERE BLOCKING_SESSION IS NOT NULL;
然后我运行一个ALTER语句以杀死特定会话的格式如下:
ALTER SYSTEM KILL SESSION 'sid,serial#';
例如:
ALTER SYSTEM KILL SESSION '314, 2643';
不需要结束整个会话。在Oracle 18c中,可以使用ALTER SYSTEM CANCEL
来取消进程:
Cancelling a SQL Statement in a Session
You can cancel a SQL statement in a session using the ALTER SYSTEM CANCEL SQL statement.
Instead of terminating a session, you can cancel a high-load SQL statement in a session. When you cancel a DML statement, the statement is rolled back.
ALTER SYSTEM CANCEL SQL 'SID, SERIAL[, @INST_ID][, SQL_ID]';
If @INST_ID is not specified, the instance ID of the current session is used.
If SQL_ID is not specified, the currently running SQL statement in the specified session is terminated.
要在Oracle中终止会话,您需要使用 ALTER SYSTEM KILL SESSION 命令。
详情请参见:http://www.oracle-base.com/articles/misc/KillingOracleSessions.php
一旦您点击文件,请等待几分钟,然后选择命令停止并出现菜单,请单击取消。
如果您想停止进程,可以手动从任务管理器结束它;另一方面,如果您想在数据库管理系统中停止运行查询,可以像这里提供的MS SQL Server那样停止 T-SQL STOP or ABORT command in SQL Server。希望能对您有所帮助。