दिलचस्प पोस्ट
लाइन से NSFileHandle लाइन से डेटा कैसे पढ़ा जाए? पायथन: समूह का उपयोग करके समूह में सबसे अधिक मूल्य वाली पंक्ति प्राप्त करना बूस्ट की आत्मा: "सिमेंटिक क्रियाएं बुरी हैं"? PHP में एक वेरिएबल के अंदर व्हाइटस्पेस पट्टी करना जांचें कि क्या इंटरनेट कनेक्शन जावास्क्रिप्ट के साथ मौजूद है? क्या "इस के लिए rvalue संदर्भ" है? प्रति कोर धागे की इष्टतम संख्या PEM BASE64 एन्कोडेड निजी कुंजी फ़ाइल से आरएसए निजी कुंजी प्राप्त करना रुबी में बाहरी प्रक्रिया के एसटीडीओओटी से लगातार पढ़ते हैं जावास्क्रिप्ट लिंक, "#" या "जावास्क्रिप्ट: शून्य (0)" के लिए कौन सी "href" मान का उपयोग करना चाहिए? सीएसएस के साथ ब्लॉक तत्वों के क्रम को बदलना रेल 4 में सीएसएस में छवियों का संदर्भ कैसे करें एक यादृच्छिक संख्या जनरेटर का उपयोग करते समय लोग कहते हैं कि मॉड्यूलो पूर्वाग्रह क्यों है? किसी विशेष फ़ाइल को एक विशिष्ट पुनरीक्षण के लिए रीसेट करना या वापस करना Git का उपयोग करना है? सी ++ 11 की श्रेणी-आधारित उपयोग करने का सही तरीका क्या है?

ओरेकल से MySQL तक माइग्रेट करें

हम अपने ऑरेकल डाटाबेस के साथ गंभीर प्रदर्शन समस्याओं में भाग गए और हम इसे एक MySQL- आधारित डेटाबेस (या तो MySQL सीधे या अधिक अधिमानतः, इन्फोब्राइट) में माइग्रेट करने का प्रयास करना चाहते हैं।

बात यह है, हमें पुराने और नई प्रणाली को कम से कम कुछ हफ्तों तक ओवरलैप करने की जरूरत है, न कि महीनों, यदि हम वास्तव में जानते हैं, तो नए डेटाबेस की सभी सुविधाएं हमारी ज़रूरतों से मेल खाती हैं।

तो, हमारी स्थिति यहां है:

ओरेकल डेटाबेस में प्रत्येक लाख पंक्तियों के साथ कई तालिकाओं होते हैं। दिन के दौरान, सचमुच हजारों बयान हैं, जो हम प्रवासन के लिए नहीं रोक सकते।

हर सुबह, ओरेकल डाटाबेस में नए डेटा को आयात किया जाता है, कुछ हजार पंक्तियों की जगह। इस प्रक्रिया की प्रतिलिपि कोई समस्या नहीं है, इसलिए हम सिद्धांत रूप में समानांतर में दोनों डेटाबेस में आयात कर सकते हैं।

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

हमारा पहला सोचा था कि स्कीमा को डंप करना था, लेकिन मुझे ओएससीएल डंप फ़ाइल को MySQL में आयात करने के लिए एक टूल नहीं मिल पा रहा था सीएसवी फाइलों में टेबल का निर्यात हो सकता है, लेकिन मुझे डर है कि यह बहुत लंबा ले सकता है

तो मेरा सवाल अब है:

मुझे क्या करना चाहिए? क्या ओरेकल डंप फ़ाइलों को MySQL में आयात करने के लिए कोई उपकरण है? क्या ऐसे किसी बड़े पैमाने पर प्रवास के साथ किसी का अनुभव है?

पुनश्च: कृपया, ओरेकल के लिए प्रदर्शन अनुकूलन तकनीकों का सुझाव न दें, हमने पहले से बहुत कुछ करने की कोशिश की 🙂

संपादित करें: हमने पहले ही कुछ ईटीएल उपकरणों की कोशिश की थी, केवल यह पता लगाने के लिए कि वे तेजी से पर्याप्त नहीं थे: केवल एक तालिका का निर्यात पहले से ही 4 घंटे से अधिक समय लगे …

2 संपादित करें: लोगों पर आओ … क्या कोई भी संभवत: जितना तेज़ी से पूरे डेटाबेस को निर्यात करने और डेटा को बदलने की कोशिश नहीं करता, ताकि इसे किसी अन्य डेटाबेस सिस्टम में आयात किया जा सके?

वेब के समाधान से एकत्रित समाधान "ओरेकल से MySQL तक माइग्रेट करें"

ओरेकल आउट-द-द-बॉक्स उतार उपयोगिता की आपूर्ति नहीं करता है

अपने पर्यावरण के बारे में व्यापक जानकारी के बिना ध्यान रखें (ओरेकल संस्करण? सर्वर प्लेटफॉर्म? कितना डेटा? डेटाैटैप क्या है?) यहां सब कुछ YMMV है और आप इसे प्रदर्शन और समय के लिए अपने सिस्टम पर जाने देना चाहते हैं।

मेरे 1-3 अंक केवल सामान्य डेटा आंदोलन विचार हैं प्वाइंट 4 एक ऐसा तरीका है जो डाउनटाइम या रुकावट को मिनट या सेकंड तक कम कर देगा।

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

2) यदि आपके पास LOBs जैसी जटिल डेटाटेप्स नहीं हैं तो आप SQLPLUS के साथ अपना स्वयं रोल कर सकते हैं। यदि आप एक समय में एक टेबल बनाते हैं तो आप इसे आसानी से समानांतर कर सकते हैं। इस साइट पर विषय का दौरा किया गया है शायद एक से अधिक बार, यहां एक उदाहरण है: लिंकी

3) यदि आप 10 जी + हैं तो बाहरी टेबल्स इस कार्य को पूरा करने का एक शानदार तरीका हो सकता है। यदि आप अपनी मौजूदा तालिकाओं के समान संरचना के साथ कुछ रिक्त बाह्य तालिकाएं बनाते हैं और डेटा को उनसे प्रतिलिपि बनाते हैं, तो डेटा बाहरी तालिका प्रारूप (एक पाठ फ़ाइल) में कनवर्ट किया जाएगा। एक बार फिर, बचाव के लिए OraFAQ।

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

और मैं यहां क्रैकी डीबीए की भूमिका निभाऊंगा और कहूंगा कि अगर आप ऑरेकल को अच्छी तरह से प्रदर्शन नहीं कर पा रहे हैं तो मुझे यह देखने के लिए अच्छा लगेगा कि माइस्स्केल आपके विशेष मुद्दों को कैसे तय करता है। अगर आपके पास एक ऐसा अनुप्रयोग है जहां आप एसक्यूएल को छू नहीं सकते हैं, तो ओरेकल को ट्यून करने के लिए अभी भी बहुत सारे संभावित तरीके हैं। / सोपबॉक्स

मैंने एक सी # एप्लिकेशन बनाया है जो एक ओरेकल डंप (.dmp) फ़ाइल पढ़ सकता है और डेटा की टेबल को SQL सर्वर डेटाबेस में पंप कर सकता है।

SQL सर्वर पर लोकसॉफ्ट डेटाबेस को माइग्रेट करने के लिए इस एप्लिकेशन का उत्पादन आधार पर रात भर उपयोग किया जाता है। पीपल सॉफ्ट डाटाबेस में 1100+ डेटाबेस तालिकाओं और ओरेकल डंप फ़ाइल 4.5 जीबी आकार से अधिक है।

यह एप्लिकेशन SQL सर्वर डेटाबेस और तालिकाओं को बनाता है और उसके बाद दो-कोर इंटेल सर्वर पर चलने वाले 55 मिनट से कम समय में सभी 4.5GB डेटा लोड करता है

मुझे विश्वास नहीं है कि यह एडीओ। नेट प्रदाता के पास उपलब्ध अन्य डाटाबेस के साथ काम करने के लिए इस एप्लिकेशन को संशोधित करना बहुत कठिन होगा।

हाँ, ओरेकल बहुत धीमा है 🙂

ओराकल से डाटा को MySQL में स्थानांतरित करने के लिए आप ईटीएल उपकरणों के किसी भी नंबर का उपयोग कर सकते हैं। मेरा पसंदीदा एसक्यूएल सर्वर एकीकरण सेवाओं है

यदि आपके पास Oracle9i या उच्चतर है, तो आप परिवर्तन डेटा कैप्चर को लागू कर सकते हैं। यहां और पढ़ें http://download-east.oracle.com/docs/cd/B14117_01/server.101/b10736/cdc.htm

उसके बाद आप किसी भी ईटीएल प्रौद्योगिकियों का उपयोग करके ओरेकल से अपने MySQL या इन्फोब्राईट के परिवर्तनों का एक डेल्टा ले सकते हैं।

मुझे विभिन्न डेटाबेस के बीच बड़े डेटा को स्थानांतरित करने के लिए उपयोग किया जाता है, कहीं भी 10-250 मिलियन रिकॉर्ड के बीच। उदाहरण के लिए जब मैं 30 लाखों रिकॉर्डों को हस्तांतरित करने के लिए पेंटहो, तालेंड, जावा और रूबी का उपयोग करता हूं, तो मेरे स्थानान्तरण में हमेशा 5 घंटे का समय लगता है। जब मैंने पर्ल की कोशिश की तो हस्तांतरण का समय नाटकीय रूप से 20 मिनट तक घटा था।

पर्ल डेटा ट्रांसफर के लिए असाधारण प्रदर्शन का कारण हो सकता है कि पर्ल ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा नहीं है और स्ट्रिंग के रूप में सभी चर को मानता है। पर्ल को किसी प्रकार के रूपांतरण, किसी भी प्रकार की जांच या प्रत्येक बैच रिकॉर्ड सेट के लिए ऑब्जेक्ट बनाने की ज़रूरत नहीं है। पर्ल सिर्फ पूछता है कि हम तारों के रूप में 1,000 रिकॉर्ड और डेटा को तार के रूप में स्ट्रिंग के रूप में चलते हैं और फिर उचित डेटा प्रकार के रूपांतरण को एसक्यूएल स्टेटमेंट में गंतव्य डेटाबेस सर्वर द्वारा किया जाता है जिसमें 1,000 एसक्यूएल सम्मिलन स्टेटमेंट हैं।

पैटाहो, तालेंड, रुबी, जावा बहुत अधिक डेटा प्रकार की जांच कर रहे हैं, रूपांतरणों को टाइप करें, बहुत सारे ऑब्जेक्ट्स बनाते हैं जो ओएस पर मेमोरी मांगें बनाते हैं और कचरा कलेक्टर बनाते हैं वे पागल हो जाते हैं, और यही वह जगह होती है जब मैं लाखों रिकॉर्ड के साथ काम करता हूं।

मैं आमतौर पर 8 सीपीयू सर्वर पर 8 पर्ल प्रक्रिया करता हूं जो पिछले पुनर्प्राप्त रिकॉर्ड की स्थिति साझा करता है और वहां आप जाते हैं मुझे राक्षसी बदसूरत पर्ल ईटीएल मिल गया है कि कोई भी प्रदर्शन में हरा सकता है। उस समय प्रदर्शन केवल स्रोत और गंतव्य डेटाबेस पर निर्भर करता है। आप कितने रिकॉर्ड पूछ सकते हैं और प्रति सेकंड डालें,

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

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

http://find1friend.com/ http://myhealthcare.com/ 

मैंने ओरेकल से माइस्क्ल में माइग्रेट करने के लिए पेंटहाओ डाटा इंटिग्रेशन का उपयोग किया है (मैं भी उसी डेटा को पोस्टर्सकॉल पर माइग्रेट कर दिया था, जो करीब 50% जल्दी था, जिसका अनुमान मुझे लगता था कि बड़े पैमाने पर जेडीबीसी चालकों का उपयोग किया जाता था)। मैंने रोलाण्ड बूमैन के निर्देशों का पालन किया, लगभग पत्र तक, और यह बहुत ही सुखद था कि यह कितना आसान था:

टेबल डीबी से दूसरे तक टेबल डेटा कॉपी करें

मुझे नहीं पता कि यह आपके डेटा लोड के लिए उपयुक्त होगा, लेकिन यह एक शॉट के लायक है।

आप केवल क्वेरी परिणामों की पूरी तालिका की प्रतिलिपि करने के लिए पायथन, एसक्यूएल * प्लस और mysql.exe (MySQL क्लाइंट) स्क्रिप्ट का उपयोग कर सकते हैं। यह पोर्टेबल होगा क्योंकि ये सभी उपकरण विंडोज और लिनक्स पर मौजूद हैं।

जब मुझे यह करना था मैं पायथन का उपयोग कर निम्नलिखित चरणों को लागू किया:

  1. SQL * प्लस का उपयोग करते हुए सीएसवी फ़ाइल में डेटा निकालें।
  2. MySQL में mysql.exe का इस्तेमाल करते हुए डंप फ़ाइल लोड करें।

आप टेबल्स / विभाजन / उप-विभाजनों का उपयोग कर समानांतर लोड करके प्रदर्शन में सुधार कर सकते हैं

प्रकटीकरण: ओरेकल-टू-माईएसक्यूएल-डाटा-माइग्रेटर स्क्रिप्ट है जो मैंने Oracle and MySQL बीच डाटा एकीकरण के लिए लिखा है।

मैंने हाल ही में इस कार्य को पूरा करने के लिए एटलैल्मी जारी किया है। यह एक खुले स्रोत समाधान है जो किसी भी 2 एसक्यूएल डाटाबेस के बीच पठन के 4 लाइनों के बीच प्रवास की अनुमति देता है, और शुरू में ओरेकल से MySQL को माइग्रेट करने के लिए डिज़ाइन किया गया था MySQL, PostgreSQL, Oracle, SQLite और SQL सर्वर के लिए समर्थन जोड़ा गया है।

यह माइग्रेटिंग स्कीमा (सबसे ज्यादा चुनौतीपूर्ण), डेटा, अनुक्रमित और बाधाओं का ध्यान रखेगा, जिसमें कई और विकल्प उपलब्ध होंगे।

स्थापित करने के लिए:

 $ pip install etlalchemy 

एल कैपिटन पर : pip install --ignore-installed etlalchemy

चलाने के लिए:

 from etlalchemy import ETLAlchemySource, ETLAlchemyTarget orcl_db_source = ETLAlchemySource("oracle+cx_oracle://username:password@hostname/ORACLE_SID") mysql_db_target = ETLAlchemyTarget("mysql://username:password@hostname/db_name", drop_database=True) mysql_db_target.addSource(orcl_db_source) mysql_db_target.migrate() 

प्रदर्शन के संबंध में, यह उपकरण विभिन्न आरडीबीएमएस जैसे आईआईएससीएमआईएमएफ़ और कॉपी एफओआरएम ( पोस्टग्रेस्क्ल ) के रूप में बल्क आयात उपकरण का उपयोग करता है ताकि माइग्रेशन को कुशलता से पूरा किया जा सके। मैं एक 5 जीबी SQL सर्वर डेटाबेस को 33,105,951 पंक्तियों को MySQL में 40 मिनट में स्थानांतरित करने में सक्षम था, और 13 जीबी में MySQL के लिए 3 जीबी 7,000,000 पंक्ति ओरेकल डाटाबेस।

प्रोजेक्ट के मूल पर अधिक पृष्ठभूमि प्राप्त करने के लिए, इस पोस्ट को देखें। अगर आपको टूल चलाने में कोई त्रुटि मिलती है, तो गिटौब रिपो पर एक मुद्दा खोलें और मैं इसे एक सप्ताह से भी कम समय में पैच कर दूँगा!

("Cx_ oracle" पायथन ड्राइवर स्थापित करने के लिए, इन निर्देशों का पालन करें )