暂无图片
Oracle alter kill 不掉存储过程,应该怎么解决?
我来答
分享
暂无图片 匿名用户
Oracle alter kill 不掉存储过程,应该怎么解决?

Oracle alter kill 不掉存储过程,应该怎么解决?

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
护苗使者9G

如果使用ALTER SESSION KILL SESSION命令无法终止正在运行的存储过程会话,您可以尝试以下方法:
1.使用ALTER SYSTEM KILL SESSION命令来杀死会话。该命令可以强制终止任何正在运行的会话,包括存储过程。
2.检查存储过程是否有锁定资源。如果存储过程获取了某些资源的独占锁,则必须释放这些锁才能成功终止会话。您可以使用以下语句查找所有锁定了某些资源的会话:
SELECT s.sid, s.serial#, l.TYPE, l.ID1, l.ID2, l.CTIME
FROM v$lock l,v$session s
WHERE l.SID = s.SID AND l.TYPE != 'CF' AND l.TYPE != 'DX' AND l.TYPE != 'UL';
3.如果存储过程没有锁定资源,您可以尝试在会话内部执行一个中断操作,以便存储过程可以自行退出。例如,在PL/SQL代码中,您可以使用以下语句:
DBMS_LOCK.SLEEP(1);
这将使会话休眠一秒钟,并且在此期间您可以尝试使用ALTER SESSION KILL SESSION命令终止会话。
请注意,强制终止正在运行的存储过程可能会导致数据不一致,因此请谨慎使用。最好在业务低峰期进行此操作,并在操作前备份数据。

这将使会话休眠一秒钟,并且在此期间您可以尝试使用ALTER SESSION KILL SESSION命令终止会话。

请注意,强制终止正在运行的存储过程可能会导致数据不一致,因此请谨慎使用。最好在业务低峰期进行此操作,并在操作前备份数据。

暂无图片 评论
暂无图片 有用 4
打赏 0
伪文艺

如果是linux/unix系统,可以在操作系统层面kill spid

暂无图片 评论
暂无图片 有用 0
打赏 0
Thomas

第3个方法,我感到疑惑。本来我只是想杀掉运行存储过程的会话,现在倒好了,我还得去改存储过程,在存储过程中人为加一句休眠一秒的语句,我想如果是DBA,他没这个权限去随意动存储过程;如果是开发人员,他就为了能顺利杀死会话,就在代码中加一句SLEEP(1),这句给程序带来的负面影响他考虑过没有?再者,如果这个存储过程在运行中,你企图加这一句,加完了必然会自动编译存储过程,而目前尚有该存储过程的活动版本在执行,能自动编译成功吗?

暂无图片 评论
暂无图片 有用 1
打赏 0
回答交流
Markdown


请输入正文
提交