আরও বিশদে লেনদেনের লগ ফাইলের বিষয়বস্তু


11

লেনদেন লগ সম্পর্কিত আমার একটি প্রশ্ন রয়েছে (আসুন আমরা একে সংক্ষেপে এলডিএফ বলি) সামগ্রীগুলি। আমি পুরো পুনরুদ্ধার মডেল সহ একটি ডাটাবেস ধরে নিচ্ছি।

আমি পড়েছি যে এলডিএফ ফাইলটিতে ডাটাবেসের প্রতিটি অপারেশন (লগগুলি) থাকে (এটি পুরো পুনরুদ্ধার মোডে থাকে)। লগিংয়ের সময় এটি কীভাবে আলাদা BEGIN TRAN; COMMAND(s); COMMIT? আমি জিজ্ঞাসা করছি কারণ আপাতদৃষ্টিতে আপনি লেনদেনগুলি আবার রোল করতে পারেন তবে আপনি মানক কমান্ডগুলি রোল করতে পারবেন না (সম্পূর্ণ পুনরুদ্ধার মোডে)।

আমি অনুমান করি যে লেনদেনের সময় এলডিএফ ফাইলে লগইন করা বিষয়গুলি নিয়মিত পুরো পুনরুদ্ধারের লগিংয়ের চেয়ে আলাদা। এটা কি সঠিক? এটা আলাদা কিভাবে? এটি কি প্রতিটি ক্রিয়াকলাপের জন্য কেবল "পূর্বাবস্থায় ফিরুন" অপারেশন অন্তর্ভুক্ত?

সম্পর্কিত নোটে, আমি শুনেছি যে পূর্ণ পুনরুদ্ধার এলডিএফ ফাইল ব্যবহার করে "রোলব্যাক / পূর্বাবস্থা" মানকীয় ক্যোয়ারীগুলির বাণিজ্যিক সরঞ্জাম রয়েছে। তারা কিভাবে এটা করবেন? তারা কি এলডিএফ বিষয়বস্তু বিশ্লেষণ করে এবং বিপরীত / পূর্বাবস্থায়িত অপারেশনগুলির সাথে আপ করার চেষ্টা করে?


সম্পর্কিত: স্ট্যাক ওভারফ্লোতে এসকিউএল সার্ভার ২০০৮-লেনদেন লগগুলি কীভাবে দেখবেন।
ভাদজিম

উত্তর:


11

পার্থক্যটি হ'ল আপনি যাকে "স্ট্যান্ডার্ড কমান্ডস" বলছেন তার অন্তর্নিহিত লেনদেন রয়েছে (যেমন "স্পষ্টত নয়" এবং সত্যিকারের অন্তর্নিহিত লেনদেন নয় যার অর্থ কিছু আলাদা ) তবে আপনি যখনই INSERTকোনও স্পষ্ট লেনদেন ছাড়াই কোনও আদেশ জারি করবেন, এটি একটি লেনদেন খুলবে, ডেটা sertোকান এবং স্বয়ংক্রিয়ভাবে প্রতিশ্রুতিবদ্ধ। একে অটোকোমিট লেনদেন বলা হয়।

আপনি এটিকে কেন রোলব্যাক করতে পারবেন না এটিও INSERTএটি: এটি ইতিমধ্যে প্রতিশ্রুতিবদ্ধ। সুতরাং নিয়মটি সুস্পষ্ট লেনদেনের সমান: সেগুলি প্রতিশ্রুতিবদ্ধ হওয়ার পরে আপনি রোলব্যাক করতে পারবেন না

এসকিউএল সার্ভারের ভিতরে থেকে আমি যা বলতে চাইছি তা আপনি দেখতে পাচ্ছেন।

মাইক্রোসফ্ট এসএমএল সার্ভারকে একটি ডিএমএফ বলে জাহাজীকরণ করে যা sys.fn_dblogপ্রদত্ত ডাটাবেসের লেনদেনের লগের ভিতরে দেখতে ব্যবহার করা যেতে পারে।

এই সাধারণ পরীক্ষার জন্য আমি অ্যাডভেঞ্চার ওয়ার্কস ডাটাবেসটি ব্যবহার করতে যাচ্ছি:

USE AdventureWorks2008;
GO

SELECT TOP 10 *
FROM dbo.Person;
GO

INSERT INTO dbo.Person (FirstName, MiddleName, LastName, Gender, Date)
VALUES ('Never', 'Stop', 'Learning', 'M', GETDATE());
COMMIT;

BEGIN TRAN;
INSERT INTO dbo.Person (FirstName, MiddleName, LastName, Gender, Date)
VALUES ('Never', 'Stop', 'Learning', 'M', GETDATE());
COMMIT;
GO

SELECT *
FROM sys.fn_dblog(NULL, NULL);
GO

এখানে আমি দুটি সন্নিবেশ করছি: একটির সাথে এবং একটি সুস্পষ্ট লেনদেন ছাড়াই।

লগ ফাইলে আপনি দেখতে পারেন যে দুজনের মধ্যে একেবারেই কোনও পার্থক্য নেই:

স্বতঃকমিত বনাম সুস্পষ্ট লেনদেন

লাল অন্যতম INSERTএকটি autocommit লেনদেনের মধ্যে এবং নীল এক INSERTএকটি সুনির্দিষ্ট লেনদেনের সঙ্গে।

আপনার উল্লিখিত তৃতীয় পক্ষের সরঞ্জামগুলির জন্য, হ্যাঁ তারা ডাটাবেস লগটি বিশ্লেষণ করে এবং অপারেশনগুলিকে "পূর্বাবস্থায়" বা "পূর্বাবস্থায়িত" করতে সাধারণ টি-এসকিউএল কোড উত্পন্ন করে। স্বাভাবিকভাবে আমি বলতে চাইছি তারা কোনও স্ক্রিপ্ট তৈরি করা ছাড়া অন্য কোনও বিশেষ কাজ করে না যা লগ ফাইলের মধ্যে যা আছে তার বিপরীতে করার প্রভাব ফেলবে।


7

অ্যাপেক্সএসকিউএল লগ উদাহরণে আমি কীভাবে বাণিজ্যিক সরঞ্জামগুলি কাজ করে তা ব্যাখ্যা করব

এবং সম্পর্কিত নোটে আমি শুনেছি যে পুরো পুনরুদ্ধার এলডিএফ ফাইল ব্যবহার করে স্ট্যান্ডার্ড ক্যোয়ারীগুলি "রোলব্যাক / পূর্বাবস্থা" করার বাণিজ্যিক সরঞ্জাম রয়েছে tools তারা কিভাবে এটা করবেন? তারা কি এলডিএফ বিষয়বস্তু বিশ্লেষণ করে এবং বিপরীত / পূর্বাবস্থায়িত অপারেশনগুলির সাথে আপ করার চেষ্টা করে?

হ্যাঁ, তারা এলডিএফ ফাইল (অনলাইন বা বিচ্ছিন্ন) এবং ট্রেন ফাইলগুলি (লেনদেন লগ ব্যাকআপ) পড়ে, লেনদেন কী হয়েছে তা আবিষ্কার করে এবং এমন স্ক্রিপ্ট তৈরি করে যা একই কাজ করবে বা বিপরীতে।

তবে মনে রাখবেন, পূর্বাবস্থায় ফেরানো এবং পুনরায় স্ক্রিপ্টটি নির্বাহকরা যেমন ঠিক একই রকম হয় না, তবে প্রভাবটি হুবহু একই রকম হয়।

উদাহরণস্বরূপ, যদি সম্পাদিত স্ক্রিপ্টটি ছিল:

DELETE FROM [Person].[AddressType] WHERE Name  = 'New Loc22'

লেনদেন লগ রেকর্ড করবে যে সারণিতে সারিটি মান 9, 'নতুন লোক 22', '41BC2FF6-F0FC-475F-8EB9-CEC1805AA0F6', এবং '2002/06/01 00: 00: 00.000' মুছে ফেলা হয়েছে। সারণির কাঠামো থেকে, সরঞ্জামটি পড়বে যে প্রাথমিক কীটি ঠিকানা টাইপ কলামটি হবে এবং নীচে পুনরায় স্ক্রিপ্ট তৈরি করবে:

DELETE FROM [Person].[AddressType] WHERE [AddressTypeID] = 9

নোট করুন যে লেনদেনটি প্রাথমিক কী কলামে আবদ্ধ, মূল যেখানে ব্যবহৃত অনুচ্ছেদে ব্যবহৃত কলামের সাথে নয়। একইভাবে, পূর্বাবস্থায় লিপিটি হ'ল:

INSERT INTO [Person].[AddressType] ([AddressTypeID], [Name], [rowguid], [ModifiedDate]) VALUES (9, N'New loc22' COLLATE SQL_Latin1_General_CP1_CI_AS, '41bc2ff6-f0fc-475f-8eb9-cec1805aa0f6', '20020601 00:00:00.000')

এখানে চিত্র বর্ণনা লিখুন

দাবি অস্বীকার: আমি সাপোর্ট ইঞ্জিনিয়ার হিসাবে অ্যাপেক্সএসকিউএলের পক্ষে কাজ করি

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