मैंने SQL सर्वर के पुराने संस्करण में डेटा प्राप्त करने और RDS के लिए डेटा खींचने के लिए BCP को कुछ उपकरणों से अधिक प्रभावी पाया है। (साभार @ivan_posdeev।)
मैं SQL सर्वर प्रबंधन स्टूडियो, कार्य, स्क्रिप्ट जनरेट में डेटाबेस पर राइट-क्लिक करके स्कीमा उत्पन्न करता हूं। सभी ऑब्जेक्ट्स को टिक करें, उन्नत ऑब्जेक्ट्स में यह सुनिश्चित करना कि आपकी ज़रूरत की हर चीज़ स्क्रिप्टेड (आँकड़े, अनुक्रमित आदि) होने वाली है, "गंतव्य डेटाबेस" का एक अलग नाम होने पर "USE डेटाबेस" को अनचेक करें, अपने गंतव्य डेटाबेस संस्करण के लिए अनुकूलता सेट करें और एक उत्पन्न करें फ़ाइल जो आपके स्कीमा बनाता है। अपने गंतव्य पर एक डेटाबेस बनाएं और उस पर इस फ़ाइल को चलाएं (उपयोग करते हुए osql
, sqlcmd
या जीयूआई)।
डेटा को स्थानांतरित करने के लिए, स्रोत डेटाबेस पर निम्न क्वेरी को दो बार चलाएं, डेटा निकालने के लिए बैच फ़ाइल बनाने के लिए पहले दूसरे कॉलम पर टिप्पणी करें, फिर अपने गंतव्य पर चलने के लिए आयात बैच फ़ाइल बनाने के लिए पहले कॉलम पर टिप्पणी करें। (आपको अपने स्रोत और गंतव्य सर्वर, उदाहरण के नाम, आउटपुट और इनपुट फ़ाइल निर्देशिका, उपयोगकर्ता नाम और पासवर्ड जोड़ने की आवश्यकता है। एकीकृत सुरक्षा का उपयोग करने के लिए विकल्पों और विकल्पों को बस के साथ बदलें ।)-U
-P
-T
यह यूनिकोड का समर्थन करता है, अगर आपको इसकी आवश्यकता नहीं है, तो -N
दोनों कथनों में स्विच को बदल दें -n
।
SELECT
'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME + ' out d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
-- 'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME + ' in d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME + '.ERRORS.dat'
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
ORDER BY
s.Name, t.NAME
स्कीमा .ablename.ERRORS.dat नाम की चेक फ़ाइलों को चलाने के बाद - कोई भी पंक्तियाँ शामिल नहीं होंगी जो विफल रहीं, यदि कोई नहीं किया तो खाली।
यहाँ BCP के लिए MSDN संदर्भ , BCP विकल्पों के माध्यम से यहाँ अधिक अनुकूल चलना ।
मैंने स्क्रिप्ट बनाने के लिए यह बहुत बेहतर पाया है, और जो भी उपकरण मैंने कोशिश की है उनमें से कोई भी। यह RDS डेटाबेस पर भी चलता है (जो बैकअप की अनुमति नहीं देता है)। उत्पन्न डेटा फाइलें SQL स्क्रिप्ट का 30% आकार हैं, उन्हें चलाने में समय का एक हिस्सा लगता है, और बहुत अधिक विश्वसनीय है। (स्क्रिप्टिंग डेटा के लिए एसक्यूएल सर्वर द्वारा उत्पन्न स्क्रिप्ट हमेशा ऊपर उठाई जाती है, कभी-कभी अनुमानित रूप से कभी-कभी नहीं, एसक्यूएल उत्पन्न 2008R2 के साथ संगत नहीं थी (उदाहरण के लिए nvarchar(0)
, अक्सर उपयोग नहीं किए जाने योग्य कारण के लिए पूरा नहीं किया गया था, आदि) बीसीपी भी किसी भी बाधा उल्लंघन का दोहराव देता है। , जैसे संदर्भात्मक अखंडता।)।