前段寫了一篇DBA必備腳本:一鍵殺會話文章,有朋友反饋部分功能不完善。最近幾天根據朋友的建議,將核心的代碼做了適當修改,引入了部分新功能和排除了一些高危的進行。腳本的名字如下:

kill_sess_by_where.sql

主要的變動內容如下:

新增kill條件

  • 根據SQLID的信息來選擇需要kill的session。
  • 根據event的信息來選擇需要kill的session。
  • 根據LAST_CALL_ET條件和非活動的會話來選擇需要kill的session。
  • 根據登陸時間和非活動的會話來選擇需要kill的session。
  • 根據登陸服務名來選擇需要kill的session。

殺會話的模式

支持disconnect和kill兩種方式,模式為disconnect方式,如果需要修改,可自定義修改參數。

排除系統管理用户的會話和後台會話

已經從代碼上排除了特殊用户和後台會話,防止kill錯誤會話。

WHERE s.username NOT IN ('SYSTEM','SYS','SYSMAN','DBSNMP')
                and S.USERNAME IS NOT NULL

debug模式

默認在debug模式運行,只打印kill session的命令,可通過修改參數修改默認行為。

常用示例

kill last_call_et大於3600的非活動會話

kill_sess_by_where.sql "lastet=3600"

kill某用户的所有護花

kill_sess_by_where.sql "username=HTZ"

kill特定的sid

kill_sess_by_where.sql "sid=101,102"

腳本的獲取方式

關注公眾號,後台回覆“腳本”二字,已經關注並回復過的就直接下載即可。

------------------作者介紹-----------------------

姓名:黃廷忠

現就職:Oracle中國高級服務團隊

曾就職:OceanBase、雲和恩墨、東方龍馬等