पिछले ब्लॉगों में, हमने Oracle से MySQL / Percona सर्वर में माइग्रेट कैसे करें और हाल ही में Oracle डेटाबेस से MariaDB में माइग्रेट करना - आपको क्या जानना चाहिए के विषय पर चर्चा की।
इन वर्षों में और जैसे ही MySQL और MariaDB के नए संस्करण जारी किए गए, दोनों प्रोजेक्ट पूरी तरह से दो अलग-अलग RDBMS प्लेटफार्मों में बदल गए हैं।
मारियाडीबी और माईएसक्यूएल अब एक-दूसरे से महत्वपूर्ण रूप से अलग हो गए हैं, खासकर उनके नवीनतम संस्करणों के आगमन के साथ:MySQL 8.0 और मारियाडीबी 10.3 जीए और इसके 10.4 (वर्तमान में आरसी उम्मीदवार)।
मारियाडीबी TX 3.0 रिलीज के साथ, मारियाडीबी ने कई लोगों को आश्चर्यचकित किया क्योंकि यह अब MySQL के लिए ड्रॉप-इन प्रतिस्थापन नहीं है। यह Oracle डेटाबेस के साथ संगतता का एक नया स्तर पेश करता है और अब Oracle के साथ-साथ अन्य एंटरप्राइज़ और मालिकाना डेटाबेस जैसे IBM DB2 या EnterpriseDB के लिए एक वास्तविक विकल्प बन रहा है।
मारियाडीबी संस्करण 10.3 के साथ शुरू करते हुए, महत्वपूर्ण विशेषताएं पेश की गई हैं जैसे सिस्टम-संस्करण वाली टेबल और, ओरेकल डीबीए के लिए सबसे आकर्षक क्या है, पीएल/एसक्यूएल के लिए समर्थन!
मारियाडीबी वेबसाइट के अनुसार, लगभग 80% विरासत ओरेकल पीएल/एसक्यूएल को कोड को फिर से लिखे बिना माइग्रेट किया जा सकता है। मारियाडीबी के पास कॉलमस्टोर भी है, जो उनका नया एनालिटिक्स इंजन है और एक कॉलमर स्टोरेज इंजन है जिसे बड़े डेटा एनालिटिक्स जैसे वितरित, व्यापक समानांतर प्रसंस्करण (एमपीपी) के लिए डिज़ाइन किया गया है।
मारियाडीबी टीम ने पीएल/एसक्यूएल के लिए अतिरिक्त समर्थन के लिए कड़ी मेहनत की है। Oracle से MariaDB में माइग्रेट करते समय यह अतिरिक्त आसानी से जुड़ जाता है। अपने नियोजित प्रवास के संदर्भ बिंदु के रूप में, आप मारियाडीबी से निम्नलिखित संदर्भ देख सकते हैं। हमारे पिछले ब्लॉग के अनुसार, यह प्रवासन की समग्र प्रक्रिया को कवर नहीं करेगा, क्योंकि यह एक लंबी प्रक्रिया है। लेकिन उम्मीद है कि यह आपकी माइग्रेशन प्रक्रिया के लिए एक गाइड के रूप में काम करने के लिए पर्याप्त पृष्ठभूमि जानकारी प्रदान करेगा।
योजना और विकास रणनीति
डीबीए के लिए, मारियाडीबी में जाने वाले ओरेकल डेटाबेस से माइग्रेट करना, इस तरह के माइग्रेशन का मतलब बहुत सारे समान कारक हैं जिन्हें शिफ्ट करना और अनुकूलित करना बहुत मुश्किल नहीं होना चाहिए। मारियाडीबी को विंडोज सर्वर में संचालित किया जा सकता है और इसमें डाउनलोड के लिए विंडोज प्लेटफॉर्म के लिए बायनेरिज़ उपलब्ध हैं। यदि आप OLAP (ऑनलाइन एनालिटिकल प्रोसेसिंग) या बिजनेस इंटेलिजेंस के लिए Oracle का उपयोग कर रहे हैं, तो MariaDB के पास ColumnStore भी है, जो Oracle के डेटाबेस इन-मेमोरी कॉलम स्टोर के बराबर है।
यदि आप मारियाडीबी में डेटा गार्ड ++ ओरेकल आरएसी (रियल एप्लिकेशन क्लस्टर) के साथ एमएए (अधिकतम उपलब्ध आर्किटेक्चर) वाले ओरेकल आर्किटेक्चर रखने के आदी हैं, तो मारियाडीबी में MySQL/Percona सर्वर के समान, आप एक सिंक्रोनस प्रतिकृति से चुन सकते हैं, अर्ध- सिंक, या एसिंक्रोनस प्रतिकृति।
अत्यधिक उपलब्ध समाधान के लिए, मारियाडीबी के पास आपके मुख्य विकल्प के रूप में मैक्सस्केल है जिसका आप उपयोग कर सकते हैं। आप MaxScale को Keepalived और HAProxy के साथ मिला सकते हैं। उदाहरण के लिए ClusterControl इसे कुशलतापूर्वक और यहां तक कि MariaDB के उत्पाद, MariaDB TX के नए आगमन के साथ भी प्रबंधित कर सकता है। ClusterControl इसे कुशलतापूर्वक कैसे प्रबंधित कर सकता है, इस बारे में अधिक जानने के लिए हमारा पिछला ब्लॉग देखें।
मारियाडीबी एक ओपन सोर्स तकनीक होने के कारण, इस प्रश्न पर विचार किया जा सकता है:"हमें समर्थन कैसे मिलता है?"
समर्थन विकल्प चुनते समय आपको यह सुनिश्चित करने की आवश्यकता है कि यह डेटाबेस तक सीमित नहीं है, लेकिन इसमें मापनीयता, अतिरेक, लचीलापन, बैकअप, उच्च-उपलब्धता, सुरक्षा, निगरानी/अवलोकन, पुनर्प्राप्ति और मिशन महत्वपूर्ण प्रणालियों पर संलग्न होने में विशेषज्ञता शामिल होनी चाहिए। . कुल मिलाकर, आपके द्वारा चुने जाने वाले समर्थन को आपके डेटा की गोपनीयता को उजागर किए बिना आपके आर्किटेक्चरल सेटअप की समझ के साथ आना चाहिए।
इसके अतिरिक्त, दुनिया भर में मारियाडीबी का एक बहुत बड़ा और सहयोगी समुदाय है। यदि आप समस्याओं का अनुभव करते हैं और इस समुदाय में शामिल लोगों से पूछना चाहते हैं, तो आप आईआरसी क्लाइंट (इंटरनेट रिले चैट) के माध्यम से फ़्रीनोड पर प्रयास कर सकते हैं, उनके समुदाय पृष्ठ पर जा सकते हैं, या उनकी मेलिंग सूची में शामिल हो सकते हैं।
आकलन या प्रारंभिक जांच
कॉन्फ़िगरेशन या सेटअप फ़ाइलों, कर्नेल ट्यूनिंग, ऑटोमेशन स्क्रिप्ट सहित अपने डेटा का बैकअप लेने पर विचार करने की आवश्यकता है:यह एक स्पष्ट कार्य है, लेकिन इससे पहले कि आप माइग्रेट करें, हमेशा पहले सब कुछ सुरक्षित करें, विशेष रूप से किसी भिन्न प्लेटफ़ॉर्म पर जाते समय।
आपको यह भी आकलन करना चाहिए कि आपके एप्लिकेशन अप-टू-डेट सॉफ़्टवेयर इंजीनियरिंग सम्मेलनों का पालन कर रहे हैं और सुनिश्चित करें कि वे प्लेटफ़ॉर्म अज्ञेयवादी हैं। ये प्रथाएं आपके लाभ के लिए हो सकती हैं, खासकर जब एक अलग डेटाबेस प्लेटफॉर्म पर जा रहे हों।
चूंकि मारियाडीबी एक ओपन-सोर्स तकनीक है, इसलिए सुनिश्चित करें कि आप जानते हैं कि मारियाडीबी में उपलब्ध कनेक्टर क्या हैं। यह अभी बहुत सीधा है क्योंकि विभिन्न उपलब्ध क्लाइंट-लाइब्रेरी हैं। इन क्लाइंट लाइब्रेरी की सूची के लिए यहां देखें। इसके अलावा, आप उपलब्ध क्लाइंट्स और यूटिलिटीज पेज की इस सूची को भी देख सकते हैं।
अंत में, अपनी हार्डवेयर आवश्यकताओं के बारे में सुनिश्चित करें।
मारियाडीबी की विशिष्ट आवश्यकताएं नहीं हैं:एक विशिष्ट कमोडिटी सर्वर काम कर सकता है लेकिन यह इस बात पर निर्भर करता है कि आपको कितने प्रदर्शन की आवश्यकता है। हालाँकि, यदि आप अपने विश्लेषणात्मक अनुप्रयोगों या डेटा वेयरहाउस अनुप्रयोगों के लिए ColumnStore से जुड़े हुए हैं, तो उनके दस्तावेज़ देखें। उनके पृष्ठ से लिया गया, AWS के लिए, उन्होंने आम तौर पर लागत प्रभावी मध्य मैदान के रूप में m4.4xबड़े उदाहरण प्रकारों का उपयोग करके इसका परीक्षण किया है। R4.8xlarge का भी परीक्षण किया जा चुका है और कीमत से लगभग दुगनी कीमत पर लगभग दुगनी तेजी से प्रदर्शन करता है।
आपको क्या पता होना चाहिए
MySQL के समान, MariaDB में, आप एकाधिक डेटाबेस बना सकते हैं जबकि Oracle समान कार्यक्षमता के साथ नहीं आता है।
मारियाडीबी में, एक स्कीमा एक डेटाबेस का पर्याय है। आप MariaDB SQL सिंटैक्स में DATABASE के बजाय SCHEMA कीवर्ड को स्थानापन्न कर सकते हैं। उदाहरण के लिए, स्कीमा बनाएं . का उपयोग करके डेटाबेस बनाएं . के बजाय; जबकि Oracle के पास इसके लिए एक अंतर है। एक स्कीमा एक डेटाबेस के केवल एक भाग का प्रतिनिधित्व करता है:एक एकल उपयोगकर्ता के स्वामित्व वाली तालिकाएँ और अन्य ऑब्जेक्ट। आम तौर पर, उदाहरण और डेटाबेस के बीच एक-से-एक संबंध होता है।
उदाहरण के लिए, Oracle (जैसे रियल एप्लिकेशन क्लस्टर्स या RAC) के समतुल्य प्रतिकृति सेटअप में, आपके पास एकल डेटाबेस तक पहुँचने के लिए आपके कई उदाहरण हैं। यह आपको कई सर्वरों पर Oracle शुरू करने देता है, सभी एक ही डेटा तक पहुँचते हैं। हालांकि, मारियाडीबी में, आप अपने कई उदाहरणों से कई डेटाबेस तक पहुंच की अनुमति दे सकते हैं और यह भी फ़िल्टर कर सकते हैं कि आप मारियाडीबी नोड में कौन से डेटाबेस/स्कीमा को दोहरा सकते हैं।
हमारे पिछले ब्लॉगों में से एक (यह और यह) से संदर्भित, वही सिद्धांत इंटरनेट पर उपलब्ध टूल के साथ अपने डेटाबेस को परिवर्तित करने की बात करते समय लागू होता है।
ऐसा कोई उपकरण नहीं है जो 100% Oracle डेटाबेस को MariaDB में परिवर्तित कर सके, हालाँकि MariaDB के पास Red Rover Migration Practice है; यह एक ऐसी सेवा है जो MariaDB प्रदान करता है और यह मुफ़्त नहीं है।
Oracle संगतता पर MariaDB के साथ अपने सहयोग के परिणामस्वरूप, MariaDB डेवलपमेंट बैंक ऑफ़ सिंगापुर (DBS) में प्रवास के बारे में बात करती है। यह केवल 12 महीनों में अपने मिशन-महत्वपूर्ण अनुप्रयोगों के 50 प्रतिशत से अधिक को Oracle डेटाबेस से MariaDB में स्थानांतरित करने में सक्षम रहा है।
लेकिन अगर आप कुछ टूल्स की तलाश कर रहे हैं, तो स्क्लाइन टूल्स, जो कि SQLines SQL कन्वर्टर और SQLines डेटा टूल हैं, टूल्स का एक सरल लेकिन ऑपरेशनल सेट प्रदान करते हैं।
नीचे दिए गए अनुभाग उन चीजों की रूपरेखा तैयार करते हैं, जिनके बारे में आपको तब पता होना चाहिए जब माइग्रेशन और तार्किक SQL परिणाम को सत्यापित करने की बात आती है।
डेटा प्रकार मैपिंग
MySQL और MariaDB समान डेटा प्रकार उपलब्ध साझा करते हैं। हालाँकि इसे कैसे लागू किया जाता है, इस बारे में भिन्नताएँ हैं, आप यहाँ MariaDB में डेटा प्रकारों की सूची की जाँच कर सकते हैं।
जबकि MySQL JSON डेटा-प्रकार का उपयोग करता है, MariaDB भिन्न है क्योंकि यह LONGTEXT डेटा प्रकार का एक उपनाम है। MariaDB का एक फ़ंक्शन JSON_VALID भी है, जिसका उपयोग CHECK बाधा अभिव्यक्ति के भीतर किया जा सकता है।
इसलिए, मैं यहां दी गई जानकारी के आधार पर नीचे इस सारणीबद्ध प्रस्तुति का उपयोग करूंगा, क्योंकि मारियाडीबी के खिलाफ MySQL से डेटा-प्रकार इतना अधिक विचलन नहीं करते हैं, लेकिन मैंने परिवर्तन जोड़े हैं क्योंकि ROW डेटा प्रकार को MariaDB 10.3 में पेश किया गया है। 0 PL/SQL संगतता सुविधा के भाग के रूप में।
नीचे दी गई तालिका देखें:
Oracle | <वें colspan="2">MySQL||||
---|---|---|---|---|
1 | BFILE | बाइनरी फ़ाइल का सूचक, ⇐ 4G | VARCHAR(255) | |
2 | BINARY_FLOAT | 32-बिट फ्लोटिंग-पॉइंट नंबर | फ्लोट | |
3 | BINARY_DOUBLE | 64-बिट फ्लोटिंग-पॉइंट नंबर | डबल | |
4 | बीएलओबी | बाइनरी लार्ज ऑब्जेक्ट, ⇐ 4G | LONGBLOB | |
5 | CHAR(n), CHARACTER(n) | फिक्स्ड-लेंथ स्ट्रिंग, 1 n ⇐ 255 | CHAR(n), CHARACTER(n) | |
6 | CHAR(n), CHARACTER(n) | फिक्स्ड-लेंथ स्ट्रिंग, 256 n ⇐ 2000 | VARCHAR(n) | |
7 | CLOB | चरित्र बड़ी वस्तु, ⇐ 4G | LONGTEXT | |
8 | दिनांक | तारीख और समय | DATETIME | |
9 | DECIMAL(p,s), DEC(p,s) | निश्चित-बिंदु संख्या | DECIMAL(p,s), DEC(p,s) | |
10 | डबल सटीक | अस्थायी बिंदु संख्या | डबल सटीक | |
11 | फ्लोट(पी) | अस्थायी बिंदु संख्या | डबल | |
12 | पूर्णांक, INT | 38 अंकों का पूर्णांक | आईएनटी | दशमलव(38) |
13 | अंतराल वर्ष(p) से माह तक | तारीख अंतराल | VARCHAR(30) | |
14 | अंतराल दिन(p) से सेकंड(s) तक | दिन और समय अंतराल | VARCHAR(30) | |
15 | लंबी | चरित्र डेटा, ⇐ 2G | LONGTEXT | |
16 | लंबी रॉ | बाइनरी डेटा, ⇐ 2G | LONGBLOB | |
17 | एनसीएचएआर(एन) | फिक्स्ड-लेंथ UTF-8 स्ट्रिंग, 1 n ⇐ 255 | NCHAR(n) | |
18 | एनसीएचएआर(एन) | फिक्स्ड-लेंथ UTF-8 स्ट्रिंग, 256 n ⇐ 2000 | NVARCHAR(n) | |
19 | एनसीएचएआर वेरीइंग(एन) | भिन्न-लंबाई वाली UTF-8 स्ट्रिंग, 1 n ⇐ 4000 | NCHAR VARYING(n) | |
20 | एनसीएलओबी | चर-लंबाई वाली यूनिकोड स्ट्रिंग, ⇐ 4G | NVARCHAR(अधिकतम) | |
21 | NUMBER(p,0), NUMBER(p) | 8-बिट पूर्णांक, 1 <=p <3 | टिन्यिनट | (0 से 255) |
16-बिट पूर्णांक, 3 <=p <5 | SMALLINT | |||
32-बिट पूर्णांक, 5 <=p <9 | INT | |||
64-बिट पूर्णांक, 9 <=p <19 | BIGINT | |||
स्थिर-बिंदु संख्या, 19 <=p <=38 | DECIMAL(p) | |||
22 | NUMBER(p,s) | निश्चित-बिंदु संख्या, s> 0 | DECIMAL(p,s) | |
23 | NUMBER, NUMBER(*) | अस्थायी बिंदु संख्या | डबल | |
24 | NUMERIC(p,s) | निश्चित-बिंदु संख्या | NUMERIC(p,s) | |
25 | NVARCHAR2(n) | वेरिएबल-लेंथ UTF-8 स्ट्रिंग, 1 n ⇐ 4000 | NVARCHAR(n) | |
26 | रॉ(n) | वैरिएबल-लेंथ बाइनरी स्ट्रिंग, 1 n ⇐ 255 | BINARY(n) | |
27 | रॉ (एन) | वैरिएबल-लेंथ बाइनरी स्ट्रिंग, 256 n ⇐ 2000 | VARBINARY(n) | |
28 | असली | अस्थायी बिंदु संख्या | डबल | |
29 | ROWID | भौतिक पंक्ति का पता | CHAR(10) इसलिए, PL/SQL संगतता के लिए, आप ROW (<फ़ील्ड नाम> <डेटा प्रकार> [{, <फ़ील्ड नाम> <डेटा प्रकार>}) का उपयोग कर सकते हैं। ..]) | |
30 | स्मालिंट | 38 अंकों का पूर्णांक | DECIMAL(38) | |
31 | टाइमस्टैम्प(पी) | अंश के साथ दिनांक और समय | DATETIME(p) | |
32 | टाइम ज़ोन के साथ टाइमस्टैम्प(p) | अंश और समय क्षेत्र के साथ दिनांक और समय | DATETIME(p) | |
33 | UROWID(n) | तार्किक पंक्ति पते, 1 n ⇐ 4000 | VARCHAR(n) | |
34 | VARCHAR(n) | चर-लंबाई वाली स्ट्रिंग, 1 n ⇐ 4000 | VARCHAR(n) | |
35 | VARCHAR2(n) | चर-लंबाई वाली स्ट्रिंग, 1 n ⇐ 4000 | VARCHAR(n) | |
36 | XMLTYPE | XML डेटा | LONGTEXT |
डेटा प्रकार विशेषताएँ और विकल्प:
Oracle | MySQL |
---|---|
BYTE और CHAR स्तंभ आकार शब्दार्थ | आकार हमेशा वर्णों में होता है |
लेन-देन
मारियाडीबी पिछले संस्करणों से 10.1 तक XtraDB का उपयोग करता है और संस्करण 10.2 से InnoDB में स्थानांतरित हो गया है; हालांकि MyRocks स्टोरेज इंजन जैसे लेनदेन को संभालने के लिए विभिन्न स्टोरेज इंजन वैकल्पिक विकल्प हो सकते हैं।
डिफ़ॉल्ट रूप से, मारियाडीबी में ऑटोकॉमिट वैरिएबल ऑन पर सेट है, जिसका अर्थ है कि परिवर्तनों को अनदेखा करने या SAVEPOINT का उपयोग करने का लाभ लेने के लिए आपको रोलबैक का लाभ उठाने के लिए स्पष्ट रूप से लेनदेन संबंधी बयानों को संभालना होगा।
यह मूल रूप से वही अवधारणा है जिसका उपयोग Oracle कमिट, रोलबैक और सेवपॉइंट के संदर्भ में करता है।
स्पष्ट लेन-देन के लिए, इसका मतलब है कि आपको ट्रांज़ेक्शन प्रारंभ करें/BEGIN; <एसक्यूएल स्टेटमेंट्स>; कमिट; वाक्य रचना।
अन्यथा, यदि आपको ऑटोकॉमिट को अक्षम करना है, तो आपको अपने उन बयानों के लिए हर समय स्पष्ट रूप से COMMIT करना होगा जिनके लिए आपके डेटा में बदलाव की आवश्यकता है।
दोहरी तालिका
मारियाडीबी में ओरेकल के साथ दोहरी संगतता है जो एक डमी टेबल, अर्थात् डीयूएएल का उपयोग करके डेटाबेस की संगतता के लिए है। यह MySQL के समान ही संचालित होता है जहाँ FROM क्लॉज अनिवार्य नहीं है, इसलिए DUAL तालिका आवश्यक नहीं है। हालाँकि, DUAL तालिका ठीक उसी तरह काम नहीं करती है जैसे Oracle के लिए करती है, लेकिन MariaDB में साधारण SELECT के लिए, यह ठीक है।
यह Oracle के DUAL के उपयोग के लिए उपयुक्त है, इसलिए आपके एप्लिकेशन में DUAL का उपयोग करने वाले किसी भी मौजूदा स्टेटमेंट को MariaDB में माइग्रेशन पर किसी बदलाव की आवश्यकता नहीं हो सकती है।
Oracle FROM क्लॉज प्रत्येक SELECT स्टेटमेंट के लिए अनिवार्य है, इसलिए Oracle डेटाबेस SELECT स्टेटमेंट के लिए DUAL टेबल का उपयोग करता है जहाँ टेबल नाम की आवश्यकता नहीं होती है।
नीचे दिया गया उदाहरण देखें:
Oracle में:
SQL> DESC DUAL;
Name Null? Type
----------------------------------------- -------- ----------------------------
DUMMY VARCHAR2(1)
SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
16-FEB-19 04.16.18.910331 AM +08:00
लेकिन मारियाडीबी में:
MariaDB [test]> DESC DUAL;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DUAL' at line 1
MariaDB [test]> SELECT CURRENT_TIMESTAMP FROM DUAL;
+---------------------+
| CURRENT_TIMESTAMP |
+---------------------+
| 2019-02-27 04:11:01 |
+---------------------+
1 row in set (0.000 sec)
नोट:DESC DUAL सिंटैक्स मारियाडीबी में काम नहीं करता है और परिणाम अलग-अलग होते हैं क्योंकि MySQL में CURRENT_TIMESTAMP (TIMESTAMP डेटा प्रकार का उपयोग करता है) में टाइमज़ोन शामिल नहीं है।
SYSDATE
Oracle का SYSDATE फ़ंक्शन मारियाडीबी में लगभग समान है।
MariaDB दिनांक और समय लौटाता है और यह एक ऐसा फ़ंक्शन है जिसके लिए () . की आवश्यकता होती है (बिना किसी तर्क के बंद और खुला कोष्ठक। इसे नीचे प्रदर्शित करने के लिए, यहाँ SYSDATE का उपयोग करने पर Oracle और MariaDB है।
ओरेकल में, सादे SYSDATE का उपयोग करके बिना समय के दिन की तारीख लौटा दी जाती है। लेकिन समय और दिनांक प्राप्त करने के लिए, दिनांक समय को उसके वांछित प्रारूप में बदलने के लिए TO_CHAR का उपयोग करें; जबकि मारियाडीबी में, आपको तारीख और समय दोनों प्राप्त करने के लिए इसकी आवश्यकता नहीं हो सकती है।
नीचे उदाहरण देखें।
Oracle में:
SQL> SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW" FROM DUAL;
NOW
-------------------
02-16-2019 04:39:00
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
---------
16-FEB-19
लेकिन मारियाडीबी में:
MariaDB [test]> SELECT SYSDATE() FROM DUAL;
+---------------------+
| SYSDATE() |
+---------------------+
| 2019-02-27 04:11:57 |
+---------------------+
1 row in set (0.000 sec)
यदि आप तिथि को प्रारूपित करना चाहते हैं, तो मारियाडीबी के पास DATE_FORMAT() फ़ंक्शन है।
अधिक जानकारी के लिए आप MariaDB के दिनांक और समय के दस्तावेज़ देख सकते हैं।
TO_DATE
MariaDB में Oracle का TO_DATE समतुल्य STR_TO_DATE() फ़ंक्शन है।
यह लगभग Oracle के समान है:यह DATE डेटा प्रकार देता है, जबकि MariaDB में यह DATETIME डेटा प्रकार देता है।
ओरेकल:
SQL> SELECT TO_DATE ('20190218121212','yyyymmddhh24miss') as "NOW" FROM DUAL;
NOW
-------------------------
18-FEB-19
मारियाडीबी:
MariaDB [test]> SELECT STR_TO_DATE('2019-02-18 12:12:12','%Y-%m-%d %H:%i:%s') as "NOW" FROM DUAL;
+---------------------+
| NOW |
+---------------------+
| 2019-02-18 12:12:12 |
+---------------------+
1 row in set (0.000 sec)
समानार्थी
मारियाडीबी के पास अभी तक इसके समकक्ष कार्यक्षमता नहीं है। वर्तमान में, उनके जीरा टिकट MDEV-16482 के आधार पर, SYNONYM जोड़ने का यह सुविधा अनुरोध अभी भी खुला है और इस समय तक प्रगति का कोई संकेत नहीं है। हम उम्मीद कर रहे हैं कि इसे भविष्य के रिलीज में शामिल किया जाएगा। हालांकि, एक संभावित विकल्प व्यू का उपयोग करना हो सकता है।
हालांकि Oracle में SYNONYM का उपयोग दूरस्थ तालिका का उपनाम बनाने के लिए किया जा सकता है,
उदा.
CREATE PUBLIC SYNONYM emp_table FOR [email protected]
मारियाडीबी में, आप कनेक्ट स्टोरेज इंजन का उपयोग करने का लाभ उठा सकते हैं जो कि फेडरेटेडएक्स स्टोरेज इंजन की तुलना में अधिक शक्तिशाली है, क्योंकि यह आपको विभिन्न डेटाबेस स्रोतों को जोड़ने की अनुमति देता है। आप इस लघु वीडियो प्रस्तुति को देख सकते हैं।
मारियाडीबी के मैनुअल पेज में एक अच्छा उदाहरण है, जिसे मैं यहां नहीं दोहराऊंगा क्योंकि ओडीबीसी का उपयोग करते समय आपको विशेष रूप से कुछ विचारों को पूरा करना होगा। कृपया मैनुअल देखें।
खाली स्ट्रिंग और NULL का व्यवहार
ध्यान दें कि मारियाडीबी में, खाली स्ट्रिंग न्यूल नहीं है जबकि ओरेकल खाली स्ट्रिंग को शून्य मान के रूप में मानता है।
Oracle में:
SQL> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
Nul
---
Yes
मारियाडीबी में:
MariaDB [test]> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
+-----------+
| Null Eval |
+-----------+
| No |
+-----------+
1 row in set (0.001 sec)
अनुक्रम
मारियाडीबी 10.3 के बाद से, ओरेकल-संगत अनुक्रम और ओरेकल पीएल/एसक्यूएल के अनुरूप एक संग्रहीत प्रक्रिया भाषा पेश की गई है। MariaDB में, अनुक्रम बनाना Oracle के SEQUENCE के समान ही है।
मारियाडीबी का उदाहरण:
CREATE SEQUENCE s START WITH 100 INCREMENT BY 10;
CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;
और व्यावहारिक न्यूनतम और अधिकतम मान निर्दिष्ट करना निम्नानुसार दिखाता है
CREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10 MINVALUE=-100 MAXVALUE=1000;
चरित्र स्ट्रिंग फ़ंक्शन
मारियाडीबी, माईएसक्यूएल के समान, में भी कुछ स्ट्रिंग फ़ंक्शन हैं जो यहां एक-एक करके चर्चा करने के लिए बहुत लंबा है। इसलिए, यहां से दस्तावेज़ीकरण की जांच कर सकते हैं और इसकी तुलना Oracle के स्ट्रिंग फ़ंक्शंस से कर सकते हैं।
डीएमएल स्टेटमेंट
Oracle से सम्मिलित/अद्यतन/हटाएं कथन MariaDB में सर्वांगसम हैं।
Oracle का सभी डालें/पहले डालें मारियाडीबी में समर्थित नहीं है और अभी तक किसी ने भी इस सुविधा अनुरोध को अपने जीरा (जो मुझे पता है) में नहीं खोला है।
अन्यथा, आपको अपने MySQL प्रश्नों को एक-एक करके बताना होगा।
उदा.
Oracle में:
SQL> INSERT ALL
INTO CUSTOMERS (customer_id, customer_name, city) VALUES (1000, 'Jase Alagaban', 'Davao City')
INTO CUSTOMERS (customer_id, customer_name, city) VALUES (2000, 'Maximus Aleksandre Namuag', 'Davao City')
SELECT * FROM dual;
2 rows created.
लेकिन मारियाडीबी में, आपको एक बार में एक इन्सर्ट चलाना होगा:
MariaDB [test]> INSERT INTO CUSTOMERS (customer_id, customer_name, city) VALUES (1000, 'Jase Alagaban', 'Davao City');
Query OK, 1 row affected (0.02 sec)
MariaDB [test]> INSERT INTO CUSTOMERS (customer_id, customer_name, city) VALUES (2000, 'Maximus Aleksandre Namuag', 'Davao City');
Query OK, 1 row affected (0.00 sec)
INSERT ALL/INSERT FIRST तुलना नहीं करता है कि Oracle में इसका उपयोग कैसे किया जाता है, जहाँ आप अपने सिंटैक्स में WHEN कीवर्ड जोड़कर शर्तों का लाभ उठा सकते हैं; मारियाडीबी में इस समय के समान कोई विकल्प नहीं है।
इसलिए, इस पर आपका वैकल्पिक समाधान प्रक्रियाओं का उपयोग करना है।
बाहरी जोड़ "+" प्रतीक
वर्तमान में, अनुकूलता के लिए, यह अभी तक MariaDB में मौजूद नहीं है। इसलिए, मारियाडीबी में मुझे बहुत सारे जीरा टिकट मिले हैं, लेकिन फीचर अनुरोध के मामले में यह बहुत अधिक सटीक है। इसलिए, इस समय के लिए आपकी वैकल्पिक पसंद जॉइन सिंटैक्स का उपयोग करना है। इस बारे में अधिक जानकारी के लिए कृपया दस्तावेज़ीकरण देखें।
से शुरू करें.. से जुड़ें
Oracle START with..CONNECT BY . का उपयोग करता है पदानुक्रमित प्रश्नों के लिए।
मारियाडीबी 10.2 से, उन्होंने सीटीई (कॉमन टेबल एक्सप्रेशन) की शुरुआत की, जो पदानुक्रमित डेटा परिणामों की पीढ़ियों का समर्थन करने के लिए डिज़ाइन किया गया है, जो आसन्न सूची या नेस्टेड सेट मॉडल जैसे मॉडल का उपयोग करते हैं।
PostgreSQL और MySQL के समान, MariaDB गैर-पुनरावर्ती और पुनरावर्ती CTE का उपयोग करता है।
उदाहरण के लिए, एक साधारण गैर-पुनरावर्ती जिसका उपयोग व्यक्तियों की उनके समूह से तुलना करने के लिए किया जाता है:
WITH sales_product_year AS (
SELECT product,
YEAR(ship_date) AS year,
SUM(price) AS total_amt
FROM item_sales
GROUP BY product, year
)
SELECT *
FROM sales_product_year S1
WHERE
total_amt >
(SELECT 0.1 * SUM(total_amt)
FROM sales_product_year S2
WHERE S2.year = S1.year)
जबकि एक पुनरावर्ती सीटीई (उदाहरण:न्यूयॉर्क के साथ बस गंतव्यों को मूल के रूप में लौटाएं)
WITH RECURSIVE bus_dst as (
SELECT origin as dst FROM bus_routes WHERE origin='New York'
UNION
SELECT bus_routes.dst FROM bus_routes, bus_dst WHERE bus_dst.dst= bus_routes.origin
)
SELECT * FROM bus_dst;
MariaDB में PL/SQL?
पहले, हमारे ब्लॉग में "Oracle डेटाबेस से MariaDB में माइग्रेट करना - आपको क्या पता होना चाहिए" के बारे में, हमने दिखाया कि यह अब MariaDB में अपने डेटाबेस कर्नेल के हिस्से के रूप में PL/SQL को अपनाने के लिए अपने अनुपालन को जोड़कर कितना शक्तिशाली है। जब भी आप MariaDB में PL/SQL संगतता का उपयोग करते हैं, तो सुनिश्चित करें कि आपने SQL_MODE ='Oracle' सेट किया है बस इस प्रकार है:
SET SQL_MODE='ORACLE';
नया संगतता मोड निम्नलिखित सिंटैक्स के साथ मदद करता है:
- लूप सिंटैक्स
- परिवर्तनीय घोषणा
- गैर-एएनएसआई संग्रहित प्रक्रिया निर्माण
- कर्सर सिंटैक्स
- संग्रहीत प्रक्रिया पैरामीटर
- डेटा प्रकार वंशानुक्रम (%TYPE, %ROWTYPE)
- PL/SQL शैली अपवाद
- मूल SQL प्रकार के समानार्थी शब्द (VARCHAR2, NUMBER,…)
उदाहरण के लिए, ओरेकल में, आप एक पैकेज बना सकते हैं, जो एक स्कीमा ऑब्जेक्ट है जो तार्किक रूप से संबंधित पीएल/एसक्यूएल प्रकार, चर और उपप्रोग्राम समूह करता है। इसलिए, मारियाडीबी में, आप इसे नीचे की तरह कर सकते हैं:
MariaDB [test]> CREATE OR REPLACE PACKAGE BODY hello AS
->
-> vString VARCHAR2(255) := NULL;
->
-> -- was declared public in PACKAGE
-> PROCEDURE helloFromS9s(pString VARCHAR2) AS
-> BEGIN
-> SELECT 'Severalnines showing MariaDB Package Procedure in ' || pString || '!' INTO vString FROM dual;
-> SELECT vString;
-> END;
->
-> BEGIN
-> SELECT 'called only once per connection!';
-> END hello;
-> /
Query OK, 0 rows affected (0.021 sec)
MariaDB [test]>
MariaDB [test]> DECLARE
-> vString VARCHAR2(255) := NULL;
-> -- CONSTANT seems to be not supported yet by MariaDB
-> -- cString CONSTANT VARCHAR2(255) := 'anonymous block';
-> cString VARCHAR2(255) := 'anonymous block';
-> BEGIN
-> CALL hello.helloFromS9s(cString);
-> END;
-> /
+----------------------------------+
| called only once per connection! |
+----------------------------------+
| called only once per connection! |
+----------------------------------+
1 row in set (0.000 sec)
+--------------------------------------------------------------------+
| vString |
+--------------------------------------------------------------------+
| Severalnines showing MariaDB Package Procedure in anonymous block! |
+--------------------------------------------------------------------+
1 row in set (0.000 sec)
Query OK, 1 row affected (0.000 sec)
MariaDB [test]>
MariaDB [test]> DELIMITER ;
हालांकि, ओरेकल के पीएल/एसक्यूएल को सर्वर में लोड होने पर निष्पादन से पहले संकलित किया जाता है। हालांकि मारियाडीबी अपने मैनुअल में यह नहीं कहता है, मुझे लगता है कि दृष्टिकोण MySQL जैसा ही है जहां इसे संकलित किया जाता है और कैश में संग्रहीत किया जाता है।
माइग्रेशन टूल
जैसा कि मेरे सहयोगी बार्ट ने यहां हमारे पिछले ब्लॉग में बताया था, SQLines SQL कन्वर्टर और SQLines डेटा टूल जैसे sqlines टूल भी आपके माइग्रेशन के हिस्से के रूप में सहायता प्रदान कर सकते हैं।
MariaDB के पास उनकी Red Rover प्रवासन अभ्यास सेवा है जिसका आप लाभ उठा सकते हैं।
कुल मिलाकर, Oracle का MariaDB में प्रवास उतना आसान नहीं है जितना कि MySQL/Percona में माइग्रेट करना, जो कि MariaDB की तुलना में अधिक चुनौतियों को जोड़ सकता है; विशेष रूप से MySQL में कोई PL/SQL संगतता मौजूद नहीं है।
किसी भी तरह, अगर आपको Oracle से MariaDB में माइग्रेट करने के लिए उपयोगी और फायदेमंद कोई टूल मिलता है या आपको पता है, तो कृपया इस ब्लॉग पर एक टिप्पणी छोड़ दें!
परीक्षण
जैसा कि मैंने इस ब्लॉग में कहा है, मुझे इसे यहां कुछ दोहराने की अनुमति दें।
आपकी माइग्रेशन योजना के हिस्से के रूप में, परीक्षण एक महत्वपूर्ण कार्य है जो बहुत महत्वपूर्ण भूमिका निभाता है और माइग्रेशन के संबंध में आपके निर्णय को प्रभावित करता है।
उपकरण dbdeployer (MySQL सैंडबॉक्स का प्रतिस्थापन) एक बहुत ही उपयोगी उपकरण है जिसका आप लाभ उठा सकते हैं। यदि आपका उद्देश्य पहले RDBMS प्लेटफ़ॉर्म को आज़माना और परीक्षण करना है, तो पूरे स्टैक को सेट करने के बजाय, अलग-अलग तरीकों को आज़माना और उनका परीक्षण करना आपके लिए बहुत आसान है और आपका समय बचाता है।
अपने SQL संग्रहीत रूटीन (फ़ंक्शंस या प्रक्रियाओं), ट्रिगर्स, ईवेंट्स के परीक्षण के लिए, मेरा सुझाव है कि आप इन टूल mytap या Google के यूनिट टेस्टिंग फ्रेमवर्क का उपयोग करें।
Percona उपकरण अभी भी उपयोगी हो सकते हैं और आपके DBA या इंजीनियरिंग कार्यों में भी MariaDB के साथ शामिल किए जा सकते हैं। यहां परकोना टूलकिट चेकआउट करें। आप विशेष रूप से परीक्षण और उत्पादन-उपयोग कार्यों के लिए अपनी आवश्यकताओं के अनुसार उपकरण चुन सकते हैं।
कुल मिलाकर, मारियाडीबी सर्वर के लिए परीक्षण करते समय आपको अपने दिशानिर्देशों के रूप में जिन बातों का ध्यान रखना चाहिए, वे हैं:
- इंस्टॉलेशन के बाद, आपको कुछ ट्यूनिंग करने पर विचार करना होगा। अपने मारियाडीबी सर्वर को ट्यून करने के बारे में हमारा वेबिनार देखें।
- अपने वर्तमान नोड पर अपने कॉन्फ़िगरेशन सेटअप के लिए कुछ बेंचमार्क और स्ट्रेस-लोड परीक्षण करें। चेकआउट mysqlslap और sysbench जो इसमें आपकी मदद कर सकता है। हमारे ब्लॉग को भी देखें "SysBench का उपयोग करके MySQL और MariaDB के प्रदर्शन को बेंचमार्क कैसे करें"।
- अपने डीडीएल की जांच करें कि क्या वे सही ढंग से परिभाषित हैं जैसे डेटा-प्रकार, बाधाएं, क्लस्टर और सेकेंडरी इंडेक्स, या विभाजन, यदि आपके पास कोई है।
- अपने डीएमएल की जांच करें, खासकर अगर सिंटैक्स सही है और उम्मीद के मुताबिक डेटा को सही तरीके से सहेज रहे हैं।
- अपने संग्रहीत दिनचर्या, ईवेंट देखें, यह सुनिश्चित करने के लिए ट्रिगर करें कि वे अपेक्षित परिणाम चलाते/लौटते हैं।
- सत्यापित करें कि चल रही आपकी क्वेरी प्रदर्शनकारी हैं। मेरा सुझाव है कि आप ओपन-सोर्स टूल का लाभ उठाएं या हमारे ClusterControl उत्पाद को आजमाएं। यह विशेष रूप से आपके मारियाडीबी क्लस्टर की निगरानी/अवलोकन क्षमता प्रदान करता है। इस पिछले ब्लॉग की जाँच करें जिसमें हम दिखाते हैं कि कैसे ClusterControl आपको MariaDB TX 3.0 को प्रबंधित करने में मदद कर सकता है। आप अपने प्रश्नों और इसकी क्वेरी योजना की निगरानी के लिए यहां क्लस्टरकंट्रोल का उपयोग कर सकते हैं ताकि यह सुनिश्चित हो सके कि वे प्रदर्शनकारी हैं।