成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在Oracle 8x中實現自動斷開后再連接的實現

數據庫 Oracle
如果你想對Oracle 8x里實現自動斷開后再連接中的后臺任務的定時執行這一項目有研究的話,以下的文章的相關內容可以供你們參考。

以下的文章主要描述的是如何在Oracle 8x中實現自動斷開后再連接的實際操作方案,其中涉及到識別系統中規定超過一定的空閑時間的連接,以及識別及斷開空閑用戶的存儲過程等,相關內容的描述。

在實際的數據庫應用中,我們經常遇到這樣一個問題,連接到Oracle數據庫的用戶在作了一次操作后,再也沒有后續操作,但卻長時間沒有和數據庫斷開連接。對于一個小型的應用系統來講,本身的連接數目就有限,這好像沒有什么嚴重的后果,但如果對于一個大型的數據庫應用。

如稅務、工商等,如果數據庫的連接數目很多,對于數據庫服務器來講,多一個連接就要多消耗一份資源,如果大量用戶連接進入數據庫系統但卻不進行任何的操作,這無形之中就白白造成了服務器系統資源的浪費,同時造成服務器負載的提高,對于那些確實在工作的用戶來講,就不能最大限度的利用服務器的資源,嚴重情況下可能造成系統性能的急劇下降。

針對這種問題,該如何處理呢?對于目前流行的三層結構(Browser/Application/Server)開發來講,這個問題可以通過設置應用服務器端的連接共享池(shared pool)來避免。但對于傳統的兩層結構(Client/Server)應用,就必須由我們人為干預來避免這種資源浪費情況。

具體可以通過一個后臺任務來監控系統中的所有進程,對于那些空閑超過一定時間的進程采取一定的特殊處理措施,如在客戶端提示用戶連接時間太長,如果沒有后續操作系統將自動殺掉該連接或者直接將該空閑連接殺掉。下面就來具體討論如何在Oracle 8x環境下實現用戶進程的自動監控及其對對超過一定空閑時間連接的處理辦法。

一、識別系統中超過一定空閑時間的連接

要實現后臺任務自動對超過一定時間空閑連接的處理,首先第一步工作就是要從所有與數據庫服務器的Oracle 8x中實現自動斷開后再連接中識別出那些連接需要處理,也就是需要獲得與服務器連接的每個用戶的登陸時間及其最后一次操作后的空閑時間。在Oracle系統中,有一個動態性能視圖v$session,該視圖保存著系統當前連接的各種動態信息。其中,有兩個字段LOGON_TIME和 LAST_CALL_ET可以得到上面的兩個答案。

l LOGON_TIME是一個日期型(Date)字段,為用戶登陸時間;

l LAST_CALL_ET是一個數字型(Number)字段,其含義是用戶最后一條語句執行完畢后的時間,單位為秒。每次用戶執行一個新的語句后,該字段復位為0,重新開始記數。我們可以通過該字段來獲得一個連接用戶最后一次操作數據庫后的空閑時間。

下面的SQL查詢語句可以得到與當前數據庫連接的所有用戶的一些基本情況,如用戶名、狀態、連接機器的名稱,操作系統中用戶的名稱,UNIX系統的進程號,在UNIX操作系統級斷開連接的語句,Oracle數據庫系統斷開連接的語句,登陸時間以及最后一次操作到現在的空閑時間等等。

在上面的查詢中,我們可以通過SUBSTR (machine, 1, 19) NOT IN ('機器名')這個條件來屏蔽一些機器,這些機器可能需要運行一些耗費很長時間的SQL語句或其他一些特殊情況的機器。屏蔽這些機器的原因就是在后面的后臺自動識別及處理任務中對這些機器不作處理。

二、識別及斷開空閑用戶的存儲過程

上面的查詢語句可以得到系統中所有的連接用戶的一些基本情況,但是又如何來實現系統自動判斷空閑超過一定時間的連接并將其自動斷開呢?Oracle系統提供了一種稱之為后臺任務(Job)自動處理的機制。我們可以編寫一個后臺任務來定時執行,從而判斷是否存在這樣的用戶連接,如果存在,則通過后臺任務將其自動斷開。

首先創建一個存儲過程來完成空閑一定時間用戶的識別和斷開工作,然后添加一個后臺任務來定時(根據空閑時間長短來確定)執行該過程,即可實現自動斷開系統中空閑超過一定時間用戶的需求。

存儲過程p_monitor見下,其中參數an_nimutes為用戶輸入參數,用來確定識別和斷開多長空閑時間Oracle 8x中實現自動斷開后再連接的用戶,單位為分鐘,默認為60分鐘,也就是1小時。需要注意一點的是,該存儲過程,需要以sys用戶身份運行。相應,調用該存儲過程的后臺任務也需要以SYS身份來添加。

  1. CREATE OR REPLACE PROCEDURE P_MONITOR(   
  2. AN_MINUTES NUMBER DEFAULT 60)   

存儲過程用途:識別出系統中超過一定空閑連接時間(
AS_MINUTES)的用戶,并將其kill掉參數:
AN_MINUTES 空閑時間數,單位為分鐘,默認為60分鐘
 

  1. AS   
  2. v_Str VARCHAR2(100);   
  3. CURSOR C_users(v_minutes number) IS  SELECT s.username,   
  4. s.status, s.machine, 'alter system kill session '   
  5. ||''''||s.sid||','||s.serial# ||'''' operates   
  6. FROM v$session s, v$process p   
  7. WHERE TYPE = 'USER'   
  8. AND p.addr = s.paddr   
  9. AND status != 'KILLED'   
  10. -- AND SUBSTR (machine, 1, 19) NOT IN ('需要屏蔽不被處理的機器名')   
  11. AND last_call_et > v_minutes*60   
  12. ORDER BY last_call_et desc;   
  13. BEGIN   
  14. FOR T_users IN C_users(an_minutes) LOOP   
  15. v_Str :T_USERS.OPERATES;   
  16. EXECUTE IMMEDIATE v_str;   
  17. END LOOP;   
  18. END;   
  19. /   

 

三、后臺任務的定時執行

最后,我們為系統添加一個定時任務,定時調用上面創建的存儲過程,即可完成系統自動識別和處理空閑用戶的工作。

下面是一個實際調用的例子,在sys用戶下,首先添加一個任務,該任務每隔半小時運行一次,每次均調用P_monitor存儲過程,找出系統中空閑時間超過1小時的Oracle 8x中實現自動斷開后再連接,然后自動斷開。

  1. DECLARE   
  2. jobno number;   
  3. BEGIN   
  4. DBMS_JOB.SUBMIT(   
  5. job => jobno,   
  6. what => 'p_monitor(60);',   
  7. next_date => SYSDATE,   
  8. interval => '/*1:Hr*/ sysdate + 30/1440); -- 每半小時運行一次   
  9. END;   
  10. /  
  1. DECLARE   
  2. jobno number;   
  3. BEGIN   
  4. DBMS_JOB.SUBMIT(   
  5. job => jobno,   
  6. what => 'p_monitor(60);',   
  7. next_date => SYSDATE,   
  8. interval => '/*1:Hr*/ sysdate + 30/1440); -- 每半小時運行一次   
  9. END;   
  10. /  

 

以上的相關內容就是對在Oracle 8x中如何實現自動斷開后再連接的介紹,望你能有所收獲。

【編輯推薦】

  1. Oracle 10G for linux常用命令淺析
  2. Oracle 權限入門如何管理
  3. Oracle創建Split 與Map 函數的代碼示例
  4. Oracle 字符串split的相關實際應用代碼介紹
  5. Oracle數據庫的安全,PL/SQL的SQL注入
責任編輯:佚名 來源: 博客園
相關推薦

2009-06-26 16:21:22

Oracle自動增長Hibernate

2011-05-16 09:58:14

Windows 8

2011-05-17 14:19:28

Oracle異地數據庫自動備份

2010-05-10 14:16:50

Oracle樹結構

2009-05-12 10:36:38

OracleREDO恢復

2010-04-06 15:41:22

Oracle repo

2011-03-22 10:36:39

Oracle數據庫自動增長列

2010-10-12 11:31:07

連接MYSQL

2011-05-17 11:02:23

Oracle網絡結構連接

2010-05-05 17:19:32

Oracle存儲過程

2009-07-09 16:12:53

WeblogicJDBC

2010-10-26 16:07:45

連接oracle數據庫

2010-10-26 16:27:37

連接Oracle數據庫

2022-04-10 22:50:20

SSHLinux會話

2019-10-08 11:10:18

React自動保存前端

2010-10-29 16:41:12

Oracle模糊查詢

2010-11-16 09:18:39

oracle重建索引

2010-10-27 17:00:32

oracle樹查詢

2009-12-28 17:17:52

WPF導航

2024-01-29 00:57:20

GuavaJava拷貝
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产午夜精品一区二区三区四区 | 永久免费在线观看 | 午夜私人影院在线观看 | 黑人巨大精品欧美黑白配亚洲 | 岛国在线免费观看 | 亚洲免费人成在线视频观看 | 亚洲精品成人 | 中文字幕在线免费观看 | 久久久精品 | 精品日韩 | 天堂色网| 国产精品一区二区三区四区 | 可以在线看的黄色网址 | 精品久久久久久国产 | 精品一区二区三 | 精品日韩一区二区 | 狠狠骚 | 久久精品国产免费一区二区三区 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 亚洲97| 成人不卡一区二区 | 超碰一区二区 | 人人做人人澡人人爽欧美 | 国内精品一区二区 | 激情国产 | 国产精品成人在线观看 | 一级免费在线视频 | 欧美一区二区三区国产 | 九九热这里只有精品6 | 国产亚洲成av人片在线观看桃 | 国产精品日韩欧美一区二区 | av午夜激情| 一区视频在线播放 | 伊人久久综合影院 | 欧美久久一区二区 | 看黄在线 | 亚洲精品18 | 久久日韩精品 | 在线午夜 | 欧美黑人体内she精在线观看 | 亚洲高清在线 |