ينطبق على
SQL Server 2012 Enterprise

الأعراض

اطّلع على السيناريو التالي:

  • يمكنك تثبيت مثيل Microsoft SQL Server 2005 أو Microsoft SQL Server 2008 أو Microsoft SQL Server 2008 R2.

  • يسمى مثيل SQL Server INST1 ويستضيف قاعدة بيانات تسمى Test_RO_FG_DB.

  • تحتوي قاعدة البيانات على مجموعات الملفات التالية:

    • الاساسي

    • RO_FG

    • RW_FG

  • يتم وضع علامة على مجموعة الملفات المسماة RO_FG على أنها READ_ONLY.

  • يمكنك تثبيت مثيل جديد من Microsoft SQL Server 2012. يسمى هذا المثيل من SQL Server 2012 INST2.

  • يمكنك فصل قاعدة بيانات Test_RO_FG_DB من INST1.

  • تحاول إرفاق قاعدة بيانات Test_RO_FG_DB ب INST2.

  • تتلقى رسالة خطأ تشبه ما يلي:

    يتعذر ترقية Msg 3415 والمستوى 16 والحالة 2 وقاعدة بيانات السطر 1'Test_RO_FG_DB' لأنها للقراءة فقط أو تحتوي على ملفات للقراءة فقط أو ليس لدى المستخدم أذونات لتعديل بعض الملفات. اجعل قاعدة البيانات أو الملفات قابلة للكتابة، وأعد تشغيل الاسترداد.

  • تحاول إعادة توصيل قاعدة بيانات Test_RO_FG_DB ب INST1.

في هذا السيناريو، لا يمكنك إعادة إرفاق قاعدة البيانات ب INST1. وتتلقى رسالة الخطأ التالية في سجل أخطاء SQL Server:

ملاحظة تحدث هذه المشكلة فقط عند محاولة إرفاق قاعدة بيانات تحتوي على مجموعة ملفات تم وضع علامة عليها READ_ONLY. لا تحدث هذه المشكلة عند محاولة نقل قاعدة بيانات READ_ONLY حيث يتم وضع علامة على جميع البيانات READ_ONLY.

السبب

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

الحالة

أقرت Microsoft أن هذه المشكلة تحدث في منتجات Microsoft المسردة في المقطع "تنطبق على".

الحل

معلومات التحديث التراكمي

SQL Server 2012

تم إصدار إصلاح هذه المشكلة لأول مرة في التحديث التراكمي 2 SQL Server 2012. لمزيد من المعلومات حول حزمة التحديث التراكمي هذه، انقر فوق رقم المقالة التالي لعرض المقالة في قاعدة معارف Microsoft:

2703275 حزمة التحديث التراكمي 2 SQL Server 2012Note نظرا لأن الإصدارات تراكمية، يحتوي كل إصدار إصلاح جديد على جميع الإصلاحات العاجلة وجميع إصلاحات الأمان التي تم تضمينها مع إصدار إصلاح SQL Server 2012 السابق. توصي Microsoft بأن تفكر في تطبيق أحدث إصدار إصلاح يحتوي على هذا الإصلاح العاجل. للمزيد من المعلومات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة معارف Microsoft":

2692828 إصدارات SQL Server 2012 التي تم إصدارها بعد إصدار SQL Server 2012 يجب تطبيق إصلاح عاجل SQL Server 2012 على تثبيت SQL Server 2012.

الحل البديل

للتغلب على هذه المشكلة، استخدم إحدى الطرق التالية.الأسلوب 1استعادة نسخة احتياطية من قاعدة البيانات من INST1 على INST2.ملاحظة لا تحدث المشكلة الموضحة في قسم "الأعراض" في SQL Server 2012 عند استعادة نسخة احتياطية من إصدار سابق.الأسلوب 2إجراء ترقية موضعية للإصدار السابق من SQL Server إلى SQL Server 2012.الطريقة 3نقل قاعدة بيانات تحتوي على مجموعة ملفات للقراءة فقط إلى مثيل SQL Server 2012. لإجراء ذلك، اتبع الخطوتين التاليتين:ملاحظة تنفيذ الخطوات من 4 إلى 11 على الخادم الذي يعمل SQL Server 2012. على سبيل المثال، نفذ الخطوات من 4 إلى 11 على INST2.

  1. في INST1، افصل قاعدة البيانات. على سبيل المثال، افصل قاعدة بيانات Test_RO_FG_DB.

  2. انقل ملفات قاعدة البيانات إلى الخادم الذي يستضيف مثيل INST2.

  3. حاول إرفاق قاعدة البيانات ب INST2. يوضح نموذج التعليمات البرمجية التالي كيفية القيام بذلك:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG.mdf' ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' )FOR ATTACH;GO

    ملاحظة ستتلقى رسالة الخطأ 3425 المذكورة في قسم "الأعراض".

  4. في موجه الأوامر، أعد تسمية ملفات قاعدة البيانات. يوضح الأمر النموذجي التالي كيفية القيام بذلك:

    rename Test_RO_FG.mdf original_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf 
  5. في SQL Server Management Studio، قم بإنشاء قاعدة بيانات لها نفس الاسم والبنية الفعلية مثل قاعدة البيانات التي تريد إرفاقها. يوضح نموذج التعليمات البرمجية التالي كيفية القيام بذلك:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO
  6. تعيين قاعدة البيانات إلى غير متصل. للقيام بذلك، قم بتشغيل الأمر التالي:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  7. في موجه الأوامر، أعد تسمية الملفات في قاعدة البيانات الجديدة. يوضح الأمر النموذجي التالي كيفية القيام بذلك:

    rename Test_RO_FG.mdf new_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf 
  8. في موجه الأوامر، أعد تسمية الملفات في قاعدة البيانات التي قمت بنقلها في الخطوة 2. أعد تسمية الملفات لمطابقة قاعدة البيانات التي قمت بإنشائها في الخطوة 4. يوضح الأمر النموذجي التالي كيفية القيام بذلك:

    rename original_Test_RO_FG.mdf Test_RO_FG.mdf rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf 
  9. تعيين قاعدة البيانات إلى ONLINE. للقيام بذلك، قم بتشغيل الأمر التالي:

    ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO 
  10. تحقق من أن قاعدة البيانات متصلة بالإنترنت، وأعد تأسيس وظيفة Service Broker.

  11. احذف ملفات قاعدة البيانات غير المطلوبة. يوضح الأمر النموذجي التالي كيفية القيام بذلك:

    del /P new_Test_RO_FG.mdfdel /P new_Test_RO_FG_File1.ndfdel /P new_Test_RW_FG_File1.ndfdel /P new_Test_RO_FG_log.ldf 

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

  • تحتوي قاعدة البيانات أيضا على إدخالات سجل المعاملات الجديدة من الترقية الفاشلة.

  • تنفيذ الخطوات من 3 إلى 10 على الخادم الذي يقوم بتشغيل إصدار سابق من SQL Server. على سبيل المثال، نفذ الخطوات من 3 إلى 10 على INST1.

  1. انقل ملفات قاعدة البيانات إلى مثيل SQL Server التي تستضيف INST1.

  2. حاول إرفاق قاعدة البيانات ب INST1. يوضح نموذج التعليمات البرمجية التالي كيفية القيام بذلك:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' )FOR ATTACHGO

    ملاحظة ستتلقى رسالة الخطأ 3624 المذكورة في قسم "الأعراض". ستتلقى أيضا رسالة خطأ 1813.

  3. في موجه الأوامر، أعد تسمية ملفات قاعدة البيانات على INST1. يوضح الأمر النموذجي التالي كيفية القيام بذلك:

    rename Test_RO_FG.mdf original_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf 
  4. في SQL Server Management Studio، قم بإنشاء قاعدة بيانات لها نفس الاسم والبنية الفعلية مثل قاعدة البيانات التي تريد إرفاقها. يوضح نموذج التعليمات البرمجية التالي كيفية القيام بذلك:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO
  5. تعيين قاعدة البيانات إلى غير متصل. للقيام بذلك، قم بتشغيل الأمر التالي:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  6. في موجه الأوامر، أعد تسمية الملفات في قاعدة البيانات الجديدة. يوضح الأمر النموذجي التالي كيفية القيام بذلك:

    rename Test_RO_FG.mdf new_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf 
  7. في موجه الأوامر، أعد تسمية الملفات في قاعدة البيانات التي قمت بنقلها في الخطوة 2. أعد تسمية الملفات لمطابقة قاعدة البيانات التي قمت بإنشائها في الخطوة 4. يوضح الأمر النموذجي التالي كيفية القيام بذلك:

    rename original_Test_RO_FG.mdf Test_RO_FG.mdf rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf 
  8. قم بتعيين قاعدة البيانات إلى وضع الطوارئ، وقم بإجراء إصلاح. للقيام بذلك، قم بتشغيل الأمر التالي.ملاحظة تتم إعادة إنشاء سجلات معاملات قاعدة البيانات أثناء هذه الخطوة. قد يؤدي هذا إلى فقدان البيانات. لذلك، نوصي بنسخ قاعدة البيانات احتياطيا قبل تنفيذ هذه الخطوة.

    ALTER DATABASE Test_RO_FG_DB SET EMERGENCYGOALTER DATABASE Test_RO_FG_DB SET SINGLE_USERGODBCC CHECKDB (Test_RO_FG_DB, repair_allow_data_loss) WITH ALL_ERRORMSGSGOALTER DATABASE Test_RO_FG_DB SET MULTI_USERGO 
  9. تحقق من أن قاعدة البيانات متصلة بالإنترنت، وأعد تأسيس وظيفة Service Broker.

  10. احذف ملفات قاعدة البيانات غير المطلوبة. يوضح الأمر النموذجي التالي كيفية القيام بذلك:

    del /P new_Test_RO_FG.mdfdel /P new_Test_RO_FG_File1.ndfdel /P new_Test_RW_FG_File1.ndfdel /P new_Test_RO_FG_log.ldf 

مزيد من المعلومات

هناك عدة خطوات تحدث عند إرفاق قاعدة بيانات بمثيل SQL Server. تتضمن هذه الخطوات استرداد قاعدة البيانات وترقية الملفات من الإصدارات السابقة من SQL Server. في المشكلة الموضحة في قسم "الأعراض"، يبدأ SQL Server 2012 عملية الترقية قبل اكتشاف ملفات القراءة فقط في قاعدة البيانات. تتضمن خطوات الترقية بدء معاملة لمسح بت "إيقاف التشغيل النظيف" في صفحة التمهيد لقاعدة البيانات. لا يمكن للإصدارات السابقة من SQL Server قراءة سجل بدء المعاملة. لذلك، قاعدة البيانات غير قابلة للاستخدام في الإصدارات السابقة من SQL Server، وتنشئ SQL Server الخطأ 3624.الترقيات الموضعية عند وضع علامة للقراءة فقطعلى قاعدة بيانات عند إجراء ترقية موضعية لمثيل SQL Server يحتوي على قاعدة بيانات للقراءة فقط تسمى Test_RO_DB إلى SQL Server 2012، قد تتلقى رسائل خطأ تشبه ما يلي في سجل الأخطاء SQL Server:

في نهاية عملية الترقية، ستكون قاعدة بيانات Test_RO_DB في حالة RECOVERY_PENDING. يجب استخدام الأمر ALTER DATABASE لتعيين قاعدة البيانات إلى READ_WRITE. ثم استخدم الأمر ALTER DATABASE لتعيين قاعدة البيانات إلى READ_ONLY. يتيح هذا لمحرك SQL Server ترقية قاعدة البيانات إلى الإصدار الصحيح.الترقيات الموضعية عندما تحتوي قاعدة بيانات القراءة/الكتابة على مجموعات ملفات تم وضع علامة عليها للقراءة فقطعند إجراء ترقية موضعية إلى SQL Server 2012، قد تتلقى رسائل تشبه ما يلي في سجل الأخطاء SQL Server. تحدث هذه المشكلة عندما يستضيف المثيل السابق SQL Server قاعدة بيانات للقراءة/الكتابة ويحتوي على مجموعات ملفات تم وضع علامة عليها READ_ONLY. ومع ذلك، تنتهي عملية الترقية كما هو متوقع، وتبدأ قاعدة البيانات عبر الإنترنت.ملاحظة في رسالة الخطأ التالية، تسمى قاعدة البيانات Test_RO_FG:

هل تحتاج إلى مزيد من المساعدة؟

الخروج من الخيارات إضافية؟

استكشف مزايا الاشتراك، واستعرض الدورات التدريبية، وتعرف على كيفية تأمين جهازك، والمزيد.