কীভাবে আমি এসকিউএল সার্ভারে একটি অ্যাপ লক অনুরোধ বাতিল করব?


25

Sp_getapplock সঞ্চিত পদ্ধতি নিম্নলিখিত রিটার্ন মান আছে:

0: লকটি সফলভাবে সিঙ্ক্রোনাস মঞ্জুর হয়েছিল।
1: অন্যান্য বেমানান লকগুলি প্রকাশের জন্য অপেক্ষা করার পরে লকটি সফলভাবে দেওয়া হয়েছিল।
-1: লক অনুরোধের সময় শেষ হয়েছে।
-2: লক অনুরোধ বাতিল করা হয়েছে।
-৩: লক অনুরোধটি একটি অচলাবস্থার শিকার হিসাবে বেছে নেওয়া হয়েছিল।
-999: প্যারামিটারের বৈধতা বা অন্য কল ত্রুটিটি নির্দেশ করে।

আমি sp_getapplockআমাদের ডেটা অ্যাক্সেস লেয়ারে কল করার জন্য একটি মোড়ক লিখছি এবং আমি জানতে চাই যে কোন পরিস্থিতিতে -2 ফিরিয়ে দেওয়া যায় যাতে আমি একটি বর্ণনামূলক এবং সহায়ক ব্যতিক্রম ছুঁড়ে ফেলতে পারি। এটি স্পষ্ট যে -1 এবং -3 এর রিটার্ন মানগুলি কী বোঝায় এবং আমি সহজেই পরীক্ষার শর্ত তৈরি করতে পারি যার ফলে এই মানগুলি ফিরে আসে। আমি কীভাবে -2 এর রিটার্ন মান পেতে পারি?

উত্তর:


5

sp_getapplockমোড়কের প্রকল্পের উত্সের দিকে তাকিয়ে , -999 ব্যতীত সমস্ত রিটার্ন মান অন্তর্নিহিত sys.xp_userlock অভ্যন্তরীণ সঞ্চিত পদ্ধতি থেকে উদ্ভূত । অনুরোধটি যখন কোনও মনোযোগ ইভেন্টের মাধ্যমে বাতিল করা হয় (ক্লায়েন্ট ক্যোয়ারী টাইমআউট বা ক্লায়েন্ট ক্যোয়ারী বাতিলকে স্পষ্ট করে দেওয়া হয়) তখন আমি অভ্যন্তরীণ প্রসকে একটি -২ রিটার্ন দেওয়ার জন্য বাজি ধরব। তবে, বিবৃতি sp_getapplockসহ ব্যাচ বাতিল হওয়ার পরে আর কোনও কোড কার্যকর করা হয় না RETURN। ফলস্বরূপ, -2 রিটার্ন কোড অভ্যন্তরীণভাবে ফিরে আসতে পারে তবে ক্লায়েন্টের জন্য মান পাওয়ার কোনও উপায় নেই।

এই তত্ত্বটি সঠিক বলে ধরে নিচ্ছি, -2 আরও বর্ণনামূলক বার্তায় অনুবাদ করার কোনও মূল্য নেই কারণ এটি ক্লায়েন্ট যে প্রথমে অনুরোধটি বাতিল করেছিল।

আমি এটি ডিবাগার দিয়ে এসকিউএল ডাটাবেস ইঞ্জিন কোডের মাধ্যমে পদক্ষেপের মাধ্যমে এটি নিশ্চিত করতে পলের কাছে ছেড়ে দেব :-)


1

sp_getapplock semaphores উপর লক তৈরি করে, শারীরিক বস্তু নয় (প্রতি এমএসডিএন)। এটি কেবলমাত্র অন্য প্রক্রিয়াটিকে অবরুদ্ধ করবে যদি এটি একই স্ট্রিং এবং একটি বেমানান লক মোড সহ sp_getapplock হয়।

সুতরাং পরিস্থিতিতে লক অনুরোধগুলি বাতিল করা হবে যেমন: উচ্চতর সুবিধা সহ ব্যবহারকারী লকটি বাতিল করে দেয়, একটি সার্ভার প্রক্রিয়াটি লকটি বাতিল করে দেয়, সঞ্চিত প্রক্রিয়া চালিত ব্যবহারকারী বা প্রশাসক লক প্রক্রিয়াটি মেরে ফেলে। আপনার বিবরণটি "সিস্টেম বা অন্য কোনও ব্যবহারকারী দ্বারা লক বাতিল" হতে পারে। আমি নিশ্চিত না আপনি কীভাবে প্রকৃত প্রক্রিয়া / ব্যবহারকারী নির্ধারণ করবেন যা লকটি বাতিল করেছে।


-1

এখানে একটি অনুরূপ রিলিজ অ্যাপ্লিকেশন লক স্টোরেজ পদ্ধতি রয়েছে যা sp_releaseapplock বলে।

অ্যাপ্লিকেশন প্রবাহকে নিয়ন্ত্রণ করতে এই সঞ্চিত পদ্ধতি ব্যবহারের বিষয়ে আমি এসকিউএল সার্ভার সেন্ট্রালে এখানে বিভ্রান্তিমূলকভাবে "এসকিউএলতে Mutexes" শিরোনামে একটি নিবন্ধ লিখেছিলাম ।


4
দেখে মনে হচ্ছে আপনি শিরোনামে প্রশ্নের উত্তর দিচ্ছেন তবে আসল প্রশ্নটি "কী পরিস্থিতিতে sp_getapplock ফিরে আসবে -2?"
মার্টিন স্মিথ

লক অনুরোধ বাতিল হয়েছে। আসলে, এটি একটি বিজোড়। প্রক্রিয়াটি কীভাবে এটি বাতিল হয়ে গেছে তা জেনেও কোনও লকের জন্য নিজের অনুরোধটি বাতিল করে দেবে! আপনাকে মেনে নিতে হতে পারে যে এমএস সরবরাহ করা ব্যতীত আপনি অর্থপূর্ণ ত্রুটি দিতে পারবেন না - "লক অনুরোধ বাতিল করা হয়েছিল"।
টবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.