读懂ConnectString 中 enlist 设置的含义
生活随笔
收集整理的這篇文章主要介紹了
读懂ConnectString 中 enlist 设置的含义
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
因為上次遇到在webservice中處理事務的問題,偶然在調試程序的時候對OracleConnection的連接字符串enlist設置的一個有趣的發現。
????? 以前看過一篇文章,不記得是什么文章了,文章中說對enlist最好設置為false,當時也沒有怎么去深究為什么要設置為false,在我的程序中enlist=false就直接寫進去了。現在才發現原來對enlist的設置與事務的處理是有這微妙的關系的。
????? 事務管理器一般采用兩種方式來管理,一種稱之為Lightweight Transaction Management,簡稱LTM,一種稱之為oleX TM。在Simple phase提交中一般使用的是LTM,而在分布式事務處理中一般用的是2PC,所以使用的方式是oleX TM的方式。
????? 如果enlist=false,那么意味著后續的事務不會在當前事務中登記,所以當前事務不會成為事務的根。如果在程序中使用了分布式事務處理,可能也不會正確的執行(關于這一點我沒有做測試)。此時程序告訴TM采用LTM的方式來管理。
????? 如果enlist=true,那么進程告訴TM需要使用oleX TM的方式來管理,此時會自動啟用分布式事務管理,所以如果在連接字符串中將enlist=true,如果使用的是oracle數據庫,那么后臺會調用oramts.dll,如果在開發環境下沒有安裝MTS for Oracle服務,那么就會提示找不到oramts.dll。你可以從oracle的站點上下載這個服務的安裝包,不知道為什么oracle不提供單獨的安裝包,而是與odac捆綁在一起下載。
????? 以前看過一篇文章,不記得是什么文章了,文章中說對enlist最好設置為false,當時也沒有怎么去深究為什么要設置為false,在我的程序中enlist=false就直接寫進去了。現在才發現原來對enlist的設置與事務的處理是有這微妙的關系的。
????? 事務管理器一般采用兩種方式來管理,一種稱之為Lightweight Transaction Management,簡稱LTM,一種稱之為oleX TM。在Simple phase提交中一般使用的是LTM,而在分布式事務處理中一般用的是2PC,所以使用的方式是oleX TM的方式。
????? 如果enlist=false,那么意味著后續的事務不會在當前事務中登記,所以當前事務不會成為事務的根。如果在程序中使用了分布式事務處理,可能也不會正確的執行(關于這一點我沒有做測試)。此時程序告訴TM采用LTM的方式來管理。
????? 如果enlist=true,那么進程告訴TM需要使用oleX TM的方式來管理,此時會自動啟用分布式事務管理,所以如果在連接字符串中將enlist=true,如果使用的是oracle數據庫,那么后臺會調用oramts.dll,如果在開發環境下沒有安裝MTS for Oracle服務,那么就會提示找不到oramts.dll。你可以從oracle的站點上下載這個服務的安裝包,不知道為什么oracle不提供單獨的安裝包,而是與odac捆綁在一起下載。
?????? 如果你沒有對enlist配置會出現什么樣的情況呢?這樣看你的程序是使用分布式事務還是一般性的事務處理。TM會根據程序的請求自動做出反應。
?????? 簡單的講enlist=true則支持分布式事務處理(支持Transactionscope 事物處理),反之依然.
?
結論:enlist對事務的登記有一定的控制作用。如果我的描述有錯,請幫助指正。轉載于:https://www.cnblogs.com/jhxk/articles/1781768.html
總結
以上是生活随笔為你收集整理的读懂ConnectString 中 enlist 设置的含义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求了不起的盖茨比电影资源,谢谢
- 下一篇: “再拜受斯言”下一句是什么