ট্রানসেকশন আইসোলেশন লেভেল স্নাপশট বনাম ট্র্যাঙ্কেট?


10

আমি আশা করছি যে কেউ এই আচরণ সম্পর্কে কিছুটা আলোকপাত করতে পারে যা আমি এসএনএপশট বিচ্ছিন্নতা বনাম ট্র্যাঙ্কেটের বিষয়ে আশা করিনি।

ডাটাবেস: স্ন্যাপশট বিচ্ছিন্ন করার অনুমতি দিন = সত্য; ইজ পড়ুন কমিটেড স্ন্যাপশট চালু = মিথ্যা।

প্রক্রিয়া 1 (প্রচুর যোগদানের সাথে একটি দীর্ঘ-চলমান জটিল SELECT থেকে টেবিল ফু এর সামগ্রী প্রতিস্থাপন করে):

BEGIN TRAN; 
TRUNCATE TABLE foo; 
INSERT INTO foo SELECT...; 
COMMIT;

প্রক্রিয়া 2 (টেবিল ফু থেকে পড়া):

SET TRANSACTION ISOLATION LEVEL SNAPSHOT; 
SELECT * FROM foo;

যদি প্রসিডিউর 1 চলমান থাকে যখন প্রসেসর 2 কার্যকর করা হয়, তবে প্রক্রিয়া 2 শেষ না হওয়া অবধি LCK_M_SCH_S অপেক্ষা (sp_WhoIsActtive অনুযায়ী) ধরে রাখা হবে। এবং যখন প্রক্রিয়া 2 সম্পূর্ণ হয়, এটি এই ব্যতিক্রম উত্থাপন করে:

স্ন্যাপশট বিচ্ছিন্ন লেনদেন ডাটাবেস 'ডাটাবেসনাম' এ ব্যর্থ হয়েছে কারণ বিবরণী দ্বারা অ্যাক্সেস করা অবজেক্টটি এই লেনদেন শুরুর পর থেকে অন্য একসাথে লেনদেনে একটি ডিডিএল স্টেটমেন্ট দ্বারা পরিবর্তিত হয়েছে। এটি অনুমোদিত নয় কারণ মেটাডেটা সংস্করণযুক্ত নয়। স্ন্যাপশট বিচ্ছিন্নতার সাথে মেশানো হলে মেটাডেটার সাথে একযোগে আপডেট অসঙ্গতি হতে পারে।

তবে মাইক্রোসফ্ট এসএনএপএসএইচটিওটি বিচ্ছিন্নকরণের অধীনে অনুমোদিত নয় এমন ডিডিএল স্টেটমেন্ট হিসাবে ট্রুনসেটকে তালিকাবদ্ধ করে না: http://msdn.microsoft.com/en-us/library/bb933783.aspx

স্পষ্টতই আমি কিছু সঠিকভাবে বুঝতে পারছি না, কারণ আমি ট্র্যাকসিকেটের আগে টেবিল থেকে সর্বাধিক প্রতিশ্রুতিবদ্ধ ডেটা তাত্ক্ষণিকভাবে প্রসেসর 1 দ্বারা প্রেরণ করা বা প্রক্রিয়া 1 দ্বারা ধরে রাখা এবং তারপরে নতুন বিষয়বস্তু ফিরিয়ে দেওয়ার সবচেয়ে খারাপ কেসটি আশা করেছি টেবিল। তুমি কি সাহায্য করতে পারো?


আপনি কি এর পরিবর্তে FooM fooM ব্যবহার করতে পারবেন? এটি স্কিমা লক রাখবে না।
স্ক্ল্যাসিডিড

আমি যেভাবে এটিকে ঘিরে কাজ করছি তা সত্যই মুছে ফেলা। আমি কেন ত্রুটি পাচ্ছি (এবং কেবলমাত্র প্রক্রিয়া 1 রিটার্নের পরে) আমি এতে আগ্রহী।
ফ্রিম্যান

উত্তর:


19

'DDL'তালিকাভুক্ত ক্রিয়াকলাপগুলির তালিকা বিস্তৃত নয় (এবং TRUNCATE TABLEকেবলমাত্র সেই তালিকা থেকে বাদ নেই)। কিনা TRUNCATE TABLEহয় DMLবা DDLবিতর্কের উভয় পক্ষের প্রবর্তক উদাহরণ, এসকিউএল সার্ভার একটি পরিপূর্ণ প্রশ্ন হল, এবং বই অনলাইন মধ্যে উভয় উপায় প্রবেশকার্য নেই।

স্ন্যাপশট বিচ্ছিন্ন লেনদেনের দৃষ্টিকোণ থেকে, কাটা কাটাতে একটি Sch-Mলক নেওয়ার প্রয়োজনীয় গুণ রয়েছে যা ব্লকটি ব্যাখ্যা করে (কারণ RCSIএবং SIএখনও Sch-Sলকগুলি অর্জন করে ); এবং এটি অভ্যন্তরীণ মেটাডেটা সংস্করণকেও আটকায় (অভ্যন্তরীণ কারণে *) যার ফলে ত্রুটি 3961 হয়।

সুতরাং, আপনি যে আচরণটি দেখছেন তা প্রত্যাশিত, কেবল খুব ভালভাবে নথিভুক্ত করা হয়নি।

* ট্রানসেট টেবিলের বর্তমান বাস্তবায়ন সারি সংস্করণ তৈরি করে না। মেটাডাটা সংস্করণটি বাম্পিং করা সঠিক আচরণ নিশ্চিত করার সহজ উপায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.