Преминаване към основното съдържание
Поддръжка
Влизане с 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, Level 16, State 2, Line 1Database "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 потвърди, че това е проблем в продуктите на Microsoft, които са посочени в секцията "важи за".

Решение

Информация за сборна актуализация

SQL Server 2012

Корекцията за този проблем е издадена за първи път в сборна актуализация 2 за SQL Server 2012. За повече информация относно този пакет с кумулативна актуализация щракнете върху следния номер на статия, за да видите статията в базата знания на Microsoft:

2703275 Кумулативен пакет за актуализиране 2 за SQL Server 2012Забележка Тъй като компилациите са кумулативни, всяко ново издание за корекция съдържа всички актуални корекции и всички корекции на защитата, които са били включени при предишното издание на SQL Server 2012 Fix. 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Да местите база данни, която съдържа 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. Вашият ИТ администратор ще може да събира тези данни. Декларация за поверителност.

Благодарим ви за обратната връзка!

×