2 টেবিল (বিভিন্ন সার্ভারে) একই সঠিক ডেটা আছে কিনা তা পরীক্ষা করা হচ্ছে


10

সুতরাং দেখে মনে হচ্ছে যে সংস্থাটি আমাদের এসকিউএল সার্ভার হোস্ট করছে তারা প্রোডাকশন সার্ভার থেকে ব্যাকআপ সার্ভারে প্রতিলিপি নিয়ে কিছুটা সমস্যায় পড়েছে ... আমি বিশ্বাস করি যে কিছু সারণী সঠিকভাবে প্রতিলিপি দিচ্ছিল। প্রতিলিপি প্রতিদিন করা হয় (ঘন্টা পরে)।

শেষ রাতের অনুলিপিটি কাজ করেছে কিনা তা দেখার জন্য প্রোডাকশন সার্ভার থেকে ব্যাকআপ বনাম 1 থেকে একই টেবিলের 2 টির তুলনা করার কোনও উপায় আছে কি?

আমি উভয় সার্ভারে নিম্নলিখিত কোয়েরি চালানো এবং ফলাফলটি "সম্ভবত" এর সাথে 2 টি টেবিলের সাথে একই তথ্য রয়েছে কিনা তা মিলেছে কিনা তা খুঁজে পাওয়ার একমাত্র উপায় ছিল।

SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
        FROM   (

                    SELECT  * 
                    FROM    table_to_compare
               ) t1

উপরের কোডটি ব্যবহার করে, মনে হচ্ছে চেকসাম মানগুলি সমান হওয়ায় এই টেবিলটি সফলভাবে প্রতিলিপি করেছে তবে আমি নিশ্চিত না যে এই পদ্ধতিটি কতটা নির্ভরযোগ্য।

কেউ এটি পরীক্ষা করে দেখার জন্য আরও ভাল পদ্ধতি সম্পর্কে জানেন বা এটি যদি ভাল উপায় হয়?

আমি উইন্ডোজ সার্ভার 2008 কম্পিউটারে এসকিউএল সার্ভার 2008 চালাচ্ছি।

ধন্যবাদ।

উত্তর:


11

আমি বিশ্বাস করি আপনি সরঞ্জাম টেবিলডিফটি সন্ধান করছেন যা আপনাকে ঠিক তা করতে দেয় - পার্থক্যের জন্য দুটি প্রতিলিপিযুক্ত টেবিলের তুলনা করুন। আপনি এই নিবন্ধটি দরকারী মনে করতে পারেন, শুরু করার জন্য।

টেবিলডিফের জন্য এখানে একটি জিইউআই রয়েছে


অসাধারণ, ধন্যবাদ আমি এটি করতে কিছু পড়া পেয়েছিলাম। এছাড়াও জিইউআই লিঙ্কের জন্য ধন্যবাদ, এটি বিষয়গুলিকে অনেক সহজ করে তুলতে হবে যা সত্যই এটির প্রশংসা করবে!
জুয়ান ভেলিজ

4

আমি এই নিবন্ধটি বিশেষভাবে আকর্ষণীয় পেয়েছি: http://networkprogramming.wordpress.com/2011/01/14/binary_checksum-vs-hashbytes-in-sql/

"আপনার যদি নির্ভুলতার চেয়ে গতির প্রয়োজন হয় - CHINKSUM ব্যবহার করুন, BINARY_CHECKSUM নয়।

আপনার যদি গতির ওভারের নির্ভুলতার প্রয়োজন হয় - HASHBYTES ব্যবহার করুন।


4

ডেটাবেস এবং একে অপরের মধ্যে লিঙ্কগুলি কত দ্রুত এবং কত দ্রুত (এবং আপনি)? বিভিন্ন ধারণা আছে:

যদি ডেটাটি যথেষ্ট পরিমাণে এটি ব্যবহারিক SELECT * FROM <table> ORDER BY <pk>হয় তবে প্রতিটি ডিবিতে চালান , ফলাফলগুলি কোনও ট্যাবে বা কমা বিস্মৃত ফাইলটিতে সংরক্ষণ করুন (ফলাফলটি ফাইলের আকারের আকারের সাথে প্রসারিত স্থান নয়) এবং ফলাফলকে আপনার পছন্দসই ভিন্ন প্রকারের সাথে তুলনা করুন যেমন উইনমার্জ হিসাবে ইউটিলিটি। আপনি একেবারে সমস্ত ডেটা তুলনা করছেন ।

যদি ডাটাবেসগুলি একে অপরকে দেখতে পায় (সম্ভবত তারা প্রতিলিপি অংশীদার হিসাবে পরিচালনা করতে সক্ষম হয়) এবং তাদের মধ্যে লিঙ্কটি যথেষ্ট পরিমাণে ব্যান্ডউইথ এবং কম পর্যায়ে বিলম্বিত হয় তবে আপনি লিঙ্কযুক্ত সার্ভারের কার্যকারিতাটি ব্যবহার করতে পারেন (দেখুন http://msdn.microsoft .com / en-US / লাইব্রেরি / ms190479.aspx এবং সংশ্লিষ্ট ডকুমেন্টেশন) এর এবং (এসকিউএল স্টেটমেন্ট কয়েক সারণীগুলির সামগ্রীগুলি তুলনা তুলনা সারি তালিকা <table>যে অভিন্ন সারি আছে না <linked_server>.<db>..<table>এবং বিপরীতভাবে ভাইস) ঠিক যেমন আপনি দুটি স্থানীয় টেবিলের বিষয়বস্তু তুলনা করতে হবে। এটি সম্ভাব্য তুলনামূলকভাবে ধীর গতির বিকল্প, তবে স্বয়ংক্রিয় করার জন্য এটি একটি শক্তিশালী চেক হতে পারে।

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

সমস্ত ডেটা চরিত্রের জন্য-চরিত্রের তুলনা এবং সমস্ত ডেটা কভার করে একটি একক চেকসামের তুলনা করার মধ্যবর্তী স্থল হিসাবে, আপনি SELECT <pk>, HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>প্রতিটি ডাটাবেস থেকে রফতানি করতে পারেন এবং ফলাফলগুলি অভিন্ন কিনা তা তুলনা করতে পারেন (বা SELECT HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>তথ্যের পরিমাণ হ্রাস করতে) প্রবাহিত হচ্ছে, কিন্তু আউটপুটে পিকে থাকার অর্থ আপনি আরও কম প্রশ্নগুলি সহ সারিগুলি পৃথক করে সনাক্ত করতে পারবেন, যদি কিছু হয় তবে। অবশ্যই এই শেষ বিকল্পটি অর্থহীন যদি গড় সারির ডেটা ফলাফল হ্যাশের চেয়ে ছোট হয়, সেই ক্ষেত্রে " সমস্ত কিছু তুলনা করুন " বিকল্পটি আরও কার্যকর হবে।


2

টেবিলডিফ লাইভ ডাটাবেসে কেবলমাত্র টেবিলের সাথে তুলনা করে, অনেকগুলি তৃতীয় পক্ষের সরঞ্জাম রয়েছে যা একটি লাইভ ডাটাবেসের সাথে একটি ডাটাবেস ব্যাকআপের তুলনা করতে পারে।

এক টেবিলে থাকা এবং অন্যটিতে উপস্থিত নেই এমন ডেটা দেখতে আপনি নীচের স্ক্রিপ্টটিও কার্যকর করতে পারেন, তবে আপনি এটি কেবলমাত্র 2 টি লাইভ ডাটাবেসের বিপরীতে করতে পারেন:

MyTest.dbo.esttable থেকে * যা বিদ্যমান নেই তা নির্বাচন করুন (MyTest2.dbo.TestTable থেকে MyTest2.dbo.testtable.f1 = MyTest.dbo.testtable.f1 থেকে নির্বাচন করুন)


তথ্যের জন্য ধন্যবাদ! আমি এটি খতিয়ে দেখব। সেই স্ক্রিপ্ট সহায়ক হবে!
হুয়ান ভেলিজ

যে জিনিসটি আমি প্রায়শই ব্যবহার করেছি তা হ'ল except: select id, name from Table1 except select id, name from Table2আপনাকে টেবিল 1 এ সমস্ত উপহার দেবে তবে টেবিল 2
আদম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.