चाहे डेटाबेस को माइग्रेट करना हो या Oracle से PostgreSQL में केवल एक प्रकार के डेटाबेस ज्ञान के साथ, दो डेटाबेस सिस्टम के बीच अंतर के बारे में जानने के लिए कुछ चीजें हैं।
PostgreSQL दुनिया का सबसे उन्नत ओपन सोर्स डेटाबेस है। PostgreSQL समुदाय बहुत मजबूत है और वे मौजूदा PostgreSQL सुविधाओं में लगातार सुधार कर रहे हैं और नई सुविधाएँ भी जोड़ रहे हैं। Db-engines.com के अनुसार, PostgreSQL वर्ष 2017 का DBMS है।
Oracle और PostgreSQL में कुछ असंगतियाँ हैं। कुछ कार्यों का व्यवहार Oracle और PostgreSQL के बीच भिन्न होता है।
Oracle से PostgreSQL में माइग्रेट क्यों करें
- लागत:जैसा कि आप जानते हैं कि Oracle लाइसेंस की लागत बहुत महंगी है और कुछ सुविधाओं जैसे विभाजन और उच्च उपलब्धता के लिए अतिरिक्त लागत है। तो कुल मिलाकर यह बहुत महंगा है।
- एडब्ल्यूएस जैसे सार्वजनिक क्लाउड प्रदाताओं से लचीला ओपन सोर्स लाइसेंसिंग और आसान उपलब्धता।
- प्रदर्शन को बेहतर बनाने के लिए ओपन सोर्स ऐड-ऑन का लाभ उठाएं।
प्रारंभिक जांच
जैसा कि आप जानते हैं कि Oracle से PostgreSQL में माइग्रेशन एक महंगा और समय लेने वाला कार्य है। यह समझना जरूरी है कि किस हिस्से में माइग्रेट करना है। उन वस्तुओं को स्थानांतरित करने के लिए समय बर्बाद न करें जिनकी अब आवश्यकता नहीं है। साथ ही, जांचें कि क्या किसी ऐतिहासिक डेटा की आवश्यकता है या नहीं। ऐसे डेटा को दोहराने में समय बर्बाद न करें जिसकी आपको आवश्यकता नहीं है, उदाहरण के लिए बैकअप डेटा और पिछले रखरखाव से अस्थायी तालिका।
माइग्रेशन आकलन
प्रारंभिक जांच के बाद, माइग्रेशन का पहला चरण एप्लिकेशन और डेटाबेस ऑब्जेक्ट का विश्लेषण करना, दोनों डेटाबेस के बीच असंगतताओं का पता लगाना और माइग्रेशन के लिए आवश्यक समय और लागत का अनुमान लगाना है।
ओरा2पीजी टूल माइग्रेशन आकलन के लिए बहुत मददगार है। यह Oracle डेटाबेस से जुड़ता है, इसे स्वचालित रूप से स्कैन करता है और डेटा निकालता है, डेटाबेस माइग्रेशन रिपोर्ट तैयार करता है। आप Ora2pg में एक नमूना रिपोर्ट देख सकते हैं।
आपको क्या पता होना चाहिए
Oracle और PostgreSQL के बीच अंतर को समझें और किसी भी टूल का उपयोग करके इसे रूपांतरित करें। ऐसा कोई उपकरण नहीं है जो 100% Oracle डेटाबेस को PostgreSQL में परिवर्तित कर सके, कुछ मैन्युअल परिवर्तनों की आवश्यकता है। माइग्रेट करने से पहले कृपया कुछ महत्वपूर्ण अंतरों की जाँच करें जिन्हें आपको जानना चाहिए।
डेटा प्रकार मैपिंग
PostgreSQL में डेटा प्रकारों का समृद्ध सेट है। Oracle और PostgreSQL के बीच कुछ महत्वपूर्ण डेटा प्रकार रूपांतरण इस प्रकार हैं।
Oracle | PostgreSQL | टिप्पणी |
---|---|---|
VARCHAR2(n) | VARCHAR(n) | Oracle में 'n' बाइट्स की संख्या है जबकि PostgreSQL में 'n' वर्णों की संख्या है |
CHAR(n) | CHAR(n) | Oracle में 'n' बाइट्स की संख्या है जबकि PostgreSQL में 'n' वर्णों की संख्या है |
NUMBER(n,m) | NUMERIC(n,m) | NUMBER प्रकार को NUMERIC में बदला जा सकता है लेकिन यदि आप SMALLINT, INT और BIGINT का उपयोग करते हैं तो प्रदर्शन बेहतर होगा। |
NUMBER(4) | स्मालिंट | |
NUMBER(9) | आईएनटी | |
NUMBER(18) | बिगिनट | |
NUMBER(n) | NUMERIC(n) | NUMERIC(n) ,अगर n>=19 |
दिनांक | टाइमस्टैम्प(0) | दोनों डेटाबेस में DATE टाइप होता है लेकिन Oracle DATE टाइप रिटर्न डेट और टाइम जबकि PostgreSQL DATE टाइप रिटर्न केवल डेट नो टाइम। |
स्थानीय समय क्षेत्र के साथ टाइमस्टैम्प | TIMESTAMPTZ | PostgreSQL प्रकार Timestamptz (समय क्षेत्र के साथ टाइमस्टैम्प) समय क्षेत्र के साथ Oracle टाइमस्टैम्प से अलग है। यह स्थानीय समय क्षेत्र के साथ Oracle के टाइमस्टैम्प के बराबर है, लेकिन यह छोटा अंतर प्रदर्शन समस्या या एप्लिकेशन बग का कारण बन सकता है। |
सीएलओबी | पाठ | PostgreSQL TEXT टाइप 1 GB तक टेक्स्ट स्टोर कर सकता है। |
BLOB RAW(n) | BYTEA(1 GB सीमा) बड़ी वस्तु | Oracle में, BLOB डेटाटाइप डेटाबेस में असंरचित बाइनरी डेटा को स्टोर करता है। BLOB प्रकार 128 टेराबाइट तक बाइनरी डेटा स्टोर कर सकता है। PostgreSQL BYTEA बाइनरी डेटा स्टोर करता है लेकिन केवल 1 जीबी तक। यदि डेटा 1 जीबी से ऊपर है तो बड़ी वस्तु का उपयोग करें। |
लेन-देन
Oracle डेटाबेस हमेशा लेनदेन का उपयोग करता है लेकिन PostgreSQL में आपको उसे सक्रिय करना होगा। Oracle में, लेन-देन किसी भी स्टेटमेंट को निष्पादित करते समय शुरू होता है और COMMIT स्टेटमेंट के निष्पादित होने पर समाप्त होता है। PostgreSQL में, लेन-देन शुरू होता है जब BEGIN निष्पादित होता है और COMMIT कथन निष्पादित होने पर समाप्त होता है। यहां तक कि आइसोलेशन लेवल में भी कोई समस्या नहीं है। PostgreSQL डेटाबेस उन सभी अलगाव स्तरों को जानता है जो Oracle डेटाबेस जानता है। PostgreSQL का डिफ़ॉल्ट आइसोलेशन स्तर रीड कमिटेड है।
उदाहरण:
ओरेकल:
DELETE FROM table_name WHERE id = 120;
COMMIT;
पोस्टग्रेएसक्यूएल:
BEGIN;
DELETE FROM table_name WHERE id = 120;
COMMIT;
दोहरी तालिका
Oracle FROM क्लॉज में प्रत्येक SELECT स्टेटमेंट के लिए अनिवार्य है, इसलिए Oracle डेटाबेस SELECT स्टेटमेंट के लिए DUAL टेबल का उपयोग करता है जहाँ टेबल नाम की आवश्यकता नहीं होती है। PostgreSQL में, FROM क्लॉज अनिवार्य नहीं है इसलिए DUAL टेबल आवश्यक नहीं है। पोर्टिंग समस्या को खत्म करने के लिए PostgreSQL में दोहरी तालिका बनाई जा सकती है। Orafce टूल ने इसे लागू किया है ताकि आप Orafce का भी उपयोग कर सकें।
उदाहरण:
postgres=# SELECT CURRENT_TIMESTAMP FROM DUAL;
ERROR: relation "dual" does not exist
LINE 1: SELECT CURRENT_TIMESTAMP FROM DUAL;
^
postgres=# SELECT CURRENT_TIMESTAMP;
current_timestamp
-------------------------------
2018-03-16 09:36:01.205925+00
(1 row)
Orafce मॉड्यूल स्थापित करने के बाद:
postgres=# SELECT CURRENT_TIMESTAMP FROM DUAL;
current_timestamp
-------------------------------
2018-03-16 09:36:01.205925+00
(1 row)
SYSDATE
Oracle का SYSDATE फ़ंक्शन दिनांक और समय देता है। अलग-अलग जगहों पर SYSDATE फंक्शन का व्यवहार अलग-अलग होता है। PostgreSQL में SYSDATE फ़ंक्शन के अनुरूप कोई फ़ंक्शन नहीं है। PostgreSQL में दिनांक और समय प्राप्त करने के लिए कई तरीके हैं और यह आवेदन के उद्देश्य पर आधारित है।
समय पुनर्प्राप्ति विधि | उपयोग किया जाने वाला फ़ंक्शन |
---|---|
SQL प्रारंभ समय | Statement_timestamp() |
लेन-देन शुरू होने का समय | अब () या
Transaction_timestamp() |
कार्य के लागू होने का समय | Clock_timestamp() |
नीचे दिए गए उदाहरण में, घड़ी_टाइमस्टैम्प () वास्तविक फ़ंक्शन के निष्पादित होने का समय देता है और अन्य स्टेटमेंट_टाइमस्टैम्प () उस समय को लौटाता है जब SQL स्टेटमेंट ने इसका निष्पादन शुरू किया था।
postgres=# SELECT now(), statement_timestamp(), current_timestamp, transaction_timestamp(), clock_timestamp();
now | statement_timestamp | current_timestamp | transaction_timestamp | clock_timestamp
-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------
2018-03-16 09:27:56.163154+00 | 2018-03-16 09:27:56.163154+00 | 2018-03-16 09:27:56.163154+00 | 2018-03-16 09:27:56.163154+00 | 2018-03-16 09:27:56.163281+00
(1 row)
TO_DATE(दो तर्क)
Oracle का TO_DATE फ़ंक्शन DATE प्रकार मान (वर्ष, महीना, दिन, घंटा, मिनट, दूसरा) लौटाता है जबकि PostgreSQL का TO_DATE (दो_आर्ग्यूमेंट) DATE प्रकार मान (वर्ष, महीना, दिन) लौटाता है।
इस असंगति का समाधान TO_DATE () को TO_TIMESTAMP () में बदलना है। यदि आप Orafce टूल का उपयोग करते हैं तो कुछ भी बदलने की आवश्यकता नहीं है क्योंकि Orafce ने इस फ़ंक्शन को लागू किया है इसलिए हमें Oracle के समान परिणाम मिलते हैं।
ओरेकल:
SELECT TO_DATE ('20180314121212','yyyymmddhh24miss') FROM dual;
पोस्टग्रेएसक्यूएल:
SELECT TO_TIMESTAMP ('20180314121212','yyyymmddhh24miss')::TIMESTAMP(0);
समानार्थी
PostgreSQL में SYNONYM बनाना समर्थित नहीं है। Oracle CREATE SYNONYM में दूरस्थ वस्तुओं तक पहुँचने के लिए उपयोग किया जाता है जबकि PostgreSQL में हम दूरस्थ परिभाषा को शामिल करने के लिए SET search_path का उपयोग कर सकते हैं।
ओरेकल:
CREATE SYNONYM abc.table_name FOR pqr.table_name;
पोस्टग्रेएसक्यूएल:
SET search_path TO 'abc.table_name';
खाली स्ट्रिंग और NULL का व्यवहार
Oracle में, स्ट्रिंग संदर्भ में रिक्त स्ट्रिंग्स और NULL मान समान हैं। परिणाम के रूप में NULL और string का संयोजन स्ट्रिंग प्राप्त करता है। PostgreSQL में इस मामले में संयोजन परिणाम शून्य है। Oracle में IS NULL ऑपरेटर का उपयोग यह जांचने के लिए किया जाता है कि स्ट्रिंग खाली है या नहीं, लेकिन PostgreSQL में परिणाम खाली स्ट्रिंग के लिए FALSE और NULL के लिए TRUE है।
अनुक्रम
Oracle और PostgreSQL में अनुक्रम के सिंटैक्स में थोड़ा अंतर है।
ओरेकल:
Sequence_name.nextval
पोस्टग्रेएसक्यूएल:
Nextval(‘sequence_name’)
इस सिंटैक्स को बदलने के लिए आप एक स्क्रिप्ट बना सकते हैं या आप इसे मैन्युअल रूप से बदल सकते हैं।
सबस्ट्र
Oracle और PostgreSQL में SUBSTR फ़ंक्शन का व्यवहार अलग है। SUBSTR फ़ंक्शन बिना किसी त्रुटि के PostgreSQL में काम करता है लेकिन एक अलग परिणाम देता है। यह अंतर एप्लिकेशन बग का कारण बन सकता है।
ओरेकल:
SELECT SUBSTR(‘ABC’,-1) FROM DUAL;
Returns ‘C’
पोस्टग्रेएसक्यूएल:
postgres=# SELECT SUBSTR('ABC',-1);
substr
--------
ABC
(1 row)
इसका समाधान Orafce SUBSTR फ़ंक्शन का उपयोग करना है जो PostgreSQL में Oracle के समान परिणाम देता है।
विवरण हटाएं
Oracle में, DELETE स्टेटमेंट FROM क्लॉज के बिना काम कर सकता है लेकिन PostgreSQL में यह समर्थित नहीं है। हमें मैन्युअल रूप से PostgreSQL DELETE स्टेटमेंट में FROM क्लॉज जोड़ने की जरूरत है।
ओरेकल:
DELETE table_name WHERE column_name = 'Col_value';
पोस्टग्रेएसक्यूएल:
DELETE FROM table_name WHERE column_name = 'Col_value';
बाहरी युग्मन +
Oracle बाएँ और दाएँ जुड़ने के लिए + ऑपरेटर का उपयोग करता है लेकिन PostgreSQL इसका उपयोग नहीं करता है।
ओरेकल:
SELECT a1.name1, a2.name2
FROM a1, a2
WHERE a1.code = a2.code (+);
पोस्टग्रेएसक्यूएल:
SELECT a1.name1, a2.name2
FROM a1
LEFT OUTER JOIN a2 ON a1.code = a2.code;
से शुरू करें.. से जुड़ें
Oracle पदानुक्रमित प्रश्नों के लिए START with..CONNECT BY का उपयोग करता है। PostgreSQL START with..CONNECT BY कथन का समर्थन नहीं करता है। PostgreSQL में पदानुक्रमित प्रश्नों के लिए RECURSIVE के साथ है इसलिए CONNECT BY कथन का पुनरावर्ती कथन के साथ अनुवाद करें।
ओरेकल:
SELECT
restaurant_name,
city_name
FROM
restaurants rs
START WITH rs.city_name = 'TOKYO'
CONNECT BY PRIOR rs.restaurant_name = rs.city_name;
पोस्टग्रेएसक्यूएल:
WITH RECURSIVE tmp AS (SELECT restaurant_name, city_name
FROM restaurants
WHERE city_name = 'TOKYO'
UNION
SELECT m.restaurant_name, m.city_name
FROM restaurants m
JOIN tmp ON tmp.restaurant_name = m.city_name)
SELECT restaurant_name, city_name FROM tmp;
PLSQL से PLPGSQL रूपांतरण
PostgreSQL की PL/pgSQL भाषा कई पहलुओं में Oracle की PL/SQL भाषा के समान है। यह एक ब्लॉक-संरचित, अनिवार्य भाषा है, और सभी चर घोषित किए जाने हैं। दोनों डेटाबेस में असाइनमेंट, लूप, कंडीशन समान हैं।
Oracle के PL/SQL से PostgreSQL के PL/pgSQL में पोर्ट करते समय आपको मुख्य अंतरों को ध्यान में रखना चाहिए
आज श्वेतपत्र डाउनलोड करें क्लस्टरकंट्रोल के साथ पोस्टग्रेएसक्यूएल प्रबंधन और स्वचालन इस बारे में जानें कि पोस्टग्रेएसक्यूएल को तैनात करने, मॉनिटर करने, प्रबंधित करने और स्केल करने के लिए आपको क्या जानना चाहिए। श्वेतपत्र डाउनलोड करेंमाइग्रेशन टूल
कुछ उपकरण हैं जो Oracle से PostgreSQL प्रवास के लिए बहुत सहायक हैं। आप एक एक्सटेंशन के रूप में अपना टूल भी बना सकते हैं और इसे PostgreSQL के अंदर उपयोग कर सकते हैं।
ओराफस
Oracle संगत फ़ंक्शन, डेटा प्रकार और पैकेज का उपयोग PostgreSQL में किया जा सकता है। यह बीएसडी लाइसेंस वाला एक ओपन सोर्स टूल है, इसलिए कोई भी इस टूल का उपयोग कर सकता है।
अधिकांश प्रमुख कार्य Orafce में शामिल हैं।
एप्लिकेशन आमतौर पर उन कार्यों का उपयोग कई घटनाओं के साथ करते हैं। आप इस टूल का उपयोग करके SQL की संशोधन लागत को कम कर सकते हैं।
सभी फ़ंक्शन और पैकेज सही तरीके से लागू किए गए हैं और इसका अच्छी तरह से परीक्षण किया गया है।
कुछ कार्य:
- डीबीएमएस_आउटपुट
- dbms_random
- utl_file - फाइल सिस्टम संबंधित कार्य
- डीबीएमएस_पाइप और डीबीएमएस_अलर्ट
- PLVdate,PLVstr,PLVchr
- Oracle संगत DATE डेटा प्रकार और ADD_MONTHS, LAST_DAY,NEXT_DAY इत्यादि जैसे कार्य।
- एनवीएल समारोह
- SUBSTR और SUBSTRB फ़ंक्शन
- VARCHAR2 और NVARCHAR2 समर्थन
- TO_DATE()
Ora2pg
Ora2Pg एक मुफ़्त टूल है जिसका उपयोग Oracle डेटाबेस को PostgreSQL संगत स्कीमा में माइग्रेट करने के लिए किया जाता है।
यह Oracle डेटाबेस से जुड़ता है, इसे स्वचालित रूप से स्कैन करता है, इसकी संरचना या डेटा निकालता है और फिर SQL स्क्रिप्ट उत्पन्न करता है जिसे आप अपने PostgreSQL डेटाबेस में लोड कर सकते हैं।
Oracle से PostgreSQL माइग्रेशन में लागत अनुमान आसान नहीं है।
Ora2Pg यह पता लगाने के लिए सभी डेटाबेस ऑब्जेक्ट्स, सभी फ़ंक्शंस और संग्रहीत प्रक्रियाओं का निरीक्षण करता है कि क्या अभी भी कुछ ऑब्जेक्ट और PL/SQL कोड हैं जिन्हें Ora2Pg द्वारा स्वचालित रूप से परिवर्तित नहीं किया जा सकता है।
यह टूल निम्नलिखित रूपांतरणों के लिए बहुत उपयोगी है:
- स्कीमा रूपांतरण
- PLSQL से PLPGSQL रूपांतरण
परीक्षण
संपूर्ण एप्लिकेशन और माइग्रेट किए गए डेटाबेस का परीक्षण करना बहुत महत्वपूर्ण है क्योंकि दोनों डेटाबेस में कुछ फ़ंक्शन समान हैं, हालांकि व्यवहार भिन्न है।
- कुछ सामान्य परिदृश्यों की जाँच करने की आवश्यकता है:
- जांचें कि सभी वस्तुएं सही ढंग से रूपांतरित हैं या नहीं।
- जांचें कि सभी डीएमएलएस ठीक से काम कर रहे हैं या नहीं।
- दोनों डेटाबेस में कुछ नमूना डेटा लोड करें और परिणाम जांचें। दोनों डेटाबेस से SQL का परिणाम समान होना चाहिए।
- DML के प्रदर्शन की जाँच करें और यदि आवश्यक हो तो इसे सुधारें।