SQL Server 2008 डेटाबेस के लिए SQL Server 2012 बैकअप पुनर्स्थापित करें?


41

क्या SQL Server 2008 में SQL Server 2012 डेटाबेस बैकअप को पुनर्स्थापित करने का कोई तरीका है?

मैंने फ़ाइल संलग्न करने की कोशिश की, यह काम नहीं करता है।


चेकआउट इन संदर्भों से आपको मदद मिलेगी: msdn.microsoft.com/en-us/library/ms140052.aspx dba.stackexchange.com/questions/5511/… धन्यवाद

इसी के बराबर एक और सवाल है और इसका बहुत अच्छा जवाब दिया गया है: superuser.com/questions/468578/…
कैवलेइरो

1
यहाँ इस समस्या का एक बढ़िया काम करने वाला उत्तर है (माइग्रेशन, बैकअप / पुनर्स्थापना नहीं): stackoverflow.com/questions/19837886/…
डॉन ज्वेट

जवाबों:


30

आपके पास कुछ विकल्प हैं:

विकल्प A : स्क्रिप्ट स्क्रिप्ट विकल्प का उपयोग करके संगतता मोड में डेटाबेस से बाहर स्क्रिप्ट:

नोट: यदि आप अपने डेटा आकार के आधार पर स्कीमा और डेटा के साथ डेटाबेस को स्क्रिप्ट करते हैं, तो स्क्रिप्ट बड़े पैमाने पर और अभ्यस्त SSMS, sqlcmd या osql द्वारा नियंत्रित किया जाएगा (जीबी में भी हो सकता है)।

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

विकल्प बी:

पहले सूची को सभी इंडेक्स, FK, आदि के साथ पहले टेबल आउट करें और गंतव्य डेटाबेस में रिक्त तालिका बनाएं - SCHEMA केवल विकल्प (कोई डेटा नहीं)।

डेटा डालने के लिए BCP का उपयोग करें

  1. नीचे स्क्रिप्ट का उपयोग करके डेटा को bcp करें। टेक्स्ट मोड में SSMS सेट करें और एक बैट फ़ाइल में स्क्रिप्ट के नीचे उत्पन्न आउटपुट को कॉपी करें।

    -- 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\*.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\'  /* 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) <> 'unwantedschema'    */                             /* Optional to exclude any schema  */
    order by schema_name(schema_id)
    
  2. उस बैट फ़ाइल को चलाएं जो आपके द्वारा निर्दिष्ट फ़ोल्डर में .dat फाइलें उत्पन्न करेगी।

  3. पाठ मोड में SSMS के साथ गंतव्य सर्वर पर स्क्रिप्ट के नीचे फिर से चलाएँ।

    --- 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 = 'destinationDB' /* 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\' /* 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) <> 'unwantedschema' /* Optional to exclude any schema */
        order by schema_name(schema_id) 
    
  4. तालिका में डेटा वापस डालने के लिए SSMS का उपयोग करके आउटपुट चलाएँ।

यह बहुत तेज़ bcp तरीका है क्योंकि यह Native मोड का उपयोग करता है।


बहुत उपयोगी - विधि बी ने मेरे लिए काम किया (एस विधि 7 जीबी द्वारा उत्पन्न एसक्यूएल और एसएसएमएस इसमें से कोई भी नहीं था)। कुछ SSID और लिंक किए गए सर्वर ठीक से नहीं चलते थे, लेकिन लिंक्ड सर्वर के साथ पहली बार काम करने पर कुछ भी नहीं होता है? यकीन नहीं कि मैं प्रोडक्शन में इसका इस्तेमाल करके खुश रहूंगा लेकिन टेस्ट का माहौल पाने के लिए 95% जल्दी सही हो गया।
Aucuparia

@ मौसुपरिया Some SSIDs and linked servers didn't go across properly। लिंक किए गए सर्वर को मैन्युअल रूप से स्क्रिप्ट करना होगा। SSIDs को sp_helprevlogin का उपयोग करके ट्रान्सफर किया जा सकता है। SQLAgent नौकरियों, ssis संकुल आदि को आपकी आवश्यकताओं के अनुसार स्थानांतरित किया जाना चाहिए। इस विधि का मतलब यह है कि जब आप 2 डेटाबेस को अपग्रेड या मर्ज कर रहे हों, तो डेटा को जितनी जल्दी हो सके उतना जल्दी प्राप्त करें।
परिजनों शाह

विकल्प बी ही एकमात्र तरीका था जो मेरे लिए काम करता था, क्योंकि उत्पन्न स्क्रिप्ट अन्य तरीकों से बहुत बड़ी थी
जम्पजेज़ा

23

नहीं, आप आगे नहीं जा सकते, केवल आगे। आप 2008 पर एक खाली डेटाबेस बना सकते हैं और फिर स्कीमा और डेटा (या लाल गेट और अन्य से 3 पार्टी तुलना उपकरण) को स्क्रिप्ट करने के लिए प्रबंधन स्टूडियो में जनरेट स्क्रिप्ट्स विज़ार्ड का उपयोग कर सकते हैं। सुनिश्चित करें कि आपने सही लक्ष्य संस्करण 2008 के रूप में सेट किया है, और आपको असंगत चीजों (जैसे OFFSET या FORMAT) को मांस देना होगा जो आपने 2012 में उपयोग किया होगा।


8

ऐसा करने का कोई समर्थित तरीका नहीं है क्योंकि SQL सर्वर इस तरह की संगतता की अनुमति नहीं देता है।

आप क्या कर सकते हैं

  1. SQL 2012 पर डेटाबेस पुनर्स्थापित करें

  2. वस्तुओं और डेटा के लिए स्क्रिप्ट उत्पन्न करते हैं

  3. SQL 2012 के लिए अद्वितीय सभी विवरणों से लिपियों को साफ़ करें
  4. 2008 में स्क्रिप्ट निष्पादित करें

यदि आपके पास SQL ​​Server 2012 नहीं है, तो आप बैकअप पढ़ने और डेटा और संरचना निकालने के लिए तीसरे पक्ष के टूल का उपयोग कर सकते हैं।

इस स्थिति में बस SQL ​​2008 पर खाली डेटाबेस बनाएँ और ऑब्जेक्ट्स और डेटा को सिंक्रनाइज़ करने के लिए ApexSQL Diff और ApexSQL Data Diff जैसे टूल का उपयोग करें । आप इन्हें अन्य प्रमुख विक्रेताओं जैसे रेड-गेट या इडेरा से भी पा सकते हैं।

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