SQL सर्वर आयात समस्या का समाधान
पूर्व शर्त
डेटा को एक SQL सर्वर से दूसरे में स्थानांतरित करने के लिए (जैसे उत्पादन वातावरण से परीक्षण वातावरण में) "जेनरेट स्क्रिप्ट" सुविधा का उपयोग करना समझ में आता है जो SQL सर्वर प्रबंधन स्टूडियो में डेटाबेस विकल्पों में उपलब्ध है। इस ऑपरेशन का परिणाम SQL कमांड वाली टेक्स्ट फ़ाइल है जिसे किसी अन्य SQL सर्वर पर निष्पादित किया जा सकता है। आमतौर पर ये फ़ाइलें SQL सर्वर प्रबंधन स्टूडियो में निष्पादित करने के लिए बहुत बड़ी होती हैं, इसलिए हमें sqlcmd का उपयोग करने की आवश्यकता होती है SQL सर्वर स्थापना पैकेज से कमांड लाइन उपयोगिता। अधिकांश मामलों में उपयोगिता सुचारू रूप से काम करती है और अतिरिक्त उपयोगकर्ता क्रियाओं की आवश्यकता नहीं होती है।
समस्या का विवरण
कुछ दुर्लभ मामलों में sqlcmd उपयोगिता आयात के साथ विफल हो सकती है और निम्न त्रुटि उत्पन्न कर सकती है:"वर्ण स्ट्रिंग के बाद खुला उद्धरण चिह्न ..." जो इंगित करता है कि SQL प्रश्नों में से एक को निष्पादित नहीं किया गया है। ऐसा इसलिए होता है क्योंकि sqlcmd स्ट्रीम प्रोसेसिंग का उपयोग करके काम करता है, यानी यह डेटा के कुछ टुकड़े पढ़ता है, इसे संसाधित करता है, अगला टुकड़ा पढ़ता है और इसी तरह। कुछ मामलों में एक इनपुट फ़ाइल में बड़ा SQL निर्देश हो सकता है जिसका आकार उस डेटा की मात्रा से बड़ा होता है जिसे sqlcmd द्वारा संसाधित किया जा सकता है एक बार में, इसलिए sqlcmd टूटे हुए SQL को निष्पादित करने का प्रयास करता है और विफल रहता है।
संभावित समाधान
इस समस्या को ठीक करने के लिए 2 तरीकों का इस्तेमाल किया जा सकता है:
-
sqlcmd उपयोगिता "-ए" पैरामीटर को स्वीकार कर सकती है जो प्रसंस्करण के दौरान उपयोग किए जाने वाले पैकेट के अधिकतम आकार (डेटा का टुकड़ा) को परिभाषित करता है। अधिकतम मान 32767 है, डिफ़ॉल्ट मान 4096 है, इसलिए इस पैरामीटर का हमेशा अधिकतम मान के साथ उपयोग करना समझ में आता है।
sqlcmd -i input.sql -a 32767 -o import_log.txt
-
यदि पहला दृष्टिकोण मदद नहीं करता है और समस्या अभी भी प्रकट होती है, तो एक और अधिक कठिन समाधान है:
- सिगविन स्थापित करें
- इंस्टॉलेशन के दौरान, कुछ मानक स्क्रीन के बाद, "पैकेज चुनें" स्क्रीन पर रुकें
- "खोज" फ़ील्ड में, "sed" दर्ज करें, और नीचे दिए गए पेड़ में "आधार" श्रेणी का विस्तार करें और स्थापना के लिए संस्करण 4.2.2 से कम नहीं चुनें
- पूर्ण स्थापना
- नोट:"sed" Linux उपयोगिता है जो स्ट्रीम-आधारित फ़ाइल प्रसंस्करण की अनुमति देता है
- इंस्टॉलेशन पूर्ण होने के बाद, डेस्कटॉप से "साइगविन64 टर्मिनल" चलाएँ। हम इसे अगले चरणों के लिए उपयोग करेंगे
-
उस निर्देशिका पर जाएँ जहाँ SQL सर्वर प्रबंधन स्टूडियो द्वारा उत्पन्न SQL फ़ाइल स्थित है। आपको विंडोज स्टाइल के बजाय लिनक्स स्टाइल स्लैश "/" का उपयोग करने की आवश्यकता है जो कि "\"
. हैcd d:/temp
-
SQL फ़ाइल की एन्कोडिंग को UTF-16LE से UTF-8 में बदलें, क्योंकि "sed" UTF-16LE को संसाधित नहीं कर सकता, यह रूपांतरण डेटा के लिए सुरक्षित है। परिणाम एक नई फ़ाइल होगी, जिसका उपयोग हम अगले चरण में करेंगे
iconv -f UTF-16LE -t UTF-8 input.sql > input_utf8.sql
-
एक बैच में एक SQL क्वेरी रखने के लिए, नई फ़ाइल को कनवर्ट करें। परिणाम एक नई फ़ाइल होगी, जिसका उपयोग हम अगले चरण में करेंगे
sed -e 's/^INSERT/GO\nINSERT/' input_utf8.sql > input_utf8_adapted.sql
-
अब फ़ाइल "input_utf8_adapted.sql" को बिना किसी समस्या के sqlcmd द्वारा संसाधित किया जाना चाहिए, ताकि हम निम्नलिखित को निष्पादित कर सकें:
sqlcmd -i input_utf8_adapted.sql -a 32767 -o import_log.txt
-
निष्पादन हो जाने के बाद, कृपया यह सुनिश्चित करने के लिए कि कोई त्रुटि नहीं दिखाई दे, कृपया import_log.txt जांचें
- सिगविन स्थापित करें