it-swarm.asia

هل تريد استعادة النسخ الاحتياطي لـ SQL Server 2012 إلى قاعدة بيانات SQL Server 2008؟

هل هناك طريقة لاستعادة نسخة احتياطية لقاعدة بيانات SQL Server 2012 إلى SQL Server 2008؟

حاولت إرفاق ملف ، لكنه لا يعمل.

41
urlreader

لديك خياران:

الخيار أ: نص قاعدة البيانات في وضع التوافق باستخدام خيار إنشاء برنامج نصي:

ملاحظة: إذا قمت بنسخ قاعدة بيانات تحتوي على مخطط وبيانات ، اعتمادًا على حجم البيانات الخاصة بك ، فسيكون البرنامج النصي ضخمًا ولن يتم التعامل معه بواسطة SSMS أو sqlcmd أو osql (قد يكون بالغيغابايت أيضًا).

enter image description here

الخيار ب:

يقوم السكريبت الأول بإخراج الجداول أولاً باستخدام جميع الفهارس و FK's وما إلى ذلك وإنشاء جداول فارغة في قاعدة البيانات الوجهة - الخيار مع 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 سريعة جدًا لأنها تستخدم الوضع الأصلي.

31
Kin Shah

لا ، لا يمكنك الرجوع للخلف ، للأمام فقط. يمكنك إنشاء قاعدة بيانات فارغة في عام 2008 ثم استخدام معالج إنشاء البرامج النصية في إدارة الاستوديو لبرمجة المخطط والبيانات (أو أدوات مقارنة من طرف ثالث من Red Gate وغيرها). تأكد من تعيين إصدار الهدف الصحيح على أنه 2008 ، وسيتعين عليك وضع أشياء غير متوافقة (مثل OFFSET أو FORMAT) ربما استخدمتها في عام 2012.

23
Aaron Bertrand

لا توجد طريقة معتمدة للقيام بذلك لأن SQL Server لا يسمح بهذا النوع من التوافق.

ما يمكنك القيام به هو

  1. استعادة قاعدة البيانات على SQL 2012

  2. إنشاء مخطوطات للكائنات والبيانات

  3. تنظيف البرامج النصية من جميع التفاصيل الفريدة لـ SQL 2012
  4. تنفيذ النصوص في عام 2008

إذا لم يكن لديك SQL Server 2012 ، فيمكنك استخدام أدوات الطرف الثالث لقراءة النسخ الاحتياطي واستخراج البيانات والبنية.

في هذه الحالة فقط قم بإنشاء قاعدة بيانات فارغة على SQL 2008 واستخدم أدوات مثل ApexSQL Diff و ApexSQL Data Diff لمزامنة الكائنات والبيانات. يمكنك العثور عليها من البائعين الرئيسيين الآخرين أيضًا مثل Red-Gate أو Idera.

8
David Smithers