क्या दो अलग-अलग स्कीमाओं के बीच डेटा तुलना करने के लिए उपकरण हैं?


11

हम अपने डेटाबेस को एक नए स्कीमा में माइग्रेट कर रहे हैं, लेकिन यह सत्यापित करना चाहते हैं कि डेटा सही तरीके से ले जाया गया है।

यदि स्कीमा समान हैं, तो पारंपरिक डेटा तुलना टूल अंतर के लिए दो डेटाबेस की तुलना कर सकते हैं। हमारे मामले में टेबल डिज़ाइन में बदलाव हुए हैं, लेकिन पुराने स्कीमा के सभी डेटा नए में हैं, इसे बस थोड़ा सा इधर-उधर ले जाया गया है, और मुझे यह सुनिश्चित करने की आवश्यकता है कि यह सही है। हमारे पास लाखों पंक्तियाँ हैं, इसलिए मैन्युअल निरीक्षण एक विकल्प नहीं है।

क्या ऐसे कोई उपकरण हैं जो इस प्रकार की तुलना में सहायता कर सकते हैं?

यदि कोई लाइब्रेरी / फ्रेमवर्क नहीं है जो कस्टम समाधान के विकास को शुरू करने में मदद कर सकता है?

SQL Server 2008 के लिए इस मामले में, यदि आवश्यक हो, तो डेटाबेस विशिष्ट समाधान का उपयोग करने में मुझे खुशी हो रही है।

मेरा विलेयॉन: मैं VIEWपुराने डेटाबेस पर प्रत्येक तालिका के नए डेटाबेस तालिका के समान फ़ील्ड्स बनाकर दो डेटा सेटों की तुलना कर रहा हूं ।

फिर मैं यहाँ वर्णित तकनीक का उपयोग करते हुए डेटा की तुलना करता हूं : SQL सर्वर में दो तालिकाओं की तुलना करने का सबसे छोटा, सबसे तेज और सबसे आसान तरीका: UNION!

मैं इस माइग्रेशन में भाग्यशाली हूं क्योंकि समग्र तालिका संरचना पुराने डेटाबेस के समान है, जिसमें फ़ील्ड एक टेबल से दूसरे टेबल पर ले जाया जाता है, गिराया या जोड़ा जाता है। गिराए गए और जोड़े जाने की स्थिति में तुलना करने के लिए कुछ भी नहीं है, जिन क्षेत्रों को स्थानांतरित किया गया है या एकत्र किया गया है मैं तुलना के लिए सही जानकारी प्रदान करने के लिए दृश्य में गणना करता हूं।

UNIONतुलना से पता चलता है मुझे केवल अंतर के साथ पंक्तियों, तो डेटा प्राप्त होते ही सही है मैं एक खाली परिणाम सेट मिलता है।


1
यदि स्कीमा बदल गए हैं तो आपको कैसे पता चलेगा कि डेटा सही है? क्या होगा अगर एक टेबल को विभाजित किया गया है, या संयुक्त आदि?
gbn


@AaronBertrand - आपकी टिप्पणी के लिए धन्यवाद, लेकिन उस समय (3 साल पहले) मैंने इसके लिए उपकरणों की उपलब्धता की जांच की, लेकिन ऐसा नहीं पाया गया जो विभिन्न स्कीमाओं के बीच तुलना कर सके । मैं उम्मीद कर रहा था कि आपका लिंक एक ऐसे उपकरण से है जिसे मैं खरीद सकता हूं क्योंकि मुझे अभी भी एक की आवश्यकता है।
टोनी

@ आप निश्चित रूप से रेड-गेट के उपकरण (दूसरों में से किसी के बारे में निश्चित नहीं) के साथ कर सकते हैं, आपको बस कुछ मैनुअल टैपिंग करनी होगी।
हारून बर्ट्रेंड

@ अलग-अलग स्कीमा, एक ही डेटाबेस? या अलग स्कीमा, अलग डेटाबेस?
हारून बर्ट्रेंड

जवाबों:


7

दो अलग-अलग स्कीमाओं की तुलना करना असंभव नहीं है, यह इस बात की गणना है कि आप परिणाम में कितने आश्वस्त हैं। मैंने बैंक रिकंसीलेशन तकनीकों से अनिवार्य रूप से उधार लिया है

महत्वपूर्ण: यह सामंजस्य यह सुनिश्चित करने के बारे में नहीं है कि गंतव्य वास्तव में डेटा के संदर्भ में स्रोत से मेल खाता है (यह एक कारण है जो आप एक नई प्रणाली में माइग्रेट कर रहे हैं), लेकिन आपको किसी भी विसंगतियों की व्याख्या करने की आवश्यकता है!

आधार:

  1. उन मैट्रिक्स की पहचान करें जिन्हें आप मापने के लिए उपयोग करेंगे (अर्थात: उपयोगकर्ताओं की कुल संख्या, उनकी सभी आयु का योग, उपयोगकर्ता आईडी की सूची और उनके पोस्टकोड ...) मैं कई मैट्रिक्स का उपयोग करने का प्रयास करता हूं: टोटल, एडवेर्स और नमूना / विस्तृत रिकॉर्ड
  2. इस डेटा को एक सामान्य स्थान पर डंप करें (विचार / रिपोर्ट / जो भी उचित हो) के माध्यम से
  3. अपने डेटा की तुलना करें और सुनिश्चित करें कि किसी भी विसंगति को समझाया जा सकता है

मैंने आमतौर पर तुलना को कई तरीकों में विभाजित किया है (विशेष रूप से विस्तृत मैट्रिक्स के लिए):

  • तालिका द्वारा: आमतौर पर स्रोत तालिका का उपयोग परिभाषा के रूप में, स्रोत तालिका डेटा को आज़माने और पुन: पेश करने के लिए गंतव्य DB पर विचारों का एक सेट बनाकर।
  • ऑब्जेक्ट द्वारा: DB पर निर्भर करता है और आप जो संग्रहीत कर रहे हैं , वह वस्तुओं के समग्र दृश्य (अर्थात: उपयोगकर्ता) को कई तालिकाओं में बनाने के लिए और अधिक समझ में ला सकता है , उस ऑब्जेक्ट को वापस करने के लिए विचारों के एक सेट को बनाने के लिए ऊपर के समान। परिणामों का सेट
  • रिपोर्ट्स के अनुसार: यदि स्रोत DB के पास प्रबंधन रिपोर्ट का एक अच्छा व्यापक सेट है, तो एक ही तकनीक उन रिपोर्ट को ठीक उसी स्वरूपण के साथ पुन: पेश करने के लिए है

तकनीक:

कोई फर्क नहीं पड़ता कि मैंने किस विधि का उपयोग करने की तुलना में उपयोग किया है, मैं फ़ाइलों / दृश्यों / डीबीएस के एक सेट के साथ समाप्त होता हूं जो सामंजस्यपूर्ण स्रोत और गंतव्य डेटा रखता है, फिर माध्यम के आधार पर मैं आमतौर पर उपलब्ध उपकरणों में से एक का उपयोग कर सकता हूं उनकी तुलना करना। मेरी अपनी प्राथमिकताएँ हैं:

  1. फ़ाइल तुलना
    सोर्सबीडी और डेस्टिनेशन डी बी के लिए दो अलग-अलग फ़ोल्डर बनाएँ (समय / संस्करण मुद्रांकित इसलिए मुझे पता है कि मैंने कब सुलह किया) और अपने मेट्रिक्स के आउटपुट को प्रासंगिक रूप से नामित फ़ाइलों के रूप में डंप कर दिया, फिर मतभेदों की पहचान करने के लिए एक तुलना उपकरण (जैसे CSFiff ) का उपयोग करें

  2. एक्सेल तुलना
    विशेष रूप से जब प्रबंधन रिपोर्टों से निपटते हैं, तो मैं रिपोर्ट की तुलना करने के लिए वर्कबुक के एक्सेल का एक सेट बनाऊंगा (वीएलक्यूप्स का उपयोग करने और सार की तुलना करने के लिए)

  3. डेटा तुलना
    फाइलों या रिपोर्टों के सामंजस्य डेटा के उत्पादन के बजाय, उन्हें अलग DBs के लिए उत्पादन, तो Redgate SQL डेटा की तरह कुछ का उपयोग करें DB की तुलना करने के लिए तुलना करें

अन्य उपकरण:

इनमें से किसी की भी कोशिश नहीं की गई, लेकिन 'डेटा सुलह उपकरण' पर एक त्वरित Google खोज देता है:

अन्य लोग भी हैं, लेकिन वे वही थे जो उचित दिखते थे


सुझाव के लिए धन्यवाद। जैसा कि आप कहते हैं, यह असंभव नहीं है (मैं इस समय एक समाधान पर काम कर रहा हूं) यह सिर्फ मुश्किल है। मैं आपके द्वारा बताए गए तरीकों को देखता हूँ।
टोनी

चिंता की कोई बात नहीं @ टोने-टोटके, मुझे जो ट्रिक मिली वह है इसे छोटे-छोटे चरणों में तोड़ना और फिर प्रत्येक चरण के लिए मौजूदा उपकरण ढूंढना (आपको कुछ कस्टम सामान लिखने की आवश्यकता होगी, यह सिर्फ उस प्रयास को कम करने के बारे में है जहां संभव है)
एंड्रयू बिकर्टन

6

यदि आप दो अलग-अलग डेटाबेस डिजाइन में डेटा की तुलना करना चाहते हैं तो आपको डेटा की तुलना करने के लिए हाथ से कोडेड एसक्यूएल लिखना होगा।

  • क्या होगा अगर एक टेबल को विभाजित किया गया है, या संयुक्त आदि?
  • क्या होगा अगर आपके पास डेटाटाइम था, अब आपके पास smalldatetime = डेटा अलग होगा
  • ...

डेटा की जांच के लिए कोई लाइब्रेरी ऑफ़ फ्रेमवर्क नहीं है दो समान डेटाबेस में समान है।

केवल आप ही जानते हैं कि आप क्या बदलेंगे या संशोधित करेंगे


मुझे डर था, लेकिन मैंने सोचा कि अगर कोई इस तरह की तुलना करता है तो मैं उससे पूछूंगा। मुझे उम्मीद है कि क्वेरी लेखन को गति देने के लिए एक उपकरण हो सकता है लेकिन जैसा कि आप कहते हैं, मुझे शायद स्क्रैच से कुछ लिखना होगा।
टोनी

1
@ टिप्पणी: हाँ: यह इसलिए है क्योंकि कोई भी उपकरण "जो हमने बदला है उससे" क्या गलत है "को अलग नहीं कर सकता है
gbn

5

विभिन्न स्कीमाओं की तुलना करना आपके लिए असंभव होने वाला है। आपकी समस्या को हल करने के लिए मुझे पता लगाना होगा कि आपको किस डेटा की तुलना करने की आवश्यकता है। मैं तब प्रत्येक सर्वर पर एक दृश्य बनाऊंगा जो डेटा को मैं तुलना करना चाहता था (डेटा प्रकार और इस तरह के खाते में लेना)।

एक बार दोनों के विचार समान होने के बाद, मैं Red Gate Data जैसे थर्ड पार्टी टूल का उपयोग करूँगा, यह देखने के लिए कि क्या पंक्तियाँ भिन्न हैं।

दर्द जैसा लगता है। सौभाग्य!


1
आप कहते हैं कि यह असंभव है और फिर एक संभावित समाधान प्रदान करें :) वास्तव में, जिस विधि पर मैं काम कर रहा था वह आपके सुझाव के समान है, सिवाय इसके कि मैं बाहरी उपकरण का उपयोग करके परिणाम की तुलना नहीं कर रहा हूं, लेकिन यह सब SQL में कर रहा हूं। धन्यवाद।
टोनी

2

कुछ साल पहले मैंने ऐसा करने के लिए एक उपकरण लिखा था - दो डेटाबेस के बीच एक डेटा तुलना। तब से मैंने इसे एक व्यावसायिक सॉफ्टवेयर में बदल दिया और प्रकाशित किया

www.sql-server-tool.com

  • एक एकल लाइसेंस की लागत $ 99 है, लेकिन आप इसे 30 दिनों के लिए मुफ्त में आज़मा सकते हैं।

कार्यक्रम - "एसक्यूएल सर्वर तुलना टूल" के लिए एससीटी नाम दिया गया है (मैं चीजों को नाम देने में कभी भी अच्छा नहीं था :) - इसमें बहुत सारे ठीक-ट्यूनिंग विकल्प हैं, जैसे: चयनित कॉलमों की अनदेखी करना या तुलना विधि निर्दिष्ट करना (रिकॉर्ड-दर-रिकॉर्ड या प्राथमिक कुंजी / सूचकांक तुलना)। मापदंडों को फिर से दर्ज करने की आवश्यकता के बिना तुलना "सत्र" को बचाया और फिर से खेला जा सकता है। कमांड लाइन पैरामीटर का उपयोग पूरी तरह से तुलना को स्वचालित करने के लिए किया जा सकता है।

दसियों लाख पंक्तियों के लिए यह थोड़ा धीमा हो सकता है - उस स्थिति में मैं डेटा के एक छोटे उपसमुच्चय के साथ शुरू करने की सलाह दूंगा - मान लें कि केवल पहली 1,000 पंक्तियों की तुलना करें - और देखें कि क्या प्रक्रिया की किसी भी ठीक-ठीक ट्यूनिंग की आवश्यकता है।

डेरियस डिज़्विअल्टोव्स्की-गिंटॉव


आपके एप्लिकेशन की सिफारिश करने के लिए धन्यवाद, मैंने इसे आज़माया लेकिन यह विभिन्न स्कीमाओं की तुलना नहीं करता है , जो कि मुझे करने की आवश्यकता है। पहली तालिका से डेटा प्राप्त करते समय यह विफल रहा। मैं यह भी अनिश्चित हूं कि यदि मेरे पास मौजूद डेटा की मात्रा को ऐप संभाल लेगा, तो इसकी तुलना में पंक्तियों की संख्या को सीमित करने का कोई तरीका नहीं लगता है; जिस मेज पर मैंने इसका परीक्षण किया, उसकी 99 मिलियन पंक्तियाँ हैं।
टोनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.