【问题标题】:Killing long running multiple sessions for oracle db using shell script使用 shell 脚本为 oracle db 杀死长时间运行的多个会话
【发布时间】:2017-12-24 03:40:14
【问题描述】:

我正在编写 shell 脚本,当一个语句被识别为长时间运行时,我们必须在操作系统上获取 PID,确保它不是程序的主进程。(例如:Oracle)。检查顶部并终止匹配进程,稍后我们可以使用脚本检查数据库是否仍然存在长时间运行的会话。在杀死程序特定的长时间运行的PID后,shell脚本需要向用户发送邮件信息。

[oracle@jumbox ]$ps au |grep oracle | awk 'print {$2}' |uniq
10020
15678
17345
18736
18856

我的问题是我没有在 top 命令中看到上述任何进程,那么我应该如何在脚本中验证这些不存在的进程?或者有没有更好的班轮或代码 sn-p 可以做到这一点?任何建议都非常感谢。

谢谢

【问题讨论】:

标签: linux bash oracle shell ksh


【解决方案1】:

从服务器终止会话是非常危险的,它可能导致数据不明确,甚至表中的行不可读。最好通过在v$session 视图中检查相同的内容来终止长时间运行的会话。您可以在此处检查会话是否处于非活动状态或等待另一个会话完成。

要终止会话,请使用 alter system kill session 'sid,serial#' immediate;,其中 sid 和 serial# 可以在 v$session 视图中找到。要获取会话的服务器 PID,您可以使用以下查询查询 v$processv$session 视图:

SELECT s.sid, s.serial#, s.username, p.spid, s.machine, p.terminal
FROM v$session s, v$process p
WHERE s.paddr = p.addr;

【讨论】:

  • 嗨 Lohit,感谢您的建议,但我们是否可以至少检查一下以将上面列出的进程或 SPID 与流行的顶级进程进行比较,然后我们可以验证吗?在从 oracle 杀死之前,我只需要验证它是否不是我们正在杀死的主要 oracle 进程..Oracle 进程只是一个示例,我们还有许多其他可执行文件要比较..!!任何关于它的建议都非常感谢..!!谢谢。
  • 为此,您可以获取从top 获得的 SPID,并检查这些进程中正在执行的内容,因为大多数时间空闲进程不会显示在 CPU 消耗最高的进程中.要检查在 oracle 进程中执行的内容,您可以查看 this 链接。
猜你喜欢
  • 1970-01-01
  • 2016-07-08
  • 2012-06-14
  • 2017-01-23
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多