هل هناك طريقة لاستعادة نسخة احتياطية لقاعدة بيانات SQL Server 2012 إلى SQL Server 2008؟
حاولت إرفاق ملف ، لكنه لا يعمل.
لديك خياران:
الخيار أ: نص قاعدة البيانات في وضع التوافق باستخدام خيار إنشاء برنامج نصي:
ملاحظة: إذا قمت بنسخ قاعدة بيانات تحتوي على مخطط وبيانات ، اعتمادًا على حجم البيانات الخاصة بك ، فسيكون البرنامج النصي ضخمًا ولن يتم التعامل معه بواسطة SSMS أو sqlcmd أو osql (قد يكون بالغيغابايت أيضًا).
الخيار ب:
يقوم السكريبت الأول بإخراج الجداول أولاً باستخدام جميع الفهارس و FK's وما إلى ذلك وإنشاء جداول فارغة في قاعدة البيانات الوجهة - الخيار مع SCHEMA فقط (لا توجد بيانات).
استخدم BCP لإدراج البيانات
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)
تشغيل ملف الخفافيش الذي سيقوم بإنشاء ملفات .dat في المجلد الذي حددته.
قم بتشغيل البرنامج النصي أدناه على الخادم الوجهة باستخدام 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)
قم بتشغيل الإخراج باستخدام SSMS لإدخال البيانات مرة أخرى في الجداول.
هذه طريقة bcp سريعة جدًا لأنها تستخدم الوضع الأصلي.
لا ، لا يمكنك الرجوع للخلف ، للأمام فقط. يمكنك إنشاء قاعدة بيانات فارغة في عام 2008 ثم استخدام معالج إنشاء البرامج النصية في إدارة الاستوديو لبرمجة المخطط والبيانات (أو أدوات مقارنة من طرف ثالث من Red Gate وغيرها). تأكد من تعيين إصدار الهدف الصحيح على أنه 2008 ، وسيتعين عليك وضع أشياء غير متوافقة (مثل OFFSET أو FORMAT) ربما استخدمتها في عام 2012.
لا توجد طريقة معتمدة للقيام بذلك لأن SQL Server لا يسمح بهذا النوع من التوافق.
ما يمكنك القيام به هو
استعادة قاعدة البيانات على SQL 2012
إنشاء مخطوطات للكائنات والبيانات
إذا لم يكن لديك SQL Server 2012 ، فيمكنك استخدام أدوات الطرف الثالث لقراءة النسخ الاحتياطي واستخراج البيانات والبنية.
في هذه الحالة فقط قم بإنشاء قاعدة بيانات فارغة على SQL 2008 واستخدم أدوات مثل ApexSQL Diff و ApexSQL Data Diff لمزامنة الكائنات والبيانات. يمكنك العثور عليها من البائعين الرئيسيين الآخرين أيضًا مثل Red-Gate أو Idera.