ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 有關oracle鏈接斷開時的事務自動提交

有關oracle鏈接斷開時的事務自動提交

原创 Linux操作系统 作者:chinak62 时间:2010-04-23 11:07:38 0 删除 编辑

有關oracle鏈接斷開時的事務處理

今天在學習oracle過程中,發現當客戶端與oracle的連接斷開時。連接內的事務會隨斷開的不同類型而不同
環境:
服務器端:linux Redhat 5 + oracle 10g 10.2.0.1 64bit
客戶端:windows XP + PLSQL developer
在客戶端的plsql developer中建立一個到服務器端的連接。
在服務器端同時使用sqlplus也建立一個連接。用于觀察客戶端連接中的事務是否提交
場景一:
step1:在plsql developer中執行insert 語句。而不提交。此時在服務器的sqlplus中也確認沒有數據改變
step2:在plsql developer中執行disconn語句斷開鏈接。此時在服務器的sqlplus中確認到數據已經插入成功
場景二:
step2:在plsql developer中關閉直接command windows。此時在服務器的sqlplus中確認到數據已經插入成功
場景三:
step2:直接在windows的任務管理器中關閉plsql developer進程。此時在服務器的sqlplus中確認到數據沒有改變。推測事務回滾。

而后在客戶端直接使用sqlplus連接服務器進行相關實驗。得到同樣結果
總結:客戶端到oracle的連接如果正常退出,則連接內的事務會自動提交。若非正常退出則回滾。

由此實驗帶來另一個問題:在進行實驗時發現。不論客戶端是否正常退出。在連接斷開很短時間(應該3秒以內)在服務器上使用
select * from v$session查詢發現 沒有鏈接的session記錄。正常退出還好理解是客戶端告知oracle關閉session鏈接。
如果客戶端非正常退出時。oracle憑何判斷客戶端的連接session斷開,  超時?

同時發現:不論是否非正常斷開。所斷開sesseion直接對應的server process其實并沒有關閉。說明oracle的鏈接并沒有回收。PGA也沒有回收,

待解決問題:
1:oracle服務器如何維持客戶端的session連接信息(按照有關說法該信息保存于PGA中),是否V$session的信息是實時的?這些信息oracle是如何維護的呢?

2:實驗的證明session的斷開并不會導致oracle關閉server proces而回收PGA,問oracle如何管理PGA,什么時候會發生PGA的關閉以及回收。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/180324/viewspace-660535/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-04-18

  • 博文量
    12
  • 访问量
    35605