SQL Server 2012 से SQL Server 2005 में डेटाबेस को कैसे स्थानांतरित करें


30

यदि मुझे SQL Server 2012 (32bit) से SQL Server 2005 (64bit) डेटाबेस को स्थानांतरित करने की आवश्यकता है तो मेरे पास क्या विकल्प हैं?

मुझे पता है कि मैं नहीं कर सकता:

  • SQL Server 2005 पर डेटाबेस का बैकअप पुनर्स्थापित करें
  • अलग करें और संलग्न करें

मुझे पता है, मैं कर सकता हु:

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

क्या कोई आसान विकल्प है?


12
ईमानदार होने के लिए गंतव्य को 2012 में अपग्रेड करना आसान विकल्प होगा।
हारून बर्ट्रेंड

जवाबों:


40

आप नीचे किसी भी विधि का अनुसरण कर सकते हैं:

नोट: यदि आप किसी भी नई सुविधाओं जैसे नए डेटा प्रकार आदि का उपयोग कर रहे हैं, तो आपको परीक्षण करना होगा क्योंकि यह त्रुटियों को फेंक देगा।

विधि 1: मूल उपकरण का उपयोग करना

  1. डेटाबेस से बाहर निकलें SCHEMA_ONLY और गंतव्य सर्वर पर एक खाली डेटाबेस को फिर से बनाएँ। नीचे स्क्रीनशॉट हैं:

    यहाँ छवि विवरण दर्ज करें

    यहाँ छवि विवरण दर्ज करें

    यहाँ छवि विवरण दर्ज करें

  2. डेटा डालने के लिए BCP OUT और BULK INSERT का उपयोग करें।

नीचे स्क्रिप्ट है जो आपको भाग 2 के साथ मदद करेगी।

/************************************************************************************************************************************************
Author      :   KIN SHAH    *********************************************************************************************************************
Purpose     :   Move data from one server to another*********************************************************************************************
DATE        :   05-28-2013  *********************************************************************************************************************
Version     :   1.0.0   *************************************************************************************************************************
RDBMS       :   MS SQL Server 2008R2 and 2012   *************************************************************************************************
*************************************************************************************************************************************************/

-- save below output in a bat file by executing below in SSMS in TEXT mode
-- clean up: create a bat file with this command --> del D:\BCP_OUT\*.dat 

select '"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp.exe" '-- path to BCP.exe
        +  QUOTENAME(DB_NAME())+ '.'                                    -- Current Database
        +  QUOTENAME(SCHEMA_NAME(SCHEMA_ID))+'.'            
        +  QUOTENAME(name)  
        +  ' out D:\BCP_OUT\'                                           -- Path where BCP out files will be stored
        +  REPLACE(SCHEMA_NAME(schema_id),' ','') + '_' 
        +  REPLACE(name,' ','') 
        + '.dat -T -E -SSERVERNAME\INSTANCE -n'                         -- ServerName, -E will take care of Identity, -n is for Native Format
from sys.tables
where is_ms_shipped = 0 and name <> 'sysdiagrams'                       -- sysdiagrams is classified my MS as UserTable and we dont want it
and schema_name(schema_id) <> 'some_schema_exclude'                     -- Optional to exclude any schema 
order by schema_name(schema_id)                         



--- Execute this on the destination server.database from SSMS.
--- Make sure the change the @Destdbname and the bcp out path as per your environment.

declare @Destdbname sysname
set @Destdbname = 'destination_database_Name'               -- Destination Database Name where you want to Bulk Insert in
select 'BULK INSERT '                                       -- Remember Tables **must** be present on destination Database
        +  QUOTENAME(@Destdbname)+ '.'
        +  QUOTENAME(SCHEMA_NAME(SCHEMA_ID))+'.' 
        +  QUOTENAME(name) 
        + ' from ''D:\BCP_OUT\'                             -- Change here for bcp out path
        +  REPLACE(SCHEMA_NAME(schema_id),' ','') + '_'
        +  REPLACE(name,' ','') 
        +'.dat'' 
        with (
        KEEPIDENTITY,
        DATAFILETYPE = ''native'',  
        TABLOCK
        )'  + char(10) 
        + 'print ''Bulk insert for '+REPLACE(SCHEMA_NAME(schema_id),' ','') + '_'+  REPLACE(name,' ','')+' is done... '''+ char(10)+'go' 
from sys.tables
where is_ms_shipped = 0 and name <> 'sysdiagrams'           -- sysdiagrams is classified my MS as UserTable and we dont want it
and schema_name(schema_id) <> 'some_schema_exclude'         -- Optional to exclude any schema 
order by schema_name(schema_id)

विधि 2: थर्ड पार्टी टूल्स का उपयोग करना

गंतव्य सर्वर पर एक रिक्त डेटाबेस बनाएँ। गंतव्य सर्वर में डेटा बनाने और लोड करने के लिए Redgate के स्कीमा तुलना और डेटा की तुलना करें।

नोट: मैंने Redgate के स्कीमा और डेटा तुलना का उपयोग किया है और वे इस प्रकार के कार्य के लिए सबसे अच्छे उपकरण हैं और इसलिए यदि आप 3rd पार्टी टूल का उपयोग कर रहे हैं, तो मेरी सिफारिश Redgate होगी।


7
+1 लेकिन ध्यान रखें कि कुछ चीजें हैं जो सिर्फ गंतव्य पर काम नहीं करेंगी (और मुझे यकीन नहीं है कि कैसे सुंदर 3 पार्टी उपकरण उन सभी को संभाल लेंगे)। दृश्यों की तरह ऑब्जेक्ट्स, OFFSET कोड की तरह / फ़ेच, अंतराल / लीड, आदि
हारून बर्ट्रेंड

1
एक बार आपके पास स्क्रिप्ट बनाने और पुराने डेटाबेस के खिलाफ उन स्क्रिप्ट को चलाने के बाद स्कीमा होता है, डेटा ट्रांसफर करने के लिए एक और विकल्प एक लिंक किए गए सर्वर को सेट करके एक उदाहरण से दूसरे में सीधे कॉपी करना है। एक लूप को स्क्रिप्ट करना मुश्किल नहीं होना चाहिए जो सभी काम करता है। FK बाधाओं से निपटने के लिए आपको यह सुनिश्चित करने की आवश्यकता होगी कि आप तालिकाओं को एक उपयुक्त क्रम में कॉपी कर सकते हैं या आप FKs को अस्थायी रूप से हटा सकते हैं और प्रतिलिपि के बाद उन्हें फिर से उपयोग कर सकते हैं। इसी तरह आप कॉपी के दौरान गंतव्य में किसी भी ट्रिगर को निष्क्रिय करना चाहते हैं।
डेविड स्पिलेट

4

यहां पहले से सुझाई गई विधियों के अलावा, आप BACPAC फ़ाइल बनाने का भी प्रयास कर सकते हैं और इसे अपने गंतव्य में आयात कर सकते हैं। यह उसी तरह है जैसे Microsoft आपके डेटाबेस को समय-समय पर Azure क्लाउड डेटाबेस से माइग्रेट करने की अनुशंसा करता है।

इसका लाभ यह है कि यह स्कीमा के साथ-साथ डेटा के निर्यात का एक संयोजन है, और यह डेटाबेस संस्करण पर निर्भर नहीं है, इसलिए आप सैद्धांतिक रूप से डेटाबेस को किसी भी संस्करण से किसी भी संस्करण में आयात कर सकते हैं।

इसका नकारात्मक पक्ष यह है कि इससे पहले कि यह स्रोत पर BACPAC फ़ाइल उत्पन्न करता है, यह किसी प्रकार की सख्त सत्यापन प्रक्रिया चलाता है जो आपके डेटाबेस के बाहर की वस्तुओं (यदि यह उपयोगकर्ता या सिस्टम डेटाबेस हो), या यदि आपके पास है, तो आसानी से विफल हो सकती है एन्क्रिप्टेड ऑब्जेक्ट्स। लेकिन अगर आप भाग्यशाली हैं और यह विफल नहीं होता है, तो यह एक आसान समाधान हो सकता है।

आपको केवल नए SSMS संस्करणों (17 या 18) में से एक की आवश्यकता है: https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms

BACPAC फ़ाइल बनाना शुरू करने के लिए, किसी डेटाबेस पर राइट-क्लिक करें और "निर्यात डेटा-स्तरीय एप्लिकेशन ..." का चयन करें (सुनिश्चित करें कि "डेटा-स्तरीय एप्लिकेशन निकालें ..." के साथ भ्रमित न हों ... जो कुछ अलग है):

डेटा-स्तरीय अनुप्रयोग निर्यात करें ...

आपको चरणों के माध्यम से मार्गदर्शन करने के लिए एक साधारण विज़ार्ड के साथ प्रस्तुत किया जाएगा। जब आप काम पूरा कर लें, तो आप अपने गंतव्य सर्वर में "आयात डेटा-स्तरीय अनुप्रयोग ..." का उपयोग कर सकते हैं, जिसे आप "डेटाबेस" नोड पर राइट-क्लिक करके देख सकते हैं (फिर से, "डेटा परिनियोजित न करें" -टियर आवेदन ... "):

डेटा-स्तरीय एप्लिकेशन आयात करें ...

यह भी, आपको चरणों के माध्यम से मार्गदर्शन करने के लिए एक सरल विज़ार्ड दिखाएगा।


-1

Sql सर्वर के संस्करण को कम करने के लिए बहुत मेहनत है।
घटने के लिए कुछ विकल्प हैं जैसे;
सबसे पहले, सभी डेटाबेस ऑब्जेक्ट स्क्रिप्ट बनाएं और गंतव्य सर्वर पर चलाएं।
उसके बाद आप उपयोग कर सकते हैं;

  • लघु उद्योगों,
  • डेटा उपकरण आयात करें,
  • थर्ड पार्टी टूल जैसे रेडगेट या अन्य।

लेकिन RedGate डेटा की तुलना टूल के लिए करें ,

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


8
मुझे नहीं लगता कि यह जवाब किंस के जवाब में सुधार करता है
जेम्स एंडरसन

-3

SQL सर्वर पर डेटाबेस को डाउनग्रेड करना असंभव है। हालाँकि, सभी DB ऑब्जेक्ट्स को स्क्रिप्ट करने और गंतव्य डेटाबेस पर स्क्रिप्ट को लागू करने के लिए एक समाधान है। SSIS यह प्रदर्शन करने में मदद करने का एक शानदार तरीका है।


4
क्या आपको लगता है कि यह परिजनों के उत्तर के लिए कुछ महत्वपूर्ण है ?
dezso
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.