全部版块 我的主页
论坛 数据科学与人工智能 大数据分析 Oracle数据库及大数据解决方案
61 0
2025-12-09

一、脚本功能

该工具为Oracle数据库中指定会话的批量清理批处理脚本,主要应用于以下场景:

  • 清除特定客户端产生的异常连接
  • 批量终止来自两个预设主机的JDBC类型连接
  • 释放被长期占用或卡住的数据库资源

二、使用方法

执行方式

[oracle@vvml-yz-oracle~]$ ./kill.sh

执行效果简述

自动识别并强制中断所有来自以下两台主机的JDBC客户端连接:

vvml-tx-vv-comment

vvml-tx-vv-security

三、脚本组成与逻辑解析

1. kill.sh(主控脚本)

作为整个流程的入口,负责调用SQL生成器并执行输出结果。

#!/bin/bash
source ~/.bash_profile                    # 加载Oracle运行环境变量
sqlplus -s / as sysdba @generate_os_kill_commands.sql > os_kill_commands.sh  # 执行SQL生成kill命令脚本
chmod +x os_kill_commands.sh              # 赋予生成脚本可执行权限
./os_kill_commands.sh                     # 立即运行生成的清理指令

2. generate_os_kill_commands.sql(命令动态生成脚本)

通过查询Oracle系统视图,构造出对应操作系统级别的kill命令。

-- 核心SQL:根据会话信息生成操作系统级kill命令
SELECT
'echo "Killing ' || s.sid || ',' || s.serial# || ' - PID: ' || p.spid || '" && ' ||
'kill -9 ' || p.spid || '  # ' || s.machine || ' - ' || s.status
FROM v$session s, v$process p
WHERE s.paddr = p.addr  -- 关联会话与OS进程
AND s.machine IN ('vvml-tx-vv-comment.10.10.10.1', 'vvml-tx-vv-security.10.10.10.2')  -- 指定目标主机
AND s.program = 'JDBC Thin Client'        -- 仅限JDBC连接
AND s.status IN ('KILLED', 'ACTIVE', 'INACTIVE')  -- 包含多种状态的会话
ORDER BY s.machine, s.last_call_et DESC;

3. 清理脚本输出示例

由上述SQL生成的实际可执行shell脚本内容如下:

# os_kill_commands.sh 示例内容:
echo "Killing 123,45678 - PID: 78901" && kill -9 78901  # vvml-tx-vv-comment.10.10.10.1 - ACTIVE
echo "Killing 234,56789 - PID: 89012" && kill -9 89012  # vvml-tx-vv-security.10.10.10.2 - INACTIVE

四、核心特性说明

清理范围(将终止哪些连接)

  • 来源为主机IP为 vvml-tx-vv-comment.10.10.10.1vvml-tx-vv-security.10.10.10.2 的连接
  • 程序类型为 JDBC Thin Client 的数据库会话
  • 状态属于 KILLEDACTIVEINACTIVE 的任意一种

清理机制

  • 采用操作系统层面的强制杀进程方式:
    kill -9
  • 每条命令前先输出提示信息,便于日志追踪
  • 按主机分组,并依据最后一次调用时间倒序排列,优先处理空闲最久的连接

五、使用注意事项

  • 强制性操作:使用
    kill -9
    命令直接终止进程,虽不优雅但确保彻底清除
  • 权限需求:执行用户需具备在操作系统上执行 kill 命令的权限
  • 无确认机制:一旦运行,所有符合条件的连接将被立即终止,不会进行二次提示
  • 适用时机:建议仅在紧急故障处理或系统维护窗口期间使用

六、执行流程图示

运行 kill.sh
    ↓
加载 Oracle 环境配置(.bash_profile)
    ↓
通过 sqlplus 执行 SQL 脚本生成 kill 命令集
    ↓
将输出重定向至 os_kill_commands.sh 并赋予执行权限
    ↓
自动调用并执行生成的清理脚本
    ↓
所有匹配条件的 JDBC 连接被强制终止
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群