DBA के रूप में, मैं Oracle से SQL सर्वर में संक्रमण के बारे में कैसे जाऊँगा?


32

मैं एक ओरेकल डीबीए हूं जिसमें सिबेस का अनुभव भी है।

दो RDBMS प्लेटफार्मों के बीच प्रमुख वास्तु और वैचारिक अंतर क्या हैं?

SQL सर्वर के समान उत्तर-> Oracle प्रश्न यहां सबसे अधिक उपयोग में आएगा।


3
थोड़ा विनोद (क्षमा करें यदि ओटी), क्या आप मिले हैं? dba.stackexchange.com/questions/9765/…
बोआआना

जवाबों:


49

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

भौतिक वास्तुकला

एसक्यूएल सर्वर विभिन्न चीजों को ओरेकल के लिए थोड़ा अलग तरीके से व्यवस्थित करता है और एक या दो प्रमुख अवधारणाएं हैं जिनका ओरेकल में कोई सीधा एनालॉग नहीं है।

  • एक 'डेटाबेस' SQL सर्वर में एक अलग आइटम है, जिसकी अपनी उपयोगकर्ता अनुमतियाँ, स्कीमा / नाम स्थान और भंडारण हैं। यदि आप Sybase से परिचित हैं, तो वे उत्पाद की सामान्य उत्पत्ति के कारण Sybase में डेटाबेस के समान ही काम करते हैं।

  • फाइलग्रुप लगभग टेबल स्पेस के बराबर हैं, हालांकि वे एक डेटाबेस के लिए स्थानीय हैं।

  • SQL सर्वर में डेटाबेस उपयोगकर्ता से एक स्कीमा एक अलग अवधारणा है, हालांकि उपयोगकर्ता एक डिफ़ॉल्ट स्कीमा हो सकते हैं।

  • MVCC SQL सर्वर में कुछ अलग तरह से काम करता है। यह एक अपेक्षाकृत हाल की विशेषता है, जब तक कि पुराने संस्करण पर ताले जारी नहीं किए जाते हैं तब तक एक पंक्ति की विभिन्न प्रतियों को बनाए रखना। SQL सर्वर में रोलबैक सेगमेंट के बराबर कोई प्रत्यक्ष नहीं है। यह SQL सर्वर डेटाबेस पर डिफ़ॉल्ट रूप से सक्रिय नहीं है।

  • Tempdb SQL सर्वर में बहुत अधिक उपयोग किया जाता है। सिस्टम इसे अस्थायी तालिकाओं और मध्यवर्ती सम्मिलित परिणामों के लिए उपयोग करता है। बाद में tempdb पर अधिक।

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

    अंदर और बाहर के विभाजन की अदला-बदली करने के लिए आपको सही संरचना में एक खाली मेज पर एक बाधा स्थापित करने की आवश्यकता होती है। बाधा गारंटी देती है कि विभाजन कुंजी मान उस विभाजन के लिए उपयुक्त है जिसे आप इसमें स्वैप करना चाहते हैं।

  • SQL Server में Materialized views को indexed views कहते हैं। GROUP BYखंड एक है CUBEऑपरेटर, और एक प्रश्न पुनर्लेखन सुविधा के लिए प्रलेखन alludes। हालांकि, यह कार्यक्षमता अच्छी तरह से प्रलेखित नहीं है और बहुत परिपक्व नहीं हो सकती है। YMMV।

  • SQL सर्वर स्वायत्त लेनदेन का समर्थन नहीं करता है, हालांकि यह XA या OLEDB लेनदेन प्रोटोकॉल के माध्यम से दो-चरण प्रतिबद्ध का समर्थन करता है।

  • ऑरेकल में अनुक्रमित-ऑर्डर किए गए टेबल से क्लस्टर किए गए इंडेक्स थोड़े अलग होते हैं, क्योंकि उन्हें क्लस्टर इंडेक्स में भाग लेने के लिए टेबल के सभी कॉलम की आवश्यकता नहीं होती है। वे बहुत अधिक व्यापक रूप से SQL सर्वर आर्किटेक्चर में उपयोग किए जाते हैं IOTs Oracle में हैं।

  • SQL सर्वर अनुक्रमणिका को कवर करने का समर्थन करता है, लेकिन इसमें अनुक्रमणिका शामिल नहीं होती है। बिटमैप इंडेक्स का समर्थन नहीं किया जाता है, हालांकि इसमें एक इंडेक्स चौराहा / स्टार ट्रांसफॉर्म ऑपरेटर होता है जो फैक्ट टेबल की गणना किए बिना चौराहों की गणना कर सकता है।

  • SQL सर्वर पर अनुक्रम अपेक्षाकृत हाल के अतिरिक्त हैं। परंपरागत रूप से ऑटोइन्क्रिमेंटिंग कुंजी पहचान कॉलम के माध्यम से की जाती है। आप एक पहचान कॉलम में मानों को लोड कर सकते हैं set identity_insert on

प्रोग्रामिंग

मुहावरेदार T-SQL में मुहावरेदार PL / SQL के कुछ अंतर हैं। यह अलग तरह से पर्याप्त काम करता है कि कुछ प्रतिमान अंतर अधिक गहराई से समझाते हैं।

  • T-SQL में पैकेज की कोई अवधारणा नहीं है। डेटाबेस में सभी संग्रहीत कार्यविधियाँ और फ़ंक्शंस एक सामान्य नेमस्पेस में रहते हैं, हालाँकि स्कीमा का उपयोग इसे तोड़ने के लिए किया जा सकता है, और नेमस्पेस डेटाबेस के लिए स्थानीय है।

  • अस्थायी तालिकाओं का उपयोग कैसे करें, और इसके लिए एक अनुभव प्राप्त करें SELECT INTO। टी-एसक्यूएल कोड का सामना करना बहुत दुर्लभ है जो वास्तव में एक कर्सर की आवश्यकता है; अस्थायी तालिकाओं के संचालन को उन चरणों में तोड़ने की अनुमति देता है जो सेट संचालन के साथ किए जा सकते हैं। SELECT INTOtempdb में न्यूनतम लॉग होता है, और यह उपयोगकर्ता डेटाबेस पर कुछ पुनर्प्राप्ति मोड में भी न्यूनतम रूप से लॉग इन होता है, इसलिए यह क्वेरी ऑपरेटर के रूप में तेजी से होता है जो एक मध्यवर्ती जुड़ाव परिणाम को बनाए रखता है।

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

  • सिस्टम डेटा डिक्शनरी ओरेकल के पुराने संस्करणों की तुलना में बहुत अधिक अप्रिय थी, लेकिन यह SQL सर्वर 2005 के साथ बहुत बेहतर है। हालांकि, माइक्रोसॉफ्ट द्वारा आपूर्ति किए गए टूल में एसएसएमएस एक्सप्लोरर में निर्मित बहुत अधिक आत्मनिरीक्षण सामान है, फिर भी यह हमारे लायक है। डेटा शब्दकोश के आसपास रास्ता। हालांकि ALL, यह USERऔर DBAडीबी वस्तुओं के विचारों के बीच अंतर नहीं करता है ।

  • SSMS में एक क्वेरी प्लान व्यूअर बनाया गया है।

  • T-SQL कोड में पहचानकर्ताओं को [] के साथ उद्धृत किया जा सकता है, और यदि उद्धृत किया गया है तो सभी प्रकार के बकवास हो सकते हैं। हालाँकि, यदि हम आपको एक कॉलम 'डायरेक्ट / ट्रांसफर' कहते हैं, तो हम आपकी आँतों को चीर देंगे

  • SQL सर्वर में विंडो फ़ंक्शंस (2005 IIRC के बाद से) होते हैं, इसलिए अब आप समूहों के भीतर ऑर्डरिंग, रनिंग समस और इस तरह के काम कर सकते हैं।

  • T-SQL के बराबर कोई प्रत्यक्ष नहीं है CONNECT BY, हालांकि पुनरावर्ती CTE के माध्यम से पुनरावृत्ति किया जा सकता है।

  • यदि आपको कोड लिखने की ज़रूरत है जो डेटाबेस में होप करता है (डेटाबेस के अनुसार स्कीमा के विपरीत), तो सार्वजनिक समानार्थी शब्द का उपयोग करके ऑब्जेक्ट को कुछ स्थानीय में उपनाम दें और कोड में उपनामों को देखें। यह डेटाबेस नामों पर हार्ड-कोडित निर्भरता से बचा जाता है।

  • यदि आप डेटाबेस नामों पर कठिन कोडित निर्भरता से बचते हैं, तो डेटाबेस एक ही सर्वर पर कई वातावरणों को बनाए रखना काफी आसान बना देता है।

  • कुछ चीजें, जैसे कि कस्टम कुल कार्य, केवल सीएलआर स्प्रोक्स का उपयोग करके लागू किया जा सकता है। इसके अलावा, यदि आप एक लेन-देन के संदर्भ से बचना चाहते हैं (जैसे रोलबैक-प्रूफ त्रुटि लॉगिंग के लिए एक स्वायत्त लेनदेन को नकली करना) तो आप सीएलआर स्पोक का उपयोग कर सकते हैं, क्योंकि यह वर्तमान लेनदेन संदर्भ के बाहर एक स्थानीय कनेक्शन बना सकता है।

सुरक्षा

SQL सर्वर आवृत्ति स्तर पर लॉगिन को परिभाषित किया गया है, लेकिन प्रत्येक लॉगिन मानचित्र एक 'डेटाबेस उपयोगकर्ता' के रूप में शून्य या अधिक डेटाबेस में जाता है। अनुमतियाँ सांचा दोनों 'लॉगिन' (सर्वर) और 'उपयोगकर्ता' (डेटाबेस) को सौंपा जा सकता है, लेकिन डेटाबेस में 'भूमिकाएँ' सामान्य रूप से उपयोग की जाती हैं। उपयोगकर्ता भूमिकाओं से संबंधित हैं, अनुमतियाँ भूमिकाओं को सौंपी जाती हैं। SQL सर्वर 2012 'सर्वर भूमिकाएँ' जोड़ता है।

  • एसक्यूएल सर्वर 2012 'आंशिक रूप से निहित डेटाबेस' नामक एक अवधारणा का परिचय देता है, जो उपयोगकर्ता और भूमिका जानकारी को उस डेटाबेस के लिए स्थानीय आयोजित करने की अनुमति देता है।

  • एक डेटाबेस के भीतर, उपयोगकर्ता और स्कीमा की अवधारणा को अलग किया जाता है। एक उपयोगकर्ता या भूमिका एक स्कीमा को सौंपी जा सकती है और एक स्कीमा डेटाबेस ऑब्जेक्ट्स का मालिक होता है।

  • Windows प्रमाणीकरण किसी मशीन या डोमेन पर उपयोगकर्ता को SQL सर्वर लॉगिन में प्रमाणित करने के लिए पर्दे के पीछे लॉगिन जानकारी का उपयोग करता है। इसके लिए IIRC समर्थन ओरेकल पर एक अतिरिक्त अतिरिक्त है।

  • एक विशेष भूमिका, 'dbo' ('डेटाबेस मालिक के लिए संक्षिप्त') में एक विशिष्ट डेटाबेस के भीतर एक तरह का सुपर-यूजर विशेषाधिकार होता है। प्रत्येक डेटाबेस में एक 'dbo' भूमिका होती है और उपयोगकर्ताओं को किसी दिए गए डेटाबेस पर 'dbo' भूमिका सौंपी जा सकती है।

  • एक डिफ़ॉल्ट 'dbo' स्कीमा भी है। वस्तुएं dbo स्कीमा के स्वामित्व में हो सकती हैं - 'dbo' भूमिका (या सिस्टम-वाइड व्यवस्थापक अनुमतियाँ) वाले उपयोगकर्ताओं द्वारा बनाई गई वस्तुएँ 'dbo' स्कीमा के स्वामित्व में होने तक डिफ़ॉल्ट रूप से तब तक प्रदत्त रहेंगी जब तक कि किसी अन्य स्कीमा को स्पष्ट रूप से प्रदान नहीं किया जाता है।

  • सुरक्षा जानकारी को एकल डेटाबेस के बैकअप के साथ नहीं रखा जाता है। उपयोगकर्ताओं और भूमिकाओं को स्पष्ट रूप से उस सर्वर पर कॉन्फ़िगर किया जाना चाहिए जिसे बैकअप बहाल किया गया है। SQL सर्वर 2012 उपयोगकर्ता और भूमिका डेटा को स्थानीय रूप से एक नए 'आंशिक रूप से निहित डेटाबेस' सुविधा के साथ डेटाबेस में रखने की अनुमति देता है।

  • SQL सर्वर 2005 से, संग्रहीत कार्यविधियों को कॉलर, निर्माता, मालिक स्कीमा या एक निर्दिष्ट उपयोगकर्ता के सुरक्षा संदर्भ में निष्पादित किया जा सकता है।

  • SQL सर्वर पर एक दृश्य में, अंतर्निहित तालिकाओं पर अनुमतियाँ उस स्कीमा की अनुमति पर आधारित होती हैं जो दृश्य का स्वामी है। अंतर्निहित तालिकाओं पर उपयोगकर्ता अनुमतियाँ सुरक्षा में भाग नहीं लेती हैं, हालांकि एक दृश्य परिभाषा में फ़िल्टर शामिल हो सकते हैं जो सत्र से जानकारी प्राप्त करते हैं। ओरेकल में, अंतर्निहित तालिकाओं पर उपयोगकर्ता की अनुमति अनुदान के कॉन्फ़िगरेशन के आधार पर दृश्य को प्रभावित कर सकती है।

निगरानी और ट्यूनिंग

टीबीए - ओरेकल में मेमोरी आर्किटेक्चर बनाम एसजीए आदि

बैकअप और रिकवरी

टीबीए

टूलींग

Microsoft SQL सर्वर के साथ आसपास के उपकरणों का एक सेट बंडल करता है। आपूर्ति की जाने वाली कुछ प्रमुख वस्तुएं हैं:

  • SQL सर्वर प्रबंधन स्टूडियो (SSMS): यह Oracle पर SQL डेवलपर के समान है - यह एक संपादक और कोड निष्पादन सुविधा प्रदान करता है। कुछ उपयोगी सुविधाओं में एक डेटाबेस ऑब्जेक्ट ब्राउज़र और एक क्वेरी प्लान दर्शक शामिल हैं।

  • SQL सर्वर विश्लेषण सेवा (SSAS): यह एक OLAP सर्वर है जो डेटाबेस सर्वर से अलग है। यह क्लाइंट-सर्वर संचार के लिए अपनी स्वयं की क्वेरी भाषा (MDX) और API (XML / A) का उपयोग करता है। इसे SQL के साथ क्वेर नहीं किया जा सकता है। SSMS में MDX और कच्चे XMLA प्रश्नों को संपादित करने और परिणाम प्रदर्शित करने की सुविधा है। ASCMD.EXE नामक एक कमांड लाइन क्वेरी टूल भी आपूर्ति की जाती है।

  • SQL सर्वर रिपोर्टिंग सेवा (SSRS): यह रिपोर्ट प्रकाशित करने के लिए एक वेब-आधारित रिपोर्टिंग उपकरण है। रिपोर्ट बीआई डेवलपमेंट स्टूडियो (BIDS) या रिपोर्ट बिल्डर के माध्यम से बनाई जा सकती है, और एक वेब पोर्टल पर प्रकाशित की जा सकती है। SSRS सर्वर में प्रोग्राम को सर्वर से प्रबंधित करने के लिए स्वयं एक वेब सेवा एपीआई है। ध्यान दें कि SSRS रिपोर्ट विभिन्न स्रोतों से डेटा का उपभोग कर सकती है, न कि केवल SQL सर्वर। RS.EXE नामक एक कमांड लाइन उपकरण प्रोग्रामर SSRS सर्वर के प्रबंधन के लिए प्रदान किया जाता है।

  • एसक्यूएल सर्वर इंटीग्रेशन सर्विसेज (एसएसआईएस): यह एक ईटीएल उपकरण है जिसे एसक्यूएल सर्वर से आपूर्ति की जाती है। वास्तुकला में, यह OWB या ODI में काफी भिन्न है कि यह कोड जनरेशन टूल नहीं है। रनटाइम क्लाइंट-साइड बैठता है और डेटाबेस सर्वर के लिए एक अलग मशीन पर हो सकता है। SSIS पैकेजों को BIDS के साथ विकसित किया जा सकता है और DTEXEC.EXE नामक कमांड लाइन टूल के साथ स्वतंत्र रूप से निष्पादित किया जाता है।

  • बीआई डेवलपमेंट स्टूडियो (BIDS): यह एक दृश्य स्टूडियो है जो विकासशील रिपोर्ट, SSIS पैकेज और SSAS क्यूब्स के लिए environnemt आधारित है। यदि अन्य वी.एस. आधारित विकास टूलिंग स्थापित है (जैसे वी.एस. प्रोफेशनल) टूलींग को एकल वातावरण और एक सामान्य परियोजना समूह में एकीकृत किया जा सकता है।

  • बल्क कॉपी (BCP): SQL * लोडर के समान एक कमांड लाइन बल्क इंसर्ट / एक्सट्रैक्ट टूल

  • SQLCMD: SQL * प्लस के समान कमांड लाइन क्वेरी टूल

  • SQL प्रोफाइलर: एक ट्रेसिंग और प्रोफाइलिंग टूल जो सूट में SQL सर्वर, SSAS और अन्य टूल्स से ट्रेस जानकारी को कैप्चर और मूल्यांकन कर सकता है।

  • SQL सर्वर एजेंट: एक जॉब शेड्यूलिंग यूटिलिटी जो एक प्रकार के दूसरे की आवधिक नौकरियों को चला सकती है।


1
टी-एसक्यूएल बनाम पीएल / एसक्यूएल पर: टी-एसक्यूएल में पीएल / एसक्यूएल जैसे विभिन्न प्रोग्रामिंग संदर्भ नहीं होते हैं, इसलिए आप स्वतंत्र रूप से शुद्ध एसक्यूएल और टी-एसक्यूएल बयानों को मिला सकते हैं। उदाहरण के लिए, यदि आप एक चला सकते हैं TRUNCATE TABLE ...DML के साथ-साथ बिना के बराबर क्या करने वाले EXECUTE IMMEDIATE। टी-एसक्यूएल में, आप SELECTअन्य परिचालनों के साथ ग्राहक को परिणाम सेट भी लौटा सकते हैं , जबकि पीएल / एसक्यूएल में आपको किसी तालिका या अन्य गंतव्य में उत्पादन का निर्देशन करना होगाSELECT । ओरेकल में, केवल शुद्ध एसक्यूएल क्लाइंट के लिए एक परिणाम सेट कर सकता है।
निक चम्मास

1
यह भी ध्यान दें कि संग्रहीत प्रक्रियाएं जिनके नाम "sp_" से शुरू होते हैं, विशेष रूप से व्यवहार किए जाते हैं। जब तक आप SQL सर्वर के नए संस्करण से सिस्टम प्रक्रिया का बैकपोर्ट नहीं दे रहे हैं, तब तक अपने संग्रहीत खरीदों को नाम न दें। आप डेटाबेस विस्तृत स्टोरेज प्रक्रियाओं को बनाने के लिए तकनीकी रूप से इसका उपयोग कर सकते हैं, लेकिन इसका पुन: संयोजन नहीं किया जाता है, क्योंकि भविष्य के संस्करण एक ही नाम से एक नई सिस्टम संग्रहित प्रक्रिया बना सकते हैं।
केविन कैथार्ट

1
क्या यहां ताला वृद्धि के बारे में थोड़ा जोड़ना लायक है? मुझे लगता है कि यह ऑरेकल लोक असीमित पंक्ति स्तर के ताले के
जैक डगलस

8

हमारा मुख्य उत्पाद SQL सर्वर और ओरेकल दोनों पर काम करता है, यहां कुछ अन्य अंतर हैं जिन्हें हमें काम करना था और इसे ध्यान में रखना अच्छा हो सकता है:

  • दिनांक-समय की हैंडलिंग बहुत अलग है: विभिन्न पूर्वापेक्षाएँ, कार्य करने के लिए अलग-अलग कार्य

  • खाली तार Oracle में NULLs हैं, SQL सर्वर में नहीं

  • चरित्र एन्कोडिंग और यूनिकोड की हैंडलिंग बहुत अलग है। SQL सर्वर में आप सामान्य ( varchar) या यूनिकोड ( nvarchar) कॉलम एक ही डेटाबेस में मिला सकते हैं, Oracle में आप डेटाबेस-स्तर पर निर्णय लेते हैं कि किस तरह के एन्कोडिंग का उपयोग करना है।


Oracle दो अलग-अलग एन्कोडिंग के साथ char / varchar2 और nchar / nvarchar2 प्रकारों को मिलाने की भी अनुमति देता है - देखें कि यूनिकोड वर्णों को Oracle डेटाबेस में दो तरीकों से संग्रहीत किया जा सकता है
जॉर्ज 3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.