मैं SQL सर्वर में डेटाबेस कैसे संलग्न करूं?


32

SQL सर्वर में डेटाबेस संलग्न करने से संबंधित कुछ सामान्य प्रश्न:

  • डेटाबेस संलग्न या अलग करने का क्या मतलब है?
  • मैं एक डेटाबेस को कैसे अलग करूं?
  • मैं एक डेटाबेस कैसे संलग्न करूं?
    • लॉग को संलग्न करने और पुनर्निर्माण करने का क्या मतलब है?
  • मैं इसे SQL सर्वर एक्सप्रेस में कैसे करूँ?
  • मैं कब कोचिंग और अटैचमेंट पर विचार कर सकता हूं?
  • क्या कोई जोखिम या चेतावनी है?
  • SQL सर्वर के संस्करणों और संस्करणों के बीच संलग्न करने के बारे में क्या? (एंटरप्राइज का मानक? 2000 से 2008? 2012 से 2008?)

जवाबों:


33

डिटैच या अटैच क्या है और वे कैसे काम करते हैं?

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

मैं एक डेटाबेस कैसे अलग करूँ?

आप इसे T-SQL में या SQL Server मैनेजमेंट स्टूडियो GUI से कर सकते हैं।

GUI में, आप उस डेटाबेस पर राइट क्लिक करें जिसे आप अलग करना चाहते हैं, चुनें All Tasksऔर क्लिक करें Detach। वहां से आपको डिटैच डायलॉग मिलेगा। आप किसी भी सक्रिय कनेक्शन को डिस्कनेक्ट करने के लिए सबसे पहले कनेक्शन ड्रॉप करने का विकल्प चुन सकते हैं और निष्पादन के बीच में वे काम वापस कर सकते हैं। आप डिटैच से पहले आंकड़े अपडेट करना भी चुन सकते हैं। के माध्यम से कोचिंग - डिटैच चुनें ...

T-SQL में:

-- You don't want to be in the database you are trying to detach
USE Master
GO

-- Optional step to drop all active connections and roll back their work
ALTER DATABASE DatabaseName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

-- Perform the detach
EXEC sp_detach_db 'DatabaseName'
GO

सिस्टम संग्रहीत कार्यविधि के लिए sp_detach_db दो पैरामाटर हैं जिन्हें आप वैकल्पिक रूप से पास कर सकते हैं:

  • @skipchecks- स्वीकार्य इनपुट है 'True'या 'False'यदि 'True', SQL सर्वर डिटैच होने से पहले आँकड़े अपडेट करेगा। अगर ' False', यह नहीं होगा। यदि आप यहां कुछ भी निर्दिष्ट नहीं करते हैं, तो आंकड़े SQL सर्वर 2005 या बाद में अपडेट किए जाएंगे।
    • @keepfulltextindexfile- यहां डिफ़ॉल्ट है 'True'- यदि यह सही पर सेट है, तो पूर्ण पाठ इंडेक्स मेटाडेटा को डिटैच के दौरान नहीं छोड़ा जाएगा।

अलग कर जोखिम मैं नीचे पर प्रकाश डाला पर कुछ और जानकारी के बारे में एक बहुत अधिक देखने के लिए, पुस्तकें ऑनलाइन लेख के लिए sp_detach_dbएक अच्छी जगह शुरू करने के लिए है।

मैं एक डेटाबेस कैसे संलग्न करूं?

आप इसे T-SQL में या SQL Server मैनेजमेंट स्टूडियो GUI से भी कर सकते हैं।

( नोट: यदि आपके पास एक डेटाबेस से डेटा और लॉग फाइलें हैं जो ठीक से अलग नहीं किया गया था, तो आपका अटैचमेंट काम नहीं कर सकता है। जब टुकड़ी होती है, तो डेटाबेस को ऑफ़लाइन लाया जाता है और लॉग और डेटा फ़ाइलों को एक सुसंगत स्थिति में डाल दिया जाता है। तब होता है जब कोई सेवा साफ़ बंद हो जाती है। )

GUI में, आप Databasesअपने उदाहरण के लिए शीर्ष स्तर के फ़ोल्डर पर राइट क्लिक करें और चुनें Attach। अगले संवाद में आप तब डेटाबेस की प्राथमिक डेटा फ़ाइल (.MDF) का चयन करेंगे जिसे आप संलग्न करना चाहते हैं और यह सुनिश्चित करना चाहते हैं कि आपके पास चयनित अन्य फाइलें और उनके उपयुक्त स्थान निर्दिष्ट हैं, और अपने डेटाबेस को संलग्न करते हुए OK पर क्लिक करें।

T-SQL में SQL Server 2005 में ऐसा करने का सबसे अच्छा तरीका है और आगे CREATE DATABASEकमांड के माध्यम से है । यह वह तरीका है जो SQL Server 2012 से परे समर्थित है। यदि आप यह देखना चाहते हैं कि कैसे उपयोग करना है sp_attach_db, तो आप इसे ऑनलाइन लेखों में [sp_attach_db][3]या उसके लिए देख सकते हैं।[sp_attach_single_file_db][4]

जब आपके पास आपकी लॉग फ़ाइल और डेटा फ़ाइलें उपलब्ध हों और वे संगत हों तो यह T-SQL दृष्टिकोण है:

- संलग्न करने के लिए बनाएँ डेटाबेस और ATTACH खंड के लिए का उपयोग करना

CREATE DATABASE DatabaseName 
    ON (FILENAME = 'FilePath\FileName.mdf'), -- Main Data File .mdf
    (FILENAME = 'FilePath\LogFileName.ldf'), -- Log file .ldf
     (FILENAME = 'FilePath\SecondaryDataFile.ndf)  -- Optional - any secondary data files
    FOR ATTACH 
GO 

आप ऑनलाइन भी पुस्तकों में डेटाबेस विवरण बनाएँ के बारे में अधिक देख सकते हैं ।

मैं SQL Server एक्सप्रेस में कैसे अटैच / अटैच कर सकता हूँ?

यह वास्तव में एक ही है। यदि आप SQL सर्वर प्रबंधन स्टूडियो एक्सप्रेस का उपयोग कर रहे हैं, तो आप ऊपर वर्णित जीयूआई में टीएएससी या टीएस-एसक्यूएल चरणों के रूप में अच्छी तरह से ऊपर वर्णित डिटैच / अटैच डायल का उपयोग कर सकते हैं। एक्सप्रेस के साथ कोई अंतर नहीं है।

यदि आपके पास SSMS एक्सप्रेस नहीं है, तो आप इसे डाउनलोड कर सकते हैं ( यहाँ SQL सर्वर 2012 एक्सप्रेस संस्करण है)।

आप एक SQLCMDसत्र में प्रवेश कर सकते हैं और ऊपर वर्णित समान टी-एसक्यूएल निर्माण का उपयोग कर सकते हैं ।

जब मुझे एक डिटैच या अटैच करने पर विचार करना चाहिए?

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

कहा कि, डिटैच और अटैचमेंट कुछ उपयोग के मामलों के लिए अच्छे हैं (संपूर्ण नहीं, अधिक जवाब जोड़ने या बनाने के लिए स्वतंत्र महसूस करें):

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

जोखिम और चेतावनी

फिर से, ऑनलाइन किताबें यहां एक अच्छा संसाधन है , लेकिन मैं कुछ विशिष्ट विचारों को ध्यान में रखते हुए किसी डेटाबेस को शामिल करने या संलग्न करने के लिए कहूंगा -

अलग करें

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

अटैच - जैसे आप इंटरनेट से स्क्रिप्ट नहीं चलाते हैं या हवाई अड्डे पर अजनबियों से पैकेज स्वीकार करते हैं, आपको इसे सत्यापित करने के लिए कुछ चरणों के बिना किसी और से मिले डेटाबेस को संलग्न नहीं करना चाहिए। यह डेटाबेस ट्रिगर्स, संग्रहीत प्रक्रियाओं आदि में इसके अंदर कोड हो सकता है जो आपके पर्यावरण से समझौता कर सकता है। आपको एक डेटाबेस की समीक्षा करनी चाहिए जिसे आप एक सुरक्षित, और फ़ायरवॉल वातावरण में संलग्न करना चाहते हैं, न कि आपकी उत्पादन प्रणाली।

SQL सर्वर के विभिन्न संस्करणों या संस्करणों के बारे में क्या?

ये संस्करणों के बीच डेटाबेस को पुनर्स्थापित करने के आसपास के नियमों से अलग नहीं हैं। आप आम तौर पर 3 संस्करणों के लिए अगले संस्करण तक पुनर्स्थापित कर सकते हैं (SQL Server 2008 से SQL सर्वर 2012, उदाहरण के लिए काम करेगा। SQL Server 2000 से SQL सर्वर 2012 नहीं होगा)। आप बैकअप / रिस्टोर या डिटैच / अटैचमेंट के माध्यम से बिल्कुल पीछे नहीं जा सकते हैं - आपको ऑब्जेक्ट्स को स्क्रिप्ट करना होगा और आवेषण को स्क्रिप्ट करना होगा और इसे मैन्युअल रूप से या ऐसा करने वाले टूल के साथ करना होगा। संस्करणों के लिए, आप आम तौर पर SQL सर्वर के मुख्य SKU के बीच आ-जा सकते हैं - उदाहरण के लिए आप किसी अतिरिक्त कार्य के लिए मानक से एंटरप्राइज़ तक डेटाबेस ले जा सकते हैं। यदि आप एंटरप्राइज़ फीचर्स का उपयोग कर रहे हैं (कहो, सम्पीडन या विभाजन), तो इससे पहले कि आप कदम बढ़ाएँ, आपको उन सुविधाओं को निष्क्रिय करना होगा। आप सुविधाओं का अंदाजा लगा सकते हैं '


@ माइक - क्या नियमित रूप से कोचिंग और डेटाबेस संलग्न करने से कोई प्रदर्शन प्रभाव पड़ता है? मैं कल्पना करता हूं कि बफर कैश किसी भी डेटाबेस के लिए अमान्य है जो अलग (स्पष्ट रूप से) है, लेकिन क्या आप किसी अन्य प्रभाव से अवगत हैं?
मैक्स वर्नोन

मेरे पास एक DB है जिस पर जब मैं SQL सर्वर इंस्टेंस को रोक देता हूं और 3 फाइलों को कॉपी करता हूं और फिर मैं उन्हें दूसरे उदाहरण पर संलग्न करता हूं, तो DB रिकवरी में चला जाता है (उसी DB पर दो बार मेरे साथ हुआ)। आपके विवरण से, यह नहीं होना चाहिए, इसलिए मुझे अपने डीबी के बारे में क्या संदेह होना चाहिए? क्या यह किसी तरह से भ्रष्ट है? बैकअप बनाने और पुनर्स्थापित करने के लिए eons लेते हैं, और यह सुविधा एक जीवन रक्षक है! कम से कम डेवलपर DB साझा उद्देश्यों के लिए ...
NoOne
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.