মার্কের উত্তর প্রসারিত করা হচ্ছে ...
যখন ক্লায়েন্টের টাইমআউট ইভেন্ট ঘটে (উদাহরণস্বরূপ .net কমান্ডটাইমআউট), ক্লায়েন্ট এসকিউএল সার্ভারে একটি "ABORT" প্রেরণ করে। এসকিউএল সার্ভারটি তখন সহজেই ক্যোয়ারী প্রসেসিংটি ত্যাগ করে। কোনও লেনদেন আবার ঘুরিয়ে দেওয়া হয় না, কোনও লক প্রকাশ হয় না।
এখন, সংযোগটি পুলটিতে ফিরে এসেছে, সুতরাং এটি এসকিউএল সার্ভারে বন্ধ নেই isn't যদি এটি কখনও ঘটে (কেআইএলএল বা ক্লায়েন্ট রিবুট ইত্যাদির মাধ্যমে) তবে লেনদেন + লক সাফ হয়ে যাবে। নোট করুন যে sp_reset_connication এগুলি করার জন্য বিজ্ঞাপন দেওয়া সত্ত্বেও সেগুলি সাফ করবে না বা সাফ করবে না
গর্ভপাত থেকে এই ডিপ্রিটাস অন্যান্য প্রক্রিয়া অবরুদ্ধ করবে।
এসকিউএল সার্ভারকে ক্লায়েন্ট টাইম আউট (স্পষ্টভাবে, ABORT ইভেন্টগুলি) লকগুলি স্পষ্ট লেনদেন করার উপায়টি হল SET XACT_ABORT চালু।
আপনি এটি এসএসএমএসে 2 টি কোয়েরি উইন্ডো খোলার যাচাই করতে পারেন:
উইন্ডো 1:
মেনু ক্যোয়ারিতে ... ক্যোয়ারী বিকল্পগুলি 5 সেকেন্ডের একটি সময়সীমা নির্ধারণ করে এটি চালান
BEGIN TRAN
UPDATE sometable WITH (TABLOCKX) SET foo = foo WHERE 1 = 0;
WAITFOR DELAY '00:00:10' -- just has to be longer then timeout
উইন্ডো 2, এটি চিরকাল অপেক্ষা করবে (অথবা আপনার সময়সীমাটি হিট করবে)
SELECT * FROM sometable
SET XACT_ABORT চালু এর আকর্ষণীয় পার্শ্ব প্রতিক্রিয়াও রয়েছে:
- অন্তর্ভুক্ত রোলব্যাকের ক্ষেত্রে @@ ট্রান্ট শূন্যে সেট করা আছে তবে ত্রুটি 266 টি দমন করা হয় (যদি এমন হয় যদি @@ ট্রানট্র্যাক্ট সঞ্চিত সংগ্রহ থেকে প্রস্থান এবং প্রস্থানের ক্ষেত্রে আলাদা হয়)
- XACT_STATE হবে -১ (এটি "ডুমুড")
এর সংমিশ্রণের অর্থ হ'ল আপনি আংশিক কমিটি / রোলব্যাকের জন্য সঞ্চয়পত্রগুলি (যদিও, আমি সঠিক আচরণটি স্মরণ করতে পারি না) ব্যবহার করতে পারবেন না। যা আমার জন্য উপযুক্ত
এসইটি XACT_ABORT এ লিঙ্কগুলি:
নেস্টেড স্টোরেড প্রোকসগুলিতে:
এসপি_সেট_ সংযোগে: