目录
[1. kill.sh(主控制脚本)](#1. kill.sh(主控制脚本))
[2. generate_os_kill_commands.sql(命令生成脚本)](#2. generate_os_kill_commands.sql(命令生成脚本))
[3. 生成的清理脚本示例](#3. 生成的清理脚本示例)
一、脚本功能
清理Oracle数据库指定会话的批处理工具,主要用于:
-
清理特定客户端的异常会话
-
批量终止来自两个指定主机的JDBC连接
-
释放被占用的数据库资源
二、脚本用法
运行方式
bash
[oracle@vvml-yz-oracle~]$ ./kill.sh
一句话执行效果
自动查找并强制终止来自vvml-tx-vv-comment和vvml-tx-vv-security主机的所有JDBC客户端连接。
三、脚本解析
1. kill.sh(主控制脚本)
bash
#!/bin/bash
source ~/.bash_profile # 加载Oracle环境变量
sqlplus -s / as sysdba @generate_os_kill_commands.sql > os_kill_commands.sh # 生成kill命令
chmod +x os_kill_commands.sh # 添加执行权限
./os_kill_commands.sh # 执行清理
2. generate_os_kill_commands.sql(命令生成脚本)
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 -- 关联会话和操作系统进程
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. 生成的清理脚本示例
bash
# 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主机的连接
-
✅ 使用JDBC Thin Client的连接
-
✅ 状态为KILLED/ACTIVE/INACTIVE的所有会话
清理方式
-
使用
kill -9强制终止进程 -
先显示提示信息,再执行kill
-
按主机和空闲时间排序清理
五、注意事项
-
强制清理 :使用
kill -9,不优雅但彻底 -
权限要求:需要操作系统kill权限
-
影响范围:会清理所有符合条件的连接,无二次确认
-
适用场景:紧急清理、维护期间使用
六、执行流程图示
text
运行kill.sh
↓
加载Oracle环境
↓
执行SQL生成kill命令
↓
创建可执行脚本
↓
自动执行清理
↓
所有指定主机的JDBC连接被强制终止