Перейти к основному контенту
Поддержка
Войдите с помощью учетной записи Майкрософт
Войдите или создайте учетную запись.
Здравствуйте,
Выберите другую учетную запись.
У вас несколько учетных записей
Выберите учетную запись, с помощью которой нужно войти.

Проблемы

Рассмотрим следующий сценарий.

  • Вы установили экземпляр 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.

  • При этом появляется следующее сообщение об ошибке:

    Сообщение 3415, уровень 16, состояние 2, строка 1Database "Test_RO_FG_DB" не может быть обновлена, так как она доступна только для чтения, содержит файлы, доступные только для чтения, или у пользователя нет разрешений на изменение некоторых файлов. Сделайте базу данных или файлы записываемыми и повторно запустите восстановление.

  • Вы пытаетесь снова подключить базу данных Test_RO_FG_DB к INST1.

В этом случае восстановить базу данных в INST1 невозможно. Кроме того, в журнале ошибок SQL Server появляется следующее сообщение об ошибке:

Примечание. Эта проблема возникает только при попытке прикрепить базу данных, которая содержит файловую группу, помеченную READ_ONLY. Эта проблема не возникает при попытке переместить базу данных READ_ONLY, в которой все данные помечены READ_ONLY.

Причина

Эта проблема возникает из-за того, что SQL Server 2012 не обнаруживает файловую группу, предназначенную только для чтения, перед тем как она начнет обновлять базу данных. После того как обновление будет запущено, SQL Server 2012 записывает записи в журнал транзакций. В более ранних версиях не удается прочитать новые записи журнала транзакций.

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".

Решение

Сведения о накопительном пакете обновления

SQL Server 2012

Исправление для этой проблемы впервые выпущено в накопительном обновлении 2 для SQL Server 2012. Чтобы получить дополнительные сведения об этом накопительном пакете обновления, щелкните следующий номер статьи базы знаний Майкрософт:

2703275 Накопительный пакет обновления 2 (SP2) для SQL Server 2012Примечание. Так как сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2012. Корпорация 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<c0 />Повторно присоедините базу данных, содержащую файловую группу, предназначенную только для чтения, с предыдущим экземпляром 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. Установите для базы данных режим EMERGENCY и выполните восстановление. Для этого введите в командной строке указанную ниже команду.Примечание. На этом этапе журналы транзакций базы данных перестраиваются. Это может привести к потере данных. Поэтому перед выполнением этого действия рекомендуется создать резервную копию базы данных.

    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. Для установки READ_WRITE базы данных необходимо использовать команду ALTER DATABASE . Затем с помощью команды ALTER DATABASE настройте базу данных в READ_ONLY. Это позволяет подсистеме SQL Server обновить базу данных до правильной версии.Обновление на месте в случае, если база данных для чтения и записи имеет группы файлов, помеченные как доступные только для чтенияПри обновлении на месте до SQL Server 2012 в журнале ошибок SQL Server могут появиться сообщения, аналогичные указанным ниже. Эта проблема возникает в том случае, если более ранний экземпляр SQL Server размещает базу данных для чтения и записи и содержит группы файлов, помеченные как READ_ONLY. Однако процесс обновления завершается должным образом, и база данных запускается в сети.Примечание. В приведенном ниже сообщении об ошибке имя базы данных Test_RO_FG:

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

Спасибо за ваш отзыв!

×