Skop Transaksi: Ketidakkonsistenan Peningkatan MSDTC Merentas Mesin
Projek kami menggunakan TransactionScope untuk akses data yang boleh dipercayai, tetapi kami telah menghadapi tingkah laku yang tidak konsisten. Sesetengah pembangun berfungsi dengan lancar tanpa MSDTC, manakala yang lain menerima ralat "MSDTC pada [SERVER] tidak tersedia". Penyiasatan ini meneroka sebab TransactionScope meningkat kepada MSDTC pada sesetengah mesin tetapi tidak pada yang lain.
TransactionScope idealnya mengelakkan MSDTC pada mesin pelanggan. Walau bagaimanapun, beberapa senario boleh mencetuskan peningkatan DTC:
Walau bagaimanapun, kod ada mengandungi bukaan sambungan bersarang, bertentangan dengan penegasan sambungan terbuka tunggal. Sambungan bersarang ini merupakan suspek yang kuat untuk masalah peningkatan pada mesin yang terjejas.
Versi SQL Server memainkan peranan yang penting. SQL Server 2008 memperbaik pengendalian transaksi, membenarkan berbilang sambungan dalam TransactionScope (dibuka pada masa yang berbeza) tanpa peningkatan. SQL Server 2005, bagaimanapun, tidak mempunyai keupayaan ini dan meningkat kepada DTC dengan sambungan kedua.
Yang penting, pembangun tanpa isu peningkatan menggunakan SQL Server 2008, manakala mereka yang menghadapi ralat menggunakan SQL Server 2005. Ini mengesahkan korelasi yang disyaki antara versi SQL Server dan peningkatan MSDTC.
Untuk SQL Server 2005, sambungan global tunggal yang tahan lama diperlukan untuk TransactionScope berfungsi dengan betul. Ini bercanggah dengan amalan terbaik (membuka sambungan hanya apabila diperlukan dan menutupnya dengan segera). Menggunakan TransactionScope dengan SQL Server 2005 mungkin tidak optimum melainkan prestasi overhed sambungan berterusan boleh diterima.
Atas ialah kandungan terperinci Mengapa Transaksi saya meningkat kepada MSDTC pada beberapa mesin tetapi bukan yang lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!