উত্তর:
আপনি লেনদেন কমিট বা রোলব্যাক করবেন না , এটি এখনও "চলমান" এবং সম্ভাব্যভাবে লক ধরে আছে।
যদি আপনার ক্লায়েন্ট (অ্যাপ্লিকেশন বা ব্যবহারকারী) প্রতিশ্রুতি দেওয়ার আগে ডাটাবেসের সাথে সংযোগটি বন্ধ করে দেয় তবে যে কোনও চলমান লেনদেন আবার ঘুরিয়ে ফেলা হবে এবং সমাপ্ত হবে।
আপনি আসলে এটি নিজে চেষ্টা করে দেখতে পারেন, এটি কীভাবে কাজ করে তা অনুভব করতে সহায়তা করা উচিত।
ম্যানেজমেন্ট স্টুডিওতে একটি দুটি উইন্ডো (ট্যাব) খুলুন, তাদের প্রত্যেকেরই স্কয়ারের নিজস্ব সংযোগ থাকবে।
এখন আপনি একটি উইন্ডোতে লেনদেন শুরু করতে পারেন, সারণি / আপডেট / মুছার মতো কিছু জিনিস করুন তবে এখনও প্রতিশ্রুতিবদ্ধ নয়। তারপরে অন্য উইন্ডোতে আপনি দেখতে পাবেন যে লেনদেনের বাইরে থেকে ডাটাবেসটি কেমন দেখাচ্ছে। বিচ্ছিন্নতা স্তরের উপর নির্ভর করে প্রথম উইন্ডোটি প্রতিশ্রুতি না দেওয়া পর্যন্ত টেবিলটি লক হয়ে থাকতে পারে, বা অন্য লেনদেন এখনও পর্যন্ত কী করেছে তা আপনি দেখতে পাবেন না (ইত্যাদি) etc.
বিভিন্ন বিচ্ছিন্নতা স্তর এবং তারা কীভাবে ফলাফলকে প্রভাবিত করে তা দেখার জন্য কোনও লক ইঙ্গিত সহ খেলুন।
লেনদেনে কোনও ত্রুটি ফেললে কী হয় তা দেখুন।
এই সমস্ত জিনিস কীভাবে কাজ করে তা বোঝা খুব গুরুত্বপূর্ণ বা এসকিএলএর দ্বারা আপনি কীভাবে স্ট্যাম্পড হয়ে যাবেন, অনেক সময়।
আনন্দ কর! GJ।
লেনদেনগুলি সম্পূর্ণরূপে চালানো বা মোটেও নয় intended লেনদেন সম্পন্ন করার একমাত্র উপায় প্রতিশ্রুতিবদ্ধ হওয়া, অন্য কোনও উপায়ের ফলে রোলব্যাক হবে।
অতএব, যদি আপনি শুরু করেন এবং প্রতিশ্রুতিবদ্ধ না হন তবে এটি সংযোগ বন্ধে আবার চালু হবে (কারণ লেনদেনটি সম্পূর্ণরূপে চিহ্নিত না করেই ভেঙে গেছে)।
অসম্পূর্ণ লেনদেনের বিচ্ছিন্নতা স্তরের উপর নির্ভর করে।
আপনি যখন কোনও লেনদেন খুলেন তখন কিছুই নিজের দ্বারা লক হয়ে যায় না। তবে যদি আপনি সেই লেনদেনের অভ্যন্তরে কিছু জিজ্ঞাসা নির্বাহ করেন, বিচ্ছিন্নতা স্তরের উপর নির্ভর করে কিছু সারি, টেবিল বা পৃষ্ঠাগুলি লক হয়ে যায় যাতে এটি অন্যান্য লেনদেন থেকে তাদের অ্যাক্সেস করার চেষ্টা করে এমন অন্যান্য প্রশ্নের উপর প্রভাব ফেলবে।
লেনদেনের জন্য উদাহরণ
শুরু tran tt
আপনার sql বিবৃতি
ত্রুটি দেখা দিলে রোলব্যাক ট্রান টিটি টি কমিট করুন ট্র্যান টিটি
যতক্ষণ আপনি কমিট ট্র্যান টিটি কার্যকর করেনি, ততক্ষণ ডেটা পরিবর্তন হবে না
BEGIN TRAN X ... BEGIN TRAN Y ... ROLLBACK Y
উদাহরণস্বরূপ, কাজ করে না। দেখুন stackoverflow.com/questions/1273376/...
সম্ভাব্য লকিংয়ের সমস্যাগুলির পাশাপাশি আপনি এটি তৈরি করতে পারেন যে আপনার সক্রিয় লেনদেনের জন্য ন্যূনতম এলএসএন পেরিয়ে কাটতে না পারায় আপনার লেনদেনের লগগুলি বাড়তে শুরু করবে এবং যদি আপনি স্ন্যাপশট বিচ্ছিন্নতা ব্যবহার করছেন টেম্পডবিতে আপনার সংস্করণ স্টোর বৃদ্ধি পাবে একই কারণ।
আপনি dbcc opentran
সবচেয়ে পুরানো উন্মুক্ত লেনদেনের বিশদটি দেখতে ব্যবহার করতে পারেন।
আচরণটি সংজ্ঞায়িত করা হয় নি, সুতরাং আপনাকে অবশ্যই কমিট বা রোলব্যাক সেট করতে হবে:
http://docs.oracle.com/cd/B10500_01/java.920/a96654/basic.htm#1003303
"যদি অটো-কমিট মোড অক্ষম হয়ে যায় এবং আপনি আপনার শেষ পরিবর্তনগুলি স্পষ্টভাবে প্রতিশ্রুতিবদ্ধ না করে বা ফিরিয়ে না দিয়ে সংযোগটি বন্ধ করে দেন তবে একটি অন্তর্নিহিত COMMIT অপারেশন কার্যকর করা হবে।"
Hsqldb একটি রোলব্যাক করে
con.setAutoCommit(false);
stmt.executeUpdate("insert into USER values ('" + insertedUserId + "','Anton','Alaf')");
con.close();
ফলাফল হয়
2011-11-14 14: 20: 22,519 প্রধান তথ্য INFO [SqlAutoCommitE উদাহরণ: 55] [স্বতঃসংশ্লিষ্ট সক্ষম = মিথ্যা] 2011-11-14 14: 20: 22,546 প্রধান তথ্য INFO [SqlAutoCommitExample: 65] [ডাটাবেসে 0 জন ব্যবহারকারী পাওয়া গেছে]