2016-01-15 24 views
8

से लाखों रिकॉर्ड की तुलना करें मेरे पास ओरेकल डेटाबेस और SQL सर्वर डेटाबेस है। एक टेबल Inventory कहती है जिसमें डेटाबेस टेबल दोनों में लाखों पंक्तियां होती हैं और यह बढ़ती रहती है।ओरेकल से SQL सर्वर

मैं SQL सर्वर डेटा के साथ ओरेकल तालिका डेटा की तुलना करना चाहता हूं यह पता लगाने के लिए कि SQL सर्वर तालिका में कौन से रिकॉर्ड अनुपलब्ध हैं।

इसके लिए सबसे अच्छा तरीका कौन सा है?

  1. SSIS पैकेज बनाएँ।
  2. विंडोज सेवा बनाएं।

मैं इस कार्यक्षमता को प्राप्त करने के लिए कम संसाधन का उपभोग करना चाहता हूं जो कम समय और कम संसाधन लेता है।

उदाहरण के लिए: ओरेकल में 18 लाखों रिकॉर्ड और 16/17 लाखों लोगों की एसक्यूएल सर्वर में

दो अलग डेटाबेस की यह स्थिति पैदा होती है क्योंकि दो अलग-अलग आवेदन ऑनलाइन और ऑफलाइन

संपादित: कैसे के बारे में एसक्यूएल सर्वर से कनेक्ट

1) ओरेकल से एसक्यूएल सर्वर के लिए प्रत्यक्ष क्वेरी के लिए एसक्यूएल सर्वर के लिए ओरेकल गेटवे के माध्यम से ओरेकल से 1 समय के लिए एसक्यूएल सर्वर में लापता रिकॉर्ड को अपडेट करने।

2) जो निष्पादित हो जाता है जब रिकॉर्ड ओरेकल से हटा दिया जाता है और यह डालने नष्ट कर दिया नई ओरेकल तालिका में रिकॉर्ड ओरेकल पर एक ट्रिगर बनाएं।

3) SSIS पैकेज बनाएँ एसक्यूएल सर्वर record.This अद्यतन करने के लिए एसक्यूएल सर्वर के साथ नव निर्मित ओरेकल तालिका मैप करने के लिए जिस तरह से केवल कुछ रिकॉर्ड लघु उद्योगों के माध्यम से दैनिक कार्रवाई करने के लिए किया है।

इस दृष्टिकोण के बारे में आप क्या सोचते हैं?

+0

मुझे लगता है कि एक अच्छी दीर्घकालिक रणनीति आपके राज्य को विभिन्न आरडीबीएमएस में स्टोर नहीं करना होगा। क्या आप यह समस्या बता सकते हैं कि आप इस समस्या के साथ कैसे समाप्त हुए? –

+0

क्या आप हमें समझा सकते हैं कि इस समय रिकॉर्ड कैसे डुप्लिकेट किए गए हैं? – Giova

+0

ओरेकल डेटाबेस में सभी रिकॉर्ड हैं .. और संभावना है कि रिकॉर्ड्स ऑरैकल डेटाबेस से हटा दिए जाते हैं और हमें SQL सर्वर रिकॉर्ड्स अपडेट करना होगा जो ऑरैकल डेटाबेस – Mahajan344

उत्तर

0

अन्य विकल्प:

आप एसक्यूएल सर्वर के लिए Oracle प्रवेश द्वार का उपयोग कर सकते हैं तो आप डेटा स्थानांतरित करने की जरूरत नहीं है और क्वेरी सीधे कर सकते हैं।

आप ओरेकल प्रवेश द्वार उपयोग नहीं कर सकते हैं, तो आप तालिकाओं की तुलना और परिणाम प्राप्त करने के Pentaho डेटा एकीकरण या किसी अन्य ETL उपकरण का उपयोग कर सकते हैं। उपयोग करना आसान है।

+0

आपका उत्तर कम से कम मेरे लिए बहुत अस्पष्ट है, क्योंकि यह इस बात को प्राप्त करने के तरीके के बारे में कोई संकेत नहीं देता है। यह भी मान लें कि एक आवेदन ऑफ़लाइन है। – hotzst

+0

हाय। मैंने केवल प्रक्रियाओं के साथ डेटा के हस्तांतरण के लिए एक विकल्प का सुझाव दिया। SQLServer के लिए ऑरकल गेटवे के साथ आप सीधे तुलना कर सकते हैं। ईटीएल उपकरण के साथ ही यह विकल्प अलग है। – JLC

1

मैं एक एसएसआईएस पैकेज बनाउंगा और ओरेकल तालिका से डेटा लोड डेटा डेटा/ओएलई डीबी डेटा स्रोत का उपयोग करूंगा। यदि आपके पास SQL ​​एंटरप्राइज़ है, तो अटैच्यून कनेक्टर थोड़ा तेज़ हैं।

फिर मैं SQL सर्वर तालिका से एक लुकअप रूपांतरण में कुंजी लोड करूंगा, जहां मैं कुंजी पर 2 स्रोतों से मेल खाता हूं, और बेजोड़ पंक्तियों को एक अलग आउटपुट में सीधे भेजता हूं।

अंत में मैं SQL सर्वर तालिका को अद्यतन करने के लिए बेजोड़ पंक्ति आउटपुट को ओएलई डीबी कमांड पर निर्देशित करूंगा।

इस एसएसआईएस पैकेज को बहुत सारी मेमोरी की आवश्यकता होगी, लेकिन मिलान न्यूनतम आईओ के साथ स्मृति में किया जाता है, यह शायद गति के लिए अन्य समाधानों से बेहतर प्रदर्शन करेगा। एसक्यूएल सर्वर टेबल से सभी चाबियों को कैश करने के लिए इसे पर्याप्त मुफ्त मेमोरी की आवश्यकता होगी।

एसएसआईएस का भी लाभ है कि यदि आपको बाद में उनकी आवश्यकता हो तो इसमें कई अन्य परिवर्तन कार्य उपलब्ध हैं।

+0

आपके उत्तर के लिए धन्यवाद। तो आप सुझाव दे रहे हैं कि एसएसआईएस पैकेज एसएसआईएस लुकअप के साथ 15/16 लाख एसक्यूएल सर्वर रिकॉर्ड के साथ 18 लाख ऑरैकल रिकॉर्ड की तुलना करने के लिए सबसे अच्छा तरीका है ?? – Mahajan344

+0

हां, न्यूनतम आईओ के कारण। एसएसआईएस को केवल ओरेकल और एसक्यूएल सर्वर टेबल से पढ़ने की जरूरत है और फिर यह स्मृति में मिल जाएगा, जहां अधिकांश अन्य तकनीकों को आपके बड़े डेटासेट में से एक को पढ़ने और लिखने की आवश्यकता होती है (और फिर फिर से पढ़ना)। –

+0

मुझे नहीं लगता कि एसएसआईएस लुकअप उस वॉल्यूम को संभालने में सक्षम होगा (हालांकि मुझे ठीक करने में खुशी है)। यदि जटिलता की कोई डिग्री है (यानी केस असंवेदनशील या रेंज लुकअप), तो इसे पंक्ति से लुकअप पंक्ति करना है जो 18 मिलियन रिकॉर्ड के लिए बहुत धीमा होगा। –

0

मुझे लगता है कि सबसे अच्छा तरीका ऑरैकल गेटवे का उपयोग कर रहा है। बस चरणों का पालन करें। मेरे पास समान प्रकार का अनुभव है।

  1. SQL सर्वर के लिए ओरेकल डेटाबेस गेटवे स्थापित और कॉन्फ़िगर करें। https://docs.oracle.com/cd/B28359_01/gateways.111/b31042/installsql.htm
  2. अब आप ओरेकल से एसक्यूएल सर्वर में एक dblink बना सकते हैं।
  3. एक ऐसी प्रक्रिया बनाएं जो ओरेकल डेटाबेस में लापता रिकॉर्ड की तुलना करें और एसक्यूएल सर्वर डेटाबेस में डालें।

उदाहरण के लिए, आप इस प्रक्रिया का उपयोग अपनी प्रक्रिया के अंदर कर सकते हैं।

INSERT INTO "dbo"."sql_server_table"@dblink_name("column1","column2"...."column5") 
VALUES 
(
    select column1,column2....column5 from oracle_table 
    minus 
    select "column1","column2"...."column5" from "dbo"."sql_server_table"@dblink_name 
) 
  1. एक अनुसूचक जो प्रक्रिया दैनिक अमल बनाएँ।

जब दोनों डेटाबेस ऑनलाइन होते हैं, तो अनुपलब्ध रिकॉर्ड एसक्यूएल सर्वर में डाले जाएंगे। अन्यथा शेड्यूलर विफल हो जाता है या आप मैन्युअल रूप से प्रक्रिया निष्पादित कर सकते हैं। इसमें न्यूनतम संसाधन होता है।

1

आप मूल रूप से करना चाहते हैं ओरेकल से SQL सर्वर से प्रतिकृति है।

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

दो सामान्य डिजाइन पैटर्न

हैं
  1. स्नैपशॉट प्रतिकृति

आप दोनों प्रणालियों से सभी रिकॉर्ड लेते हैं और उन्हें कहीं तुलना (अब तक हम लघु उद्योगों में तुलना या पर तुलना करने के लिए सुझाव है ओरेकल लेकिन SQL सर्वर पर तुलना करने के लिए अभी तक कोई सुझाव नहीं है, हालांकि यह मान्य है)

आप यहां 18 मिलियन रिकॉर्ड की तुलना कर रहे हैं, इसलिए यह बहुत काम है

  1. विभेदक प्रतिकृति

आप प्रकाशक में परिवर्तन रिकॉर्ड (अर्थात ओरेकल) आखिरी प्रतिकृति के बाद से आप ग्राहक (यानी SQL सर्वर)

पर उन परिवर्तनों को लागू करते हैं आप ओरेकल पक्ष पर ट्रिगर्स और लॉग टेबल लागू करके मैन्युअल रूप से ऐसा कर सकते हैं, फिर नियमित ईटीएल प्रक्रिया (एसएसआईएस, कमांड लाइन टूल्स, टेक्स्ट फाइल्स, जो भी हो), एसक्यूएल एजेंट में इन्हें एसक्यूएल सर्वर में लागू करने के लिए शायद निर्धारित किया गया है।

या आप बॉक्स प्रतिकृति क्षमता से बाहर का उपयोग करते हुए एक प्रकाशक और SQL एक ग्राहक के रूप में के रूप में Oracle स्थापित करने के लिए कर ऐसा कर सकता है: https://msdn.microsoft.com/en-us/library/ms151149(v=sql.105).aspx

आप इनमें से कुछ कोशिश करते हैं और देखने के लिए करने जा रहे हैं आपके लिए क्या काम करता है

इस उद्देश्य को देखते हुए:

मैं कम संसाधनों का उपभोग करने के इस कार्यक्षमता जो कम समय और कम संसाधनों

व्यवहार प्रतिकृति लेता हासिल करना चाहते हैं कहीं अधिक कुशल लेकिन जटिल है। रखरखाव प्रयोजनों के लिए, कौन सा प्लेटफॉर्म (नेट, एसएसआईएस, पायथन इत्यादि) आप सबसे अधिक आरामदायक हैं?

0

मैं घर का बना ईटीएल समाधान रखने का सुझाव दूंगा।

  1. अनुसूची एक oracle job स्रोत तालिका डेटा निर्यात करने to plain CSV प्रारूप (एक दैनिक ढंग आवेदन तर्क के आधार पर पर)।
  2. अनुसूची एक SQL-Server job इस CSV फ़ाइल पढ़ सकते हैं और BULK INSERT का उपयोग कर एसक्यूएल-servter अंदर एक मध्यम मेज पर इसे आयात को (पहले ओरेकल नौकरी से स्वीकार्य देरी के साथ)।
  3. SQL-सर्वर नौकरी का अंतिम भाग माध्यम तालिका डेटा पढ़ रहा होगा और तर्क (सम्मिलित करें, लक्ष्य तालिका अपडेट करें)। मैं सुझाव देता हूं कि इस दैनिक नौकरी के परिणाम की रिपोर्ट स्टोर करने के लिए एक और टेबल रखें।
संबंधित मुद्दे