楼主: 刘秀武
59 0

[IBM数据库与大数据解决方案] Oracle会话清理脚本简明说明 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

小学生

14%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0.0417
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
40 点
帖子
3
精华
0
在线时间
0 小时
注册时间
2018-5-9
最后登录
2018-5-9

楼主
刘秀武 发表于 2025-12-9 15:16:45 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

一、脚本功能

该工具为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 连接被强制终止
二维码

扫码加我 拉你入群

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

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

关键词:Oracle CLE ACL Commands security

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 21:49