Перейти до основного
Підтримка
Вхід
Вхід за допомогою облікового запису Microsoft
Увійдіть або створіть обліковий запис.
Вітаємо,
Виберіть інший обліковий запис.
У вас є кілька облікових записів
Виберіть обліковий запис, за допомогою якого потрібно ввійти.

Ознаки

Розглянемо такий сценарій:

  • Ви інсталюєте екземпляр Microsoft SQL Server 2005, Microsoft SQL Server 2008 або Microsoft SQL Server 2008 R2.

  • Екземпляра SQL Server називається INST1 і хостів база даних, яка називається Test_RO_FG_DB.

  • База даних містить такі групи файлів:

    • Первинний

    • RO_FG

    • RW_FG

  • Група filegroup, яка називається 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 з'являється таке повідомлення про помилку:

Примітка. Ця проблема виникає, лише якщо ви намагаєтесь вкласти базу даних, яка містить позначку filegroup, позначену READ_ONLY. Ця проблема не виникає, коли ви намагаєтеся перенести READ_ONLY базу даних, у якій всі дані позначаються READ_ONLY.

Причина

Ця проблема виникає через те, що SQL Server 2012 не виявляє файл filegroup лише для читання ", перш ніж він почне оновлювати базу даних. Після початку оновлення SQL Server 2012 записує елементи до журналу транзакцій. Попередні версії не можуть читати нові запису журналу транзакцій.

Стан

Корпорація Майкрософт підтвердила, що це проблема в продуктах Microsoft, перелічених у розділі "застосовується до".

Спосіб вирішення

Відомості про Сукупне оновлення

SQL Server 2012

Виправлення для цієї проблеми уперше випущено в сукупному оновленні 2 для SQL Server 2012. Щоб отримати докладні відомості про цей пакет накопичувальне оновлення, клацніть номер статті в базі знань Microsoft Knowledge Base:

2703275 Сукупний пакет оновлень пакета 2 для SQL Server 2012Примітка. Оскільки будує сукупну версію, кожен новий випуск Fix містить всі виправлення та виправлення безпеки, які були включені до попередньої версії SQL Server 2012 Fix Release. Корпорація Майкрософт рекомендує застосувати найновішу версію виправлення, що містить це виправлення. Щоб отримати докладні відомості, клацніть номер цієї статті бази знань 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.Переміщення бази даних, яка містить файл filegroup, доступний лише для читання екземпляра 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 Створіть базу даних, яка має однакові імена та фізичну структуру, як базу даних, яку потрібно вкласти. Наведений нижче зразок коду показує, як це зробити:

    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. Настроювання бази даних на веб-сайті. Щоб виконати цю дію, виконайте таку команду:

    ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO 
  10. Переконайтеся, що база даних доступна в онлайні, і відновіть функціональність служби брокерів.

  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Повторно підключити базу даних, яка містить файл filegroup, доступний лише для читання, до попередньої версії 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 Створіть базу даних, яка має однакові імена та фізичну структуру, як базу даних, яку потрібно вкласти. Наведений нижче зразок коду показує, як це зробити:

    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. Переконайтеся, що база даних доступна в онлайні, і відновіть функціональність служби брокерів.

  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 стані. Щоб настроїти базу даних для READ_WRITE, потрібно використати команду " змінити БАЗУ даних ". Потім скористайтеся командою " змінити БАЗУ даних ", щоб настроїти базу даних для READ_ONLY. Це дозволяє двигуну SQL Server оновити базу даних до правильної версії.Оновлення на місці, якщо база даних для читання та записування містить групи файлів, позначені як доступні лише для читанняКоли ви виконуєте оновлення до SQL Server 2012, ви можете отримувати повідомлення, які нагадують такі елементи в журналі помилок SQL Server. Ця проблема виникає, якщо попередній екземпляр сервера SQL Server хостів в базі даних читання та записування, а також містить групи файлів, позначені READ_ONLY. Однак процес оновлення завершується належним чином, а база даних почне працювати в Інтернеті.Примітка. У наведеному нижче повідомленні про помилку база даних має назву Test_RO_FG:

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.

Спільноти допомагають ставити запитання й відповідати на них, надавати відгуки та дізнаватися думки висококваліфікованих експертів.

Чи ця інформація була корисною?

Наскільки ви задоволені якістю мови?
Що вплинуло на ваші враження?
Натиснувши кнопку "Надіслати", ви надасте свій відгук для покращення продуктів і служб Microsoft. Ваш ІТ-адміністратор зможе збирати ці дані. Декларація про конфіденційність.

Дякуємо за відгук!

×