有關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博客 ” ,链接:http://blog.itpub.net/180324/viewspace-660535/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/180324/viewspace-660535/