বলুন আমি একটি ক্যোয়ারী চালাচ্ছি
begin tran
update users
set name = 'Jimmy'
where name = 'john'
আমি যদি লেনদেনটি রোলব্যাক না করি , তাহলে কি এই পরিবর্তনগুলি করা হবে, এটি ত্রুটি ঘটায় বা এটি যেভাবেই রোলব্যাক হিসাবে কাজ করবে?
বলুন আমি একটি ক্যোয়ারী চালাচ্ছি
begin tran
update users
set name = 'Jimmy'
where name = 'john'
আমি যদি লেনদেনটি রোলব্যাক না করি , তাহলে কি এই পরিবর্তনগুলি করা হবে, এটি ত্রুটি ঘটায় বা এটি যেভাবেই রোলব্যাক হিসাবে কাজ করবে?
উত্তর:
লেনদেন কী তা আপনাকে বুঝতে হবে - এটি কাজের একক ইউনিট। এটি সমস্ত বা কিছুই নয় ( এসিডি বৈশিষ্ট্য অনুসরণ করে ) এবং এটি ডাটাবেসের ধারাবাহিকতার গ্যারান্টি দেয়।
আমি যদি লেনদেনটি রোলব্যাক না করি, তবে কি এই পরিবর্তনগুলি করা হবে?
যদি আপনি প্রতিশ্রুতিবদ্ধ হন তবে পরিবর্তনগুলি করা হবে। এসকিউএল সার্ভার লেনদেন লগের সমস্ত পরিবর্তন রেকর্ড করবে এবং একবার আপনি প্রতিশ্রুতিবদ্ধ হয়ে গেলে সেগুলি ডেটা ফাইলে শক্ত হয়ে যায়।
যদি আপনি প্রতিশ্রুতি না দেন তবে আপনার লেনদেন অনির্দিষ্টকালের জন্য উন্মুক্ত থাকবে - যা আপনি দেখতে sys.dm_tran_active_transactions / sys.dm_tran_database_transactions / sys.dm_tran_session_transactionsবা ব্যবহার করতে পারেন DBCC OPENTRAN।
এছাড়াও, আপনি যা শুরু করেছেন তা হ'ল একটি স্পষ্ট লেনদেন , যা স্পষ্টভাবে কোনও কমিট বা রোলব্যাকের বিবৃতি দিয়ে শেষ করা উচিত।
আরও পড়ুন - সর্বদা লেনদেন তৈরি করা কি খারাপ অভ্যাস?
আপনি যদি লেনদেন প্রতিশ্রুতিবদ্ধ বা রোলব্যাক না করেন তবে লেনদেন অনির্দিষ্টকালের জন্য অব্যাহত থাকবে। এটি এর লকগুলি ধরে রাখা অব্যাহত রাখবে, সম্ভাব্যভাবে অন্যান্য সেশনগুলিকে অবরুদ্ধ করে রাখবে যতক্ষণ না হয় আপনি লেনদেনটি একটি commitবা একটি মাধ্যমে চালিয়ে যান বা rollbackডিবিএ উপস্থিত না করে এবং সেশনটি মেরে না ফেলে (অথবা নেটওয়ার্ক হিচাপের মতো কোনও কিছু সংযোগ ব্যর্থ হওয়ার কারণ না ঘটে)। যদি কোনও ডিবিএ অধিবেশনটিকে হত্যা করে তবে তারা স্পষ্টতই এই এবং অন্য কোনও উন্মুক্ত লেনদেনের জন্য একটি রোলব্যাক জারি করবে।
যতক্ষণ না এই লেনদেনটি করা হয়, ততক্ষণ পরিবর্তন করা হবে না যতক্ষণ না উপরে বর্ণিত উত্তর হিসাবে উল্লিখিত সমস্ত কিছুই বা কিছুই নয়,
পারমাণবিকতা এর পিছনে কারণ, আপনি এসিডি লেনদেনের বৈশিষ্ট্যগুলি পরীক্ষা করতে পারেন, এটি একটি ডাটাবেস সিস্টেম অনুসরণ করে এমন মৌলিক বৈশিষ্ট্য।