Oracle से MySQL/Percona सर्वर में माइग्रेट करना कोई तुच्छ कार्य नहीं है। हालांकि यह आसान हो रहा है, विशेष रूप से MySQL 8.0 के आगमन के साथ और Percona ने MySQL 8.0 GA के लिए Percona सर्वर की घोषणा की। Oracle से Percona सर्वर में अपने प्रवास की योजना बनाने के अलावा, आपको यह सुनिश्चित करना होगा कि आप उद्देश्य और कार्यक्षमता को समझते हैं कि इसे Percona सर्वर क्यों होना चाहिए।
यह ब्लॉग अपनी पसंद के विशिष्ट लक्ष्य डेटाबेस के रूप में Oracle से Percona सर्वर में माइग्रेट करने पर ध्यान केंद्रित करेगा। Oracle वेबसाइट में MySQL माइग्रेशन के लिए SQL डेवलपर सप्लीमेंट्री इंफॉर्मेशन के बारे में एक पेज है जिसे नियोजित माइग्रेशन के संदर्भ के रूप में इस्तेमाल किया जा सकता है। यह ब्लॉग प्रवासन की समग्र प्रक्रिया को कवर नहीं करेगा, क्योंकि यह एक लंबी प्रक्रिया है। लेकिन उम्मीद है कि यह आपकी माइग्रेशन प्रक्रिया के लिए एक गाइड के रूप में काम करने के लिए पर्याप्त पृष्ठभूमि जानकारी प्रदान करेगा।
चूँकि Percona Server MySQL का एक कांटा है, MySQL में आने वाली लगभग सभी सुविधाएँ Percona Server में मौजूद हैं। तो यहाँ MySQL का कोई भी संदर्भ Percona Server पर भी लागू होता है। हमने पहले Oracle डेटाबेस को PostgreSQL में माइग्रेट करने के बारे में ब्लॉग किया था। मैं उन कारणों को फिर से दोहराऊंगा कि क्यों कोई Oracle से एक ओपन-सोर्स RDBMS जैसे PostgreSQL या Percona Server/MySQL/MariaDB में माइग्रेट करने पर विचार करेगा।
- लागत:जैसा कि आप जानते हैं कि Oracle लाइसेंस की लागत बहुत महंगी है और कुछ सुविधाओं जैसे विभाजन और उच्च उपलब्धता के लिए अतिरिक्त लागत है। तो कुल मिलाकर यह बहुत महंगा है।
- एडब्ल्यूएस जैसे सार्वजनिक क्लाउड प्रदाताओं से लचीला ओपन सोर्स लाइसेंसिंग और आसान उपलब्धता।
- प्रदर्शन को बेहतर बनाने के लिए ओपन सोर्स ऐड-ऑन का लाभ उठाएं।
योजना और विकास रणनीति
Oracle से Percona Server 8.0 में प्रवास एक दर्द हो सकता है क्योंकि बहुत सारे प्रमुख कारक हैं जिन पर विचार करने और उन्हें संबोधित करने की आवश्यकता है। उदाहरण के लिए, ओरेकल विंडोज सर्वर मशीन पर चल सकता है लेकिन पेरकोना सर्वर विंडोज को सपोर्ट नहीं करता है। यद्यपि आप इसे विंडोज़ के लिए संकलित कर सकते हैं, पेरकोना स्वयं विंडोज़ के लिए कोई समर्थन प्रदान नहीं करता है। आपको अपने डेटाबेस आर्किटेक्चर आवश्यकताओं की भी पहचान करनी चाहिए, क्योंकि Percona सर्वर OLAP (ऑनलाइन एनालिटिकल प्रोसेसिंग) या डेटा-वेयरहाउसिंग अनुप्रयोगों के लिए डिज़ाइन नहीं किया गया है। Percona Server/MySQL RDBMS OLTP (ऑनलाइन ट्रांजेक्शन प्रोसेसिंग) के लिए एकदम उपयुक्त हैं।
अपने डेटाबेस आर्किटेक्चर के प्रमुख पहलू की पहचान करना, उदाहरण के लिए यदि आपका वर्तमान Oracle आर्किटेक्चर डेटा गार्ड ++ Oracle RAC (रियल एप्लिकेशन क्लस्टर) के साथ MAA (अधिकतम उपलब्ध आर्किटेक्चर) को लागू करता है, तो आपको Percona सर्वर में इसकी तुल्यता का निर्धारण करना चाहिए। MySQL/Percona सर्वर के भीतर इसका कोई सीधा जवाब नहीं है। हालाँकि, आप एक सिंक्रोनस प्रतिकृति, एक अतुल्यकालिक प्रतिकृति (Percona XtraDB क्लस्टर अभी भी संस्करण 5.7.x पर है), या समूह प्रतिकृति के साथ चुन सकते हैं। फिर, ऐसे कई विकल्प हैं जिन्हें आप अपने स्वयं के उच्च-उपलब्धता समाधान के लिए लागू कर सकते हैं। उदाहरण के लिए, (कुछ नाम रखने के लिए) Corosync/Pacemaker/DRBD/Linux स्टैक का उपयोग करना, या MHA (MySQL उच्च उपलब्धता) का उपयोग करना, या Keepalived/HaProxy/ProxySQL स्टैक का उपयोग करना, या स्पष्ट रूप से ClusterControl पर भरोसा करना जो Keepalived, HaProxy, ProxySQL का समर्थन करता है, आपके उच्च-उपलब्धता समाधानों के लिए Garbd, और Maxscale।
दूसरी तरफ, योजना के हिस्से के रूप में आपको जिस प्रश्न पर भी विचार करना है, वह यह है कि "पेरकोना कैसे सहायता प्रदान करेगा और कौन हमारी मदद करेगा जब पेरकोना सर्वर स्वयं एक बग का सामना करता है या जब हमें सहायता की आवश्यकता होती है तो यह कितना अधिक होता है?"। बजट पर भी विचार करने की एक बात है, अगर एंटरप्राइज़ डेटाबेस से ओपन-सोर्स आरडीबीएमएस में माइग्रेशन का उद्देश्य लागत-कटौती के कारण है।
माइग्रेशन प्लानिंग से लेकर आपकी विकास रणनीति के हिस्से के रूप में आपको जिन चीजों को करने की जरूरत है, उनके लिए अलग-अलग विकल्प हैं। इस तरह के विकल्पों में MySQL/Percona सर्वर क्षेत्र के विशेषज्ञों के साथ जुड़ना शामिल है और इसमें हमें यहां सेवरनाइन में शामिल किया गया है। बहुत सारी MySQL कंसल्टिंग फर्म हैं जो इसमें आपकी मदद कर सकती हैं क्योंकि Oracle से MySQL में माइग्रेशन के लिए MySQL सर्वर क्षेत्र में बहुत अधिक विशेषज्ञता और जानकारी की आवश्यकता होती है। यह डेटाबेस तक सीमित नहीं होना चाहिए, लेकिन इसमें मापनीयता, अतिरेक, बैकअप, उच्च उपलब्धता, सुरक्षा, निगरानी/अवलोकन, पुनर्प्राप्ति और मिशन महत्वपूर्ण प्रणालियों पर संलग्न होने में विशेषज्ञता शामिल होनी चाहिए। कुल मिलाकर, इसे आपके डेटा की गोपनीयता को उजागर किए बिना आपकी वास्तु अंतर्दृष्टि की समझ होनी चाहिए।
आकलन या प्रारंभिक जांच
कॉन्फ़िगरेशन या सेटअप फ़ाइलें, कर्नेल ट्यूनिंग, ऑटोमेशन स्क्रिप्ट सहित अपने डेटा का बैकअप लेना गुमनामी में नहीं छोड़ा जाएगा। यह एक स्पष्ट कार्य है, लेकिन इससे पहले कि आप माइग्रेट करें, हमेशा पहले सब कुछ सुरक्षित करें , विशेष रूप से किसी भिन्न प्लेटफ़ॉर्म पर जाते समय।
आपको यह भी आकलन करना चाहिए कि आपके एप्लिकेशन अप-टू-डेट सॉफ़्टवेयर इंजीनियरिंग सम्मेलनों का पालन कर रहे हैं और सुनिश्चित करें कि वे प्लेटफ़ॉर्म अज्ञेयवादी हैं। ये अभ्यास आपके लाभ के लिए हो सकते हैं, खासकर जब एक अलग डेटाबेस प्लेटफॉर्म पर जा रहे हों, जैसे कि MySQL के लिए Percona सर्वर।
ध्यान दें कि पेरकोना सर्वर के लिए आवश्यक ऑपरेटिंग सिस्टम एक शो-स्टॉपर हो सकता है यदि आपका एप्लिकेशन और डेटाबेस विंडोज सर्वर पर चलता है और एप्लिकेशन विंडोज पर निर्भर है; तो यह बहुत काम हो सकता है! हमेशा याद रखें कि पेरकोना सर्वर एक अलग प्लेटफॉर्म पर है:पूर्णता की गारंटी नहीं हो सकती है लेकिन इसे काफी करीब से हासिल किया जा सकता है।
अंत में, सुनिश्चित करें कि लक्षित हार्डवेयर को पेरकोना की सर्वर आवश्यकताओं के साथ व्यावहारिक रूप से काम करने के लिए डिज़ाइन किया गया है या यह कम से कम बग-मुक्त है (यहां देखें)। अपने Oracle डेटाबेस को मज़बूती से बंद करने से पहले आप पहले Percona सर्वर के साथ तनाव परीक्षण पर विचार कर सकते हैं।
आपको क्या पता होना चाहिए
यह ध्यान देने योग्य है कि Percona Server / MySQL में, आप कई डेटाबेस बना सकते हैं जबकि Oracle MySQL के समान कार्यक्षमता के साथ नहीं आता है।
MySQL में, भौतिक रूप से, एक स्कीमा एक डेटाबेस का पर्याय है। आप MySQL SQL सिंटैक्स में DATABASE के बजाय SCHEMA कीवर्ड को प्रतिस्थापित कर सकते हैं, उदाहरण के लिए SCHEMA बनाएं का उपयोग करके डेटाबेस बनाने के बजाय; जबकि Oracle में इसका एक भेद है। एक स्कीमा एक डेटाबेस के केवल एक भाग का प्रतिनिधित्व करता है:एक एकल उपयोगकर्ता के स्वामित्व वाली तालिकाएँ और अन्य ऑब्जेक्ट। आम तौर पर, उदाहरण और डेटाबेस के बीच एक-से-एक संबंध होता है।
उदाहरण के लिए, Oracle (जैसे रियल एप्लिकेशन क्लस्टर्स या RAC) के समतुल्य प्रतिकृति सेटअप में, आपके पास एकल डेटाबेस तक पहुँचने के लिए आपके कई उदाहरण हैं। यह आपको कई सर्वरों पर Oracle शुरू करने देता है, लेकिन सभी एक ही डेटा तक पहुँच प्राप्त करते हैं। हालाँकि, MySQL में, आप अपने कई उदाहरणों से कई डेटाबेस तक पहुँच की अनुमति दे सकते हैं और यह भी फ़िल्टर कर सकते हैं कि आप कौन से डेटाबेस/स्कीमा को MySQL नोड में दोहरा सकते हैं।
हमारे पिछले ब्लॉग में से एक के संदर्भ में, इंटरनेट पर उपलब्ध उपलब्ध टूल के साथ अपने डेटाबेस को परिवर्तित करने की बात करते समय भी यही सिद्धांत लागू होता है।
ऐसा कोई उपकरण नहीं है जो 100% Oracle डेटाबेस को Percona Server/MySQL में परिवर्तित कर सके; इसमें से कुछ मैनुअल काम होंगे।
उन चीज़ों के लिए निम्न अनुभागों को चेकआउट करें जिनके बारे में आपको तब पता होना चाहिए जब माइग्रेशन और तार्किक SQL परिणाम की पुष्टि करने की बात आती है।
डेटा प्रकार मैपिंग
MySQL / Percona सर्वर में कई डेटा-प्रकार हैं जो लगभग Oracle के समान हैं लेकिन Oracle की तुलना में उतने समृद्ध नहीं हैं। लेकिन MySQL के 5.7.8 संस्करण के आने के बाद से, यह मूल JSON डेटा प्रकार के लिए समर्थन करता है।
नीचे इसका डेटा-प्रकार समकक्ष प्रतिनिधित्व है (सारणीबद्ध प्रतिनिधित्व यहां से लिया गया है):
<थ>ओरेकल <वें colspan="3">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 | रॉ (एन) | वैरिएबल-लेंथ बाइनरी स्ट्रिंग, 1 n ⇐ 255 | BINARY(n) | |
27 | रॉ (एन) | वैरिएबल-लेंथ बाइनरी स्ट्रिंग, 256 n ⇐ 2000 | VARBINARY(n) | |
28 | असली | अस्थायी बिंदु संख्या | डबल | |
29 | ROWID | भौतिक पंक्ति का पता | CHAR(10) | |
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 |
डेटा प्रकार विशेषताएँ और विकल्प:
ओरेकल | MySQL |
BYTE और CHAR स्तंभ आकार शब्दार्थ | आकार हमेशा वर्णों में होता है |
लेन-देन
Percona सर्वर लेनदेन संबंधी डेटा को संभालने के लिए अपने प्राथमिक भंडारण इंजन के रूप में XtraDB (InnoDB का एक उन्नत संस्करण) का उपयोग करता है; हालांकि विभिन्न स्टोरेज इंजन TokuDB (बहिष्कृत) और MyRocks स्टोरेज इंजन जैसे लेनदेन को संभालने के लिए एक वैकल्पिक विकल्प हो सकते हैं।
जबकि XtraDB के साथ MyRocks का उपयोग या खोज करने के फायदे और लाभ हैं, बाद वाला अधिक मजबूत और वास्तविक स्टोरेज इंजन है जिसका उपयोग Percona सर्वर कर रहा है और डिफ़ॉल्ट रूप से सक्षम है, इसलिए हम इस स्टोरेज इंजन को माइग्रेशन के आधार के रूप में उपयोग करेंगे। लेन-देन के लिए।
डिफ़ॉल्ट रूप से, Percona Server / MySQL में ऑटोकॉमिट वैरिएबल को ON पर सेट किया गया है, जिसका अर्थ है कि परिवर्तनों को अनदेखा करने या SAVEPOINT का उपयोग करने का लाभ लेने के लिए आपको रोलबैक का लाभ उठाने के लिए ट्रांजेक्शनल स्टेटमेंट को स्पष्ट रूप से हैंडल करना होगा।
यह मूल रूप से वही अवधारणा है जिसका उपयोग Oracle कमिट, रोलबैक और सेवपॉइंट के संदर्भ में करता है।
स्पष्ट लेन-देन के लिए, इसका मतलब है कि आपको ट्रांज़ेक्शन प्रारंभ करें/BEGIN; <एसक्यूएल स्टेटमेंट्स>; कमिट; वाक्य रचना।
अन्यथा, अगर आपको ऑटोकॉमिट को अक्षम करना है, तो आपको अपने बयानों के लिए हर समय स्पष्ट रूप से COMMIT करना होगा, जिसके लिए आपके डेटा में बदलाव की आवश्यकता है।
दोहरी तालिका
MySQL में Oracle के साथ दोहरी संगतता है जो एक डमी टेबल, अर्थात् DUAL का उपयोग करके डेटाबेस की संगतता के लिए है।
यह Oracle के DUAL के उपयोग के अनुकूल है, इसलिए आपके एप्लिकेशन में DUAL का उपयोग करने वाले किसी भी मौजूदा स्टेटमेंट को Percona सर्वर में माइग्रेशन पर किसी बदलाव की आवश्यकता नहीं हो सकती है।
Oracle FROM क्लॉज प्रत्येक SELECT स्टेटमेंट के लिए अनिवार्य है, इसलिए Oracle डेटाबेस SELECT स्टेटमेंट के लिए DUAL टेबल का उपयोग करता है जहाँ टेबल नाम की आवश्यकता नहीं होती है।
MySQL में, FROM क्लॉज अनिवार्य नहीं है इसलिए DUAL टेबल जरूरी नहीं है। हालाँकि, DUAL तालिका ठीक उसी तरह काम नहीं करती है जैसी वह Oracle के लिए करती है, लेकिन Percona सर्वर में साधारण SELECT के लिए, यह ठीक है।
नीचे दिया गया उदाहरण देखें:
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
लेकिन MySQL में:
mysql> DESC DUAL;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DUAL' at line 1
mysql> SELECT CURRENT_TIMESTAMP FROM DUAL;
+---------------------+
| CURRENT_TIMESTAMP |
+---------------------+
| 2019-02-15 20:20:28 |
+---------------------+
1 row in set (0.00 sec)
नोट:DESC DUAL सिंटैक्स MySQL में काम नहीं करता है और परिणाम भी भिन्न होते हैं क्योंकि MySQL में CURRENT_TIMESTAMP (TIMESTAMP डेटा प्रकार का उपयोग करता है) में टाइमज़ोन शामिल नहीं है।
SYSDATE
Oracle का SYSDATE फ़ंक्शन MySQL में लगभग समान है।
MySQL दिनांक और समय देता है और यह एक ऐसा फ़ंक्शन है जिसके लिए () की आवश्यकता होती है (बिना किसी तर्क के बंद और खुला कोष्ठक। इसे नीचे प्रदर्शित करने के लिए, यहाँ SYSDATE का उपयोग करने पर Oracle और MySQL है।
ओरेकल में, सादे SYSDATE का उपयोग करके बिना समय के दिन की तारीख लौटा दी जाती है। लेकिन समय और दिनांक प्राप्त करने के लिए, दिनांक समय को उसके वांछित प्रारूप में बदलने के लिए TO_CHAR का उपयोग करें; जबकि MySQL में, आपको दिनांक और समय प्राप्त करने के लिए इसकी आवश्यकता नहीं हो सकती है क्योंकि यह दोनों लौटाता है।
नीचे उदाहरण देखें।
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
लेकिन MySQL में:
mysql> SELECT SYSDATE() FROM DUAL;
+---------------------+
| SYSDATE() |
+---------------------+
| 2019-02-15 20:37:36 |
+---------------------+
1 row in set (0.00 sec)
यदि आप दिनांक को प्रारूपित करना चाहते हैं, तो MySQL में DATE_FORMAT() फ़ंक्शन है।
अधिक जानकारी के लिए आप MySQL दिनांक और समय दस्तावेज़ देख सकते हैं।
TO_DATE
MySQL में Oracle का TO_DATE समतुल्य STR_TO_DATE() फ़ंक्शन है।
यह लगभग Oracle के समान है:यह DATE डेटा प्रकार लौटाता है, जबकि MySQL में यह DATETIME डेटा प्रकार देता है।
ओरेकल:
SQL> SELECT TO_DATE ('20190218121212','yyyymmddhh24miss') as "NOW" FROM DUAL;
NOW
-------------------------
18-FEB-19
MySQL:
mysql> 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.00 sec)
समानार्थी
MySQL में, Oracle में SYNONYM के लिए ऐसा कोई समर्थन नहीं है और न ही कोई समानता है।
MySQL VIEW का उपयोग करके एक संभावित विकल्प संभव हो सकता है।
हालांकि SYNONYM का उपयोग दूरस्थ तालिका का उपनाम बनाने के लिए किया जा सकता है,
उदा.
CREATE PUBLIC SYNONYM emp_table FOR [email protected]
MySQL में, आप फ़ेडरेटेड स्टोरेज इंजन का उपयोग करने का लाभ उठा सकते हैं।
उदा.
CREATE TABLE hr_employees (
id INT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL DEFAULT '',
other INT(20) NOT NULL DEFAULT '0',
PRIMARY KEY (id),
INDEX name (name),
INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8mb4
CONNECTION='mysql://[email protected]_host:9306/federated/test_table';
या आप CREATE SERVER सिंटैक्स के साथ प्रक्रिया को सरल बना सकते हैं, ताकि किसी दूरस्थ तालिका तक पहुँचने के लिए आपके SYNONYM के रूप में कार्य करने वाली तालिका बनाते समय, यह आसान हो जाए। इस बारे में अधिक जानकारी के लिए दस्तावेज़ीकरण देखें।
खाली स्ट्रिंग और NULL का व्यवहार
ध्यान दें कि Percona Server/MySQL में, खाली स्ट्रिंग NULL नहीं है जबकि Oracle रिक्त स्ट्रिंग को शून्य मान के रूप में मानता है।
Oracle में:
SQL> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
Nul
---
Yes
MySQL में:
mysql> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
+-----------+
| Null Eval |
+-----------+
| No |
+-----------+
1 row in set (0.00 sec)
अनुक्रम
MySQL में, Oracle SEQUENCE के लिए जो करता है, उसका कोई सटीक दृष्टिकोण नहीं है।
हालांकि कुछ पोस्ट हैं जो इस दृष्टिकोण की कार्यक्षमता का अनुकरण कर रही हैं, आप LAST_INSERT_ID() का उपयोग करके अगली कुंजी प्राप्त करने का प्रयास करने में सक्षम हो सकते हैं, जब तक कि आपकी तालिका का क्लस्टर इंडेक्स, प्राथमिक कुंजी, <<के साथ परिभाषित किया गया है, क्या कुछ गुम है?>>पी>
चरित्र स्ट्रिंग फ़ंक्शन
Oracle के विपरीत, MySQL / Percona सर्वर में मुट्ठी भर स्ट्रिंग फ़ंक्शन होते हैं लेकिन डेटाबेस में अंतर्निहित कई उपयोगी फ़ंक्शन नहीं होते हैं।
यहां एक-एक करके इस पर चर्चा करना बहुत लंबा होगा, लेकिन आप MySQL से दस्तावेज़ीकरण की जांच कर सकते हैं और इसकी तुलना Oracle के स्ट्रिंग फ़ंक्शंस से कर सकते हैं।
डीएमएल स्टेटमेंट
Oracle से इन्सर्ट/अपडेट/डिलीट स्टेटमेंट्स MySQL में सर्वांगसम हैं।
Oracle का सभी डालें/पहले डालें MySQL में समर्थित नहीं है।
अन्यथा, आपको अपने 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.
2 पंक्तियाँ बनाई गईं।
लेकिन MySQL में, आपको एक-एक करके इन्सर्ट चलाना होगा:
mysql> INSERT INTO CUSTOMERS (customer_id, customer_name, city) VALUES (1000, 'Jase Alagaban', 'Davao City');
Query OK, 1 row affected (0.02 sec)
mysql> 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 कीवर्ड जोड़कर शर्तों का लाभ उठा सकते हैं; इस मामले में MySQL / Percona सर्वर में कोई समकक्ष विकल्प नहीं है।
इसलिए, इस पर आपका वैकल्पिक समाधान प्रक्रियाओं का उपयोग करना है।
बाहरी जोड़ "+" प्रतीक
Oracle में, बाएँ और दाएँ जॉइन के लिए + ऑपरेटर का उपयोग करना वर्तमान में MySQL में समर्थित नहीं है क्योंकि + ऑपरेटर का उपयोग केवल अंकगणितीय निर्णयों के लिए किया जाता है।
इसलिए, यदि आपके मौजूदा Oracle SQL स्टेटमेंट में + ऑपरेटर है, तो आपको इसे लेफ्ट जॉइन या राइट जॉइन से बदलना होगा।
आप MySQL के "बाहरी जुड़ाव सरलीकरण" के लिए आधिकारिक दस्तावेज देखना चाह सकते हैं।
से शुरू करें.. से जुड़ें
Oracle पदानुक्रमित प्रश्नों के लिए START WITH..CONNECT BY का उपयोग करता है।
MySQL / Percona 8.0 से शुरू होकर, पदानुक्रमित डेटा परिणाम उत्पन्न करने के लिए समर्थन है जो आसन्न सूची या नेस्टेड सेट मॉडल जैसे मॉडल का उपयोग करता है। इसे MySQL में कॉमन टेबल एक्सप्रेशन (CTE) कहा जाता है।
PostgreSQL के समान, MySQL रिकर्सिव के साथ का उपयोग करता है पदानुक्रमित प्रश्नों के लिए वाक्यविन्यास इसलिए अनुवाद करें इससे जुड़ें रिकर्सिव के साथ . में स्टेटमेंट बयान।
नीचे देखें कि यह ORACLE और MySQL / Percona सर्वर से कैसे भिन्न है।
Oracle में:
SELECT cp.id, cp.title, CONCAT(c2.title, ' > ' || cp.title) as path
FROM category cp INNER JOIN category c2
ON cp.parent_id = c2.id
WHERE cp.parent_id IS NOT NULL
START WITH cp.id >= 1
CONNECT BY NOCYCLE PRIOR c2.id=cp.parent_id;
और MySQL में:
WITH RECURSIVE category_path (id, title, path) AS
(
SELECT id, title, title as path
FROM category
WHERE parent_id IS NULL
UNION ALL
SELECT c.id, c.title, CONCAT(cp.path, ' > ', c.title)
FROM category_path AS cp JOIN category AS c
ON cp.id = c.parent_id
)
SELECT * FROM category_path
ORDER BY path;
MySQL / Percona में PL/SQL?
MySQL / Percona RDBMS का तरीका Oracle के PL/SQL से अलग है।
MySQL संग्रहीत कार्यविधियों या संग्रहीत कार्यों का उपयोग करता है, जो PL/SQL के समान है और BEGIN..END का उपयोग करके सिंटैक्स का उपयोग करता है। वाक्य रचना।
ओरेकल के पीएल/एसक्यूएल को सर्वर में लोड होने पर निष्पादन से पहले संकलित किया जाता है, जबकि MySQL को संकलित किया जाता है और कैश में संग्रहीत किया जाता है।
आप अपने PL/SQL को MySQL में कनवर्ट करने के लिए संदर्भ मार्गदर्शिका के रूप में इस दस्तावेज़ को चेकआउट करना चाह सकते हैं।
माइग्रेशन टूल
मैंने ऐसे किसी भी टूल के लिए कुछ शोध किया जो माइग्रेशन के लिए वास्तविक मानक हो सकता है लेकिन मुझे कोई अच्छा जवाब नहीं मिला।
हालांकि, मुझे स्क्लाइन मिलीं और यह सरल लेकिन आशाजनक दिखती है।
हालांकि मैंने इसमें गहराई से नहीं जाना है, वेबसाइट मुट्ठी भर अंतर्दृष्टि प्रदान करती है, जो आपको Oracle से MySQL/Percona सर्वर पर माइग्रेट करने में मदद कर सकती है। इस और यह जैसे भुगतान किए गए टूल भी हैं।
मैंने जीथब के माध्यम से भी खोज की है लेकिन समस्या के समाधान के रूप में और अधिक आकर्षक नहीं पाया। इसलिए, यदि आप Oracle और Amazon से माइग्रेट करने का लक्ष्य बना रहे हैं, तो उनके पास AWS स्कीमा रूपांतरण टूल है, जिसके लिए Oracle से MySQL में माइग्रेट करना समर्थित है।
कुल मिलाकर, माइग्रेशन आसान काम नहीं होने का मुख्य कारण यह है कि Oracle RDBMS एक ऐसा जानवर है जिसमें बहुत सारी सुविधाएँ हैं जो Percona Server / MySQL या MariaDB RDBMS में अभी भी नहीं हैं।
किसी भी तरह, अगर आपको Oracle से MySQL / Percona सर्वर पर माइग्रेट करने के लिए उपयोगी और फायदेमंद कोई उपकरण मिलता है या आपको पता है, तो कृपया इस ब्लॉग पर एक टिप्पणी छोड़ दें!
परीक्षण
आपकी माइग्रेशन योजना के हिस्से के रूप में, परीक्षण एक महत्वपूर्ण कार्य है जो बहुत महत्वपूर्ण भूमिका निभाता है और माइग्रेशन के संबंध में आपके निर्णय को प्रभावित करता है।
उपकरण dbdeployer (MySQL सैंडबॉक्स का एक पोर्ट) एक बहुत ही उपयोगी उपकरण है जिसका आप लाभ उठा सकते हैं। यदि आपका उद्देश्य पहले RDBMS प्लेटफ़ॉर्म को आज़माना और परीक्षण करना है, तो पूरे स्टैक को सेट करने के बजाय, अलग-अलग तरीकों को आज़माना और उनका परीक्षण करना आपके लिए बहुत आसान है और आपका समय बचाता है।
अपने SQL संग्रहीत रूटीन (फ़ंक्शंस या प्रक्रियाओं), ट्रिगर्स, ईवेंट्स के परीक्षण के लिए, मेरा सुझाव है कि आप इन टूल mytap या Google के यूनिट टेस्टिंग फ्रेमवर्क का उपयोग करें।
Percona कई टूल भी प्रदान करता है जो उनकी वेबसाइट पर डाउनलोड के लिए उपलब्ध हैं। यहां परकोना टूलकिट चेकआउट करें। आप विशेष रूप से परीक्षण और उत्पादन-उपयोग कार्यों के लिए अपनी आवश्यकताओं के अनुसार उपकरण चुन सकते हैं।
कुल मिलाकर, अपने MySQL सर्वर के लिए परीक्षण करते समय जिन बातों को आपको अपने दिशानिर्देशों के रूप में ध्यान में रखने की आवश्यकता है वे हैं:
- इंस्टॉलेशन के बाद, आपको कुछ ट्यूनिंग करने पर विचार करना होगा। मदद के लिए इस Percona ब्लॉग को चेक आउट करें।
- अपने वर्तमान नोड पर अपने कॉन्फ़िगरेशन सेटअप के लिए कुछ बेंचमार्क और स्ट्रेस-लोड परीक्षण करें। चेकआउट mysqlslap और sysbench जो इसमें आपकी मदद कर सकता है। हमारे ब्लॉग को भी देखें "SysBench का उपयोग करके MySQL और MariaDB के प्रदर्शन को बेंचमार्क कैसे करें"।
- अपने डीडीएल की जांच करें कि क्या वे सही ढंग से परिभाषित हैं जैसे डेटा-प्रकार, बाधाएं, क्लस्टर और सेकेंडरी इंडेक्स, या विभाजन, यदि आपके पास कोई है।
- अपने डीएमएल की जांच करें, खासकर अगर सिंटैक्स सही है और उम्मीद के मुताबिक डेटा को सही तरीके से सहेज रहे हैं।
- अपने संग्रहीत दिनचर्या, ईवेंट देखें, यह सुनिश्चित करने के लिए ट्रिगर करें कि वे अपेक्षित परिणाम चलाते/लौटते हैं।
- सत्यापित करें कि चल रही आपकी क्वेरी प्रदर्शनकारी हैं। मेरा सुझाव है कि आप ओपन-सोर्स टूल का लाभ उठाएं या हमारे ClusterControl उत्पाद को आजमाएं। यह विशेष रूप से आपके MySQL/Percona सर्वर की निगरानी/अवलोकन क्षमता प्रदान करता है। आप अपने प्रश्नों और इसकी क्वेरी योजना की निगरानी के लिए यहां क्लस्टरकंट्रोल का उपयोग कर सकते हैं ताकि यह सुनिश्चित हो सके कि वे प्रदर्शनकारी हैं।