আমার ক্লায়েন্টের এসকিউএল সার্ভারে প্রচুর ডাটাবেস রয়েছে। এই ডাটাবেসগুলি বিকাশের অধীনে রয়েছে, সুতরাং বিকাশকারীরা ডিজাইন করতে পারেন, রিফ্যাক্টর করতে পারেন, ডেটা পরিবর্তন করতে পারেন এবং আরও কিছু করতে পারেন। কিছু ডাটাবেস রয়েছে যা খুব কমই পরিবর্তিত হয়। আমার ক্লায়েন্টকে তাদের সকলকে সুরক্ষিত রাখতে হবে (ব্যাকআপ নেওয়া) এবং পরিবেশ পরিচালনায় কিছুটা সময় ব্যয় করতে হবে। (সংস্থায় ডিবি প্রশাসকের কোনও অবস্থান নেই)) দীর্ঘ আলোচনার পরে ক্লায়েন্টটি পুনরুদ্ধার করার স্বাচ্ছন্দ্যের কারণে দৈনিক পূর্ণ ব্যাকআপ কৌশল ব্যবহার করার সিদ্ধান্ত নিয়েছে।
সুতরাং পরিস্থিতির সংক্ষিপ্তসারটি এখানে:
- ডাটাবেসের সংখ্যা প্রতিদিন পরিবর্তিত হতে পারে।
- যে ডেটাবেসগুলি পরিবর্তন করা হয়েছিল (যার অর্থ ডেটা এবং / বা কাঠামো পরিবর্তন করা হয়েছে) ব্যাকআপ করা হবে।
- যে ডেটাবেসগুলি পরিবর্তন করা হয়নি সেগুলি ব্যাক আপ করা হবে না।
- সমাধান ডাটাবেস কাঠামোর উপর প্রভাব ফেলবে না (এটি সীমাবদ্ধ প্রয়োজন নয়)
- এই "ব্যাকআপ ইঞ্জিন" স্বয়ংক্রিয়ভাবে কাজ করবে।
মূল সমস্যা: কীভাবে সনাক্ত করতে হবে যে একটি ডাটাবেস পরিবর্তন করা হয়েছে। ডিডিএল ট্রিগার ব্যবহার করে সমস্যার প্রথম অংশ (ডিডিএল পরিবর্তন) সমাধান করা যেতে পারে । তবে ডেটা পরিবর্তন (ডিএমএল পরিবর্তন) একটি সমস্যা। পরিবর্তনগুলি ট্র্যাক করতে সমস্ত ডাটাবেসের সমস্ত টেবিলের ডিএমএল ট্রিগার প্রয়োগ করা অসম্ভব (কার্য সম্পাদন, প্রসারিত বস্তুর পরিচালনা ...)। ব্যাকআপ ইঞ্জিনকে প্রতিটি ডাটাবেসটিকে ব্যাকআপের জন্য প্রস্তুত হিসাবে চিহ্নিত করতে সমস্ত পরিবর্তন ট্র্যাক করতে হবে।
চেঞ্জ ডেটা ক্যাপচার একটি সমাধান তবে এটি খুব ভারী লাগে (এটির জন্য এসকিউএল সার্ভার এন্টারপ্রাইজ সংস্করণও প্রয়োজন)।
আরেকটি উপায় হ'ল ডাটাবেস ফাইল পরিবর্তনগুলি (আকার বা শেষ পরিবর্তনের সময়) ট্র্যাক করা, তবে এটি সঠিকভাবে কাজ করে না: কোনও ডাটাবেস তার আকার পরিবর্তন করতে পারে যখন এটি সমস্ত সংরক্ষিত মুক্ত স্থান অতিক্রম করে এবং এসপিএস স্পেসিউজড কোনও সমাধান নয়।
ট্রেসিং একটি সমাধান তবে এটি পারফরম্যান্স সংক্রান্ত সমস্যার কারণ এবং এটির অতিরিক্ত পরিচালনার প্রয়োজন।
অন্যান্য ডাটাবেস পরিচালন বস্তুর উপর প্রভাব ছাড়াই প্রকৃত ডাটাবেস ব্যবহারের আকার গণনা করার কোনও সমাধান আছে (যেমন পরিসংখ্যান ..)? অনুমোদিত যে টেবিলের আকার পরিবর্তন করে না এমন কোনও টেবিলের ডেটা পরিবর্তন করা ট্রিগার করবে না (আমার মনে হয়), তবে এটি কোনও কিছুর চেয়ে ভাল। সত্যই আমি এসকিউএল সার্ভার ২০০৮ এর জন্য প্রত্যক্ষ বা অপ্রত্যক্ষ সমাধানের সন্ধান করছি।
কোনও মন্তব্য, সমাধান এবং চিন্তাভাবনার জন্য আপনাকে ধন্যবাদ।
যোগ করেছেন:
সমাধানটি এখানে রয়েছে ( মারিয়ানকে ধন্যবাদ ):
Select
NextLSN = MAX(fn.[Current LSN])
,Databasename = DB_NAME()
from fn_dblog(NULL, NULL) fn
LEFT JOIN sys.allocation_units au
ON fn.AllocUnitId = au.allocation_unit_id
LEFT JOIN sys.partitions p
ON p.partition_id = au.container_id
LEFT JOIN sys.objects so
ON so.object_id = p.object_id
WHERE
(
(Operation IN
('LOP_INSERT_ROWS','LOP_MODIFY_ROW',
'LOP_DELETE_ROWS','LOP_BEGIN_XACT','LOP_COMMIT_XACT')
AND so.is_ms_shipped = 0)
OR
([Lock Information] like '%ACQUIRE_LOCK_SCH_M OBJECT%')
)