批量kill殺死某些會話session的PL/SQL

来源:https://www.cnblogs.com/sky2088/archive/2018/08/02/9406123.html
-Advertisement-
Play Games

原文:http://blog.itpub.net/9240380/viewspace-666622/ SQL> declare 2 v_sid v$session.sid%type; --定義如下兩個type類型,用於接收cursorv_serial# v$session.serial#%type; ...


 

 

原文:http://blog.itpub.net/9240380/viewspace-666622/

 

SQL> declare
2 v_sid v$session.sid%type; --定義如下兩個type類型,用於接收cursor
v_serial# v$session.serial#%type;
3 4 cursor cur_session is select sid,serial# from v$session where program ='plsqldev.exe'; --#定義cursor
5 begin
6 open cur_session; --打開cusor
7 loop --打開游標馬上開始迴圈,因為cursor是一條條取數據的
8 fetch cur_session into v_sid,v_serial#; --把游標的數據放入上面定義的type變數中
9 --根據以上的type變數及游標生成批量殺session的動態sql腳本,並執行
10 execute immediate 'alter system kill session '''||v_sid||','||v_serial#||''' immediate';
11 exit when cur_session%notfound; --要加個異常處理,不然永遠是死迴圈
12 dbms_output.put_line('cursor date have been fetched ending');
13 end loop; --loop也有成雙匹配出現
14 close cur_session; --游標處理完後,關閉游標
15 end;
16 /
declare
*
ERROR at line 1:
ORA-00030: User session ID does not exist.
ORA-06512: at line 10

 

明顯殺會話時候,會話不存在。再執行類似的PL/SQL 塊

SQL> SET serverout ON
SQL> DECLARE
2 v_ename EMP.ENAME%TYPE;
3 v_salary EMP.SAL%TYPE;
4 CURSOR c_emp IS SELECT ename,sal FROM emp;
5 BEGIN
6 OPEN c_emp;
7 loop
8 exit when c_emp%notfound;
9 FETCH c_emp INTO v_ename,v_salary;
10 DBMS_OUTPUT.PUT_LINE('Salary of Employee: '|| v_ename ||' is '|| v_salary);
11 end loop;
12 CLOSE c_emp;
13 END ;
14 /
Salary of Employee: SMITH is 800
Salary of Employee: ALLEN is 1600
Salary of Employee: WARD is 1250
Salary of Employee: JONES is 2975
Salary of Employee: MARTIN is 1250
Salary of Employee: BLAKE is 2850
Salary of Employee: CLARK is 2450
Salary of Employee: SCOTT is 3000
Salary of Employee: KING is 5000
Salary of Employee: TURNER is 1500
Salary of Employee: ADAMS is 1100
Salary of Employee: JAMES is 4400
Salary of Employee: FORD is 3000
Salary of Employee: MILLER is 1300
Salary of Employee: MILLER is 1300

結果最後一行迴圈執行了2次,在殺會話plsql中,殺最後一個會話操作也執行了2次,所以會遇到報錯。

 

調整PL/SQL 塊語句,將exit when cur_session%notfound;  放在fetch 之後,也就是要迴圈執行的語句之前就解決了

 

declare
v_sid v$session.sid%type; --定義如下兩個type類型,用於接收cursor
v_serial# v$session.serial#%type;
cursor cur_session is select sid,serial# from v$session where program ='plsqldev.exe'; --#定義cursor
begin
open cur_session; --打開cusor
loop --打開游標馬上開始迴圈,因為cursor是一條條取數據的
fetch cur_session into v_sid,v_serial#; --把游標的數據放入上面定義的type變數中
exit when cur_session%notfound; --要加個異常處理,不然永遠是死迴圈
--根據以上的type變數及游標生成批量殺session的動態sql腳本,並執行
execute immediate 'alter system kill session '''||v_sid||','||v_serial#||''' immediate';
dbms_output.put_line('cursor date have been fetched ending');
end loop; --loop也有成雙匹配出現
close cur_session; --游標處理完後,關閉游標
end;
/

 

SQL> select sid,serial#,status from v$session where program ='plsqldev.exe';

SID         SERIAL#    STATUS
---------- ---------- --------
26         27         INACTIVE
1159       189        INACTIVE

SQL>
SQL> declare
2 v_sid v$session.sid%type; --定義如下兩個type類型,用於接收cursor
3 v_serial# v$session.serial#%type;
4 cursor cur_session is select sid,serial# from v$session where program ='plsqldev.exe'; --#定義cursor
5 begin
6 open cur_session; --打開cusor
7 loop --打開游標馬上開始迴圈,因為cursor是一條條取數據的
8 fetch cur_session into v_sid,v_serial#; --把游標的數據放入上面定義的type變數中
9 exit when cur_session%notfound; --要加個異常處理,不然永遠是死迴圈
10 --根據以上的type變數及游標生成批量殺session的動態sql腳本,並執行
11 execute immediate 'alter system kill session '''||v_sid||','||v_serial#||''' immediate';
12 dbms_output.put_line('cursor date have been fetched ending');
13 end loop; --loop也有成雙匹配出現
14 close cur_session; --游標處理完後,關閉游標
15 end;
16 /
cursor date have been fetched ending
cursor date have been fetched ending

PL/SQL procedure successfully completed.

SQL> select sid,serial#,status from v$session where program ='plsqldev.exe';

no rows selected


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • https://blog.csdn.net/hliq5399/article/details/78193113 ...
  • 資料庫必須具備的四個特性 1:原子性:事務包含的所有操作要麼全部成功,要麼全部失敗回滾;成功必須要完全應用到資料庫,失敗則不能對資料庫產生影響; 2:一致性:事務執行前和執行後必須處於一致性狀態, 例:用戶A和用戶B的前加起來一共是5000; 無論AB用戶之間是如何相互轉換的,事務結束後兩個用戶的錢 ...
  • Mysql的概述 Mysql的安裝和初次使用 Mysql的基本概念 1. Mysql的英文單詞是: database,簡稱 DB. 2. 什麼是資料庫? 用於存儲和管理數據的倉庫 3. 資料庫的特點: 持久化存儲數據.其實資料庫就是一個文件系統 方便存儲和管理數據. 使用統一的方式操作資料庫. 4. ...
  • 一臺資料庫伺服器的事務日誌備份作業偶爾會出現幾次備份失敗的情況,具體的錯誤信息為: DATE/TIME: 2018/7/30 12:10:52 DESCRIPTION: BackupDiskFile::CreateMedia: Backup device 'M:\DB_BACKUP\LOG_BACK... ...
  • 一、前言 在之前的文章已經詳細介紹了redis入門基礎已經持久化相關內容包括redis4.0所提供的混合持久化。 通過持久化功能,Redis保證了即使在伺服器宕機情況下數據的丟失非常少。但是如果這台伺服器出現了硬碟故障、系統崩潰等等,不僅僅是數據丟失,很可能對業務造成災難性打擊。為了避免單點故障通常 ...
  • 從SQLServer導數據到Oracle大概有以下幾種方法: 1. 使用SSMS的導出數據嚮導,使用Microsoft ODBC for Oracle或Oracle Provider for OLE DB連接到Oracle 2. 導出到平面文件 3. 導出包含數據的SQL腳本。 4. 使用ETL工具 ...
  • 一:在新表已經建立好的情況下 1,拷貝所有的欄位 insert into new_table select * from old_table 2,拷貝部分欄位表 insert into new_table(id,name,sex) select id,name,sex from old_table ...
  • 經濟學上有個“海盜分金”模型,如何用sql解決,並優化sql ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...