কীভাবে কোনও ডাটাবেসে কোনও পরিবর্তন সনাক্ত করতে হয় (ডিডিএল এবং ডিএমএল)


13

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

সুতরাং পরিস্থিতির সংক্ষিপ্তসারটি এখানে:

  • ডাটাবেসের সংখ্যা প্রতিদিন পরিবর্তিত হতে পারে।
  • যে ডেটাবেসগুলি পরিবর্তন করা হয়েছিল (যার অর্থ ডেটা এবং / বা কাঠামো পরিবর্তন করা হয়েছে) ব্যাকআপ করা হবে।
  • যে ডেটাবেসগুলি পরিবর্তন করা হয়নি সেগুলি ব্যাক আপ করা হবে না।
  • সমাধান ডাটাবেস কাঠামোর উপর প্রভাব ফেলবে না (এটি সীমাবদ্ধ প্রয়োজন নয়)
  • এই "ব্যাকআপ ইঞ্জিন" স্বয়ংক্রিয়ভাবে কাজ করবে।

মূল সমস্যা: কীভাবে সনাক্ত করতে হবে যে একটি ডাটাবেস পরিবর্তন করা হয়েছে। ডিডিএল ট্রিগার ব্যবহার করে সমস্যার প্রথম অংশ (ডিডিএল পরিবর্তন) সমাধান করা যেতে পারে । তবে ডেটা পরিবর্তন (ডিএমএল পরিবর্তন) একটি সমস্যা। পরিবর্তনগুলি ট্র্যাক করতে সমস্ত ডাটাবেসের সমস্ত টেবিলের ডিএমএল ট্রিগার প্রয়োগ করা অসম্ভব (কার্য সম্পাদন, প্রসারিত বস্তুর পরিচালনা ...)। ব্যাকআপ ইঞ্জিনকে প্রতিটি ডাটাবেসটিকে ব্যাকআপের জন্য প্রস্তুত হিসাবে চিহ্নিত করতে সমস্ত পরিবর্তন ট্র্যাক করতে হবে।

  • চেঞ্জ ডেটা ক্যাপচার একটি সমাধান তবে এটি খুব ভারী লাগে (এটির জন্য এসকিউএল সার্ভার এন্টারপ্রাইজ সংস্করণও প্রয়োজন)।

  • আরেকটি উপায় হ'ল ডাটাবেস ফাইল পরিবর্তনগুলি (আকার বা শেষ পরিবর্তনের সময়) ট্র্যাক করা, তবে এটি সঠিকভাবে কাজ করে না: কোনও ডাটাবেস তার আকার পরিবর্তন করতে পারে যখন এটি সমস্ত সংরক্ষিত মুক্ত স্থান অতিক্রম করে এবং এসপিএস স্পেসিউজড কোনও সমাধান নয়।

  • ট্রেসিং একটি সমাধান তবে এটি পারফরম্যান্স সংক্রান্ত সমস্যার কারণ এবং এটির অতিরিক্ত পরিচালনার প্রয়োজন।

অন্যান্য ডাটাবেস পরিচালন বস্তুর উপর প্রভাব ছাড়াই প্রকৃত ডাটাবেস ব্যবহারের আকার গণনা করার কোনও সমাধান আছে (যেমন পরিসংখ্যান ..)? অনুমোদিত যে টেবিলের আকার পরিবর্তন করে না এমন কোনও টেবিলের ডেটা পরিবর্তন করা ট্রিগার করবে না (আমার মনে হয়), তবে এটি কোনও কিছুর চেয়ে ভাল। সত্যই আমি এসকিউএল সার্ভার ২০০৮ এর জন্য প্রত্যক্ষ বা অপ্রত্যক্ষ সমাধানের সন্ধান করছি।

কোনও মন্তব্য, সমাধান এবং চিন্তাভাবনার জন্য আপনাকে ধন্যবাদ।

যোগ করেছেন:

সমাধানটি এখানে রয়েছে ( মারিয়ানকে ধন্যবাদ ):

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%')
    )

তাহলে আপনি কি এটি কোনও কাজের অংশ হিসাবে বাস্তবায়ন করেছেন বা ??? আমি দৈনিক আউটপুটিংয়ের একটি পদ্ধতি থাকতে চাই (সকাল 2 টা নাগাদ) পূর্ববর্তী 24 ঘন্টা থেকে ডিরেক্টরিতে সমস্ত পরিবর্তন করে যাতে আমার নিজের জন্য কিছুটা পরিবর্তন আনতে পারি।
jcolebrand

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

উত্তর:


7

একটি ধারণা হ'ল প্রতিদিন একটি স্ন্যাপশট তৈরি করা এবং কোনও ফাইল মনিটর ব্যবহার করে ডিস্কে স্ন্যাপশট ফাইলের আকার নিরীক্ষণ করা। স্ন্যাপশট কেবল তখন সেখানে আকার যুক্ত করে যখন সেখানে তথ্য যুক্ত করা হয়, সুতরাং আপনি যদি সত্যিকারের আকার (রিপোর্ট করা আকার) নিরীক্ষণের জন্য কোনও সরঞ্জাম খুঁজে পান তবে এটি একটি বৈধ ধারণা হবে।

এখন .. আমি এটি ব্যবহার করি নি, সুতরাং আপনাকে প্রযুক্তিগত অন্তর্দৃষ্টি দিতে পারি না :-)।

আর একটি ধারণা হ'ল প্রতিটি ডিবি-র লেনদেনের লগটি যাচাই করা হবে (যদি আপনি তাদের উপর পুরো পুনরুদ্ধার মোড ব্যবহার করেন তবে অবশ্যই) ফোরামে আমি দেখেছি এমন কিছু ফাংশন (ডিবি_ফনলগ .. বা কিছু) যা লগ থেকে অপারেশনগুলি পড়ে reads , এবং দেখুন আপনার কোনও মুছে ফেলা / সন্নিবেশ / আপডেট আছে কিনা।

এগুলি করার মতো সহজ জিনিস না .. তবে আমি আশা করি আপনি তাদের দরকারী পাবেন।

পিএস: লগ রিড ফাংশন সহ নিবন্ধটি খুঁজে পেয়েছে (এটি fndblog, উপায় দ্বারা :-): জেনস কে। স্যাসমেয়ার দ্বারা লেনদেনের লগটি পড়ুন


1
আমি ডিবি ফাইলের আকারের কথা বলছিলাম না, তবে স্ন্যাপশট লোকাল ফাইলের কথা বলছিলাম, যা দিয়ে তৈরি করা হয়েছে: yyydb এর স্ন্যাপশট হিসাবে xxxdb ডাটাবেস তৈরি করুন। স্ন্যাপশট সম্পর্কে বিশদটি এখানে দেখুন: এমএসডিএন.মাইক্রোসফটকম /en-us/library/ms175158.aspx
মারিয়ান

1
  • ডিডিএল পরিবর্তনের জন্য আপনি ডিফল্ট ট্রেস পড়তে পারেন ।
  • ডিএমএল পরিবর্তনের জন্য যেহেতু আপনি সিডিসিকে কিছুটা ভারী বলে মনে করেন, আপনি নিজের হালকা সার্ভারের সাইড ট্রেস চালাতে পারেন যা কেবলমাত্র প্রাসঙ্গিক ইভেন্টগুলিকেই চিহ্নিত করে

1

ডিডিএল পরিবর্তনের জন্য আপনি ডিডিএল ট্রিগার, কিন্তু ডিএমএল পরিবর্তনগুলি আপনি 3 টি ভিন্ন বিকল্প ব্যবহার করে দেখতে পারেন

1) ট্র্যাকিং পরিবর্তন করুন 2) সিডিসি (ডেটা ক্যাপচার পরিবর্তন করুন) 3) নিরীক্ষার বৈশিষ্ট্য

পরিবর্তন ট্র্যাকিংয়ের জন্য .. আপনি নীচের লিঙ্কটি দেখতে পারেন http://www.mssqltips.com/sqlservertip/1819/used- بدل-tracking-in-sql-server-2008 /

এই পরিবর্তনটির ট্র্যাকিংটি কেবল টেবিলটি বদলেছে বা না সে ক্ষেত্রে ব্যবহার করা হবে ... তবে কী তথ্য পরিবর্তন হয়েছে তা খুঁজে পাওয়া খুব কঠিন .. আপনি যদি কোন ডেটা পরিবর্তন করেছেন তা সন্ধান করতে চান তবে আপনি Chnage ডেটা ক্যাপচারে যেতে পারেন।

স্কেলসারবারে অ্যাডুয়েটের জন্য .. আপনি নীচের লিঙ্কটি চেক করতে পারেন http://blogs.msdn.com/b/manisblog/archive/2008/07/21/sql-server-2008-auditing.aspx


1
+1, তবে সিডিসি এন্টারপ্রাইজ সংস্করণ সহ প্রেরণ করা হয়েছে
গারিক ik

1

ডিএমএল পরিবর্তনের জন্য আপনি যে কোনও অনুসরণীয় নেটিভ এসকিউএল সার্ভার অডিটিং বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন:

  • এসকিউএল সার্ভার পরিবর্তন ট্র্যাকিং
  • এসকিউএল সার্ভার পরিবর্তন ডেটা ক্যাপচার
  • এসকিউএল সার্ভার নিরীক্ষণ

প্রত্যেকের এর সুবিধাগুলি এবং অসুবিধাগুলি রয়েছে তবে অডিটিং হ'ল মাইক্রোসফ্ট দ্বারা সর্বশেষ প্রবর্তিত, সুতরাং আপনার বর্তমান এবং ভবিষ্যতের সমাধানগুলি এটিকে আবৃত করা আপনার পক্ষে ভাল ধারণা হবে।

মনে রাখবেন যে কেবল নিরীক্ষণ বৈশিষ্ট্যটি কখন / কখন / কীভাবে সম্পর্কিত তথ্য সরবরাহ করে


0

ট্রেস ফাইল ব্যবহার করে আপনি যে কোনও ডিডিএল পরিবর্তনগুলি সনাক্ত করতে পারেন। নীচে পরিবর্তন পেতে স্ক্রিপ্ট।

SELECT 
    te.name AS eventtype
    ,t.loginname
    ,t.spid
    ,t.starttime
    ,t.objectname
    ,t.databasename
    ,t.hostname
    ,t.ntusername
    ,t.ntdomainname
    ,t.clientprocessid
    ,t.applicationname  
FROM sys.fn_trace_gettable
(
    CONVERT
    (VARCHAR(150)
    ,(
        SELECT TOP 1 
            value
        FROM sys.fn_trace_getinfo(NULL)  
        WHERE property = 2
    )),DEFAULT
) T 
INNER JOIN sys.trace_events as te 
    ON t.eventclass = te.trace_event_id 
WHERE eventclass=164

আপনি এই স্ক্রিপ্টটি ব্যবহার করে টেবিল এবং সঞ্চিত পদ্ধতিতে যে কোনও সংশোধনী সনাক্ত করতে পারেন:

SELECT 
    SO.Name
    ,SS.name 
    ,SO.type_desc 
    ,SO.create_date
    ,SO.modify_date 
 FROM sys.objects AS SO
INNER JOIN sys.schemas AS SS 
    ON SS.schema_id = SO.schema_id 
WHERE DATEDIFF(D,modify_date, GETDATE()) < 50
AND TYPE IN ('P','U')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.