Symptomer
Overvej følgende scenarie:
-
Du installerer en forekomst af Microsoft SQL Server 2005, Microsoft SQL Server 2008 eller Microsoft SQL Server 2008 R2.
-
Forekomsten af SQL Server kaldes INST1 og hoster en database, der hedder Test_RO_FG_DB.
-
Databasen indeholder følgende filgrupper:
-
Primære
-
RO_FG
-
RW_FG
-
-
Den filgruppe, der hedder RO_FG, er markeret som READ_ONLY.
-
Du installerer en ny forekomst af Microsoft SQL Server 2012. Denne forekomst af SQL Server 2012 kaldes INST2.
-
Du fjerner Test_RO_FG_DB-databasen fra INST1.
-
Du forsøger at vedhæfte Test_RO_FG_DB-databasen til INST2.
-
Du får vist en fejlmeddelelse, der ligner følgende:
Msg 3415, niveau 16, tilstand 2, linje 1-database"Test_RO_FG_DB" kan ikke opgraderes, fordi den er skrivebeskyttet, har skrivebeskyttede filer, eller brugeren ikke har tilladelse til at ændre nogle af filerne. Gør databasen eller filerne skrivbare, og kør genoprettelsen igen.
-
Du forsøger at tilslutte den Test_RO_FG_DB database til INST1 igen.
I dette scenarie kan du ikke tilslutte databasen til INST1 igen. Og du får vist følgende fejlmeddelelse i SQL Server fejllog:
Bemærk! Dette problem opstår kun, når du forsøger at vedhæfte en database, der indeholder en filgruppe, der er markeret READ_ONLY. Dette problem opstår ikke, når du forsøger at flytte en READ_ONLY database, hvor alle dataene er markeret READ_ONLY.
Årsag
Dette problem opstår, fordi SQL Server 2012 ikke registrerer den skrivebeskyttede filgruppe, før den begynder at opgradere databasen. Når opgraderingen er startet, skriver SQL Server 2012 poster til transaktionsloggen. Tidligere versioner kan ikke læse de nye transaktionslogposter.
Status
Microsoft har bekræftet, at problemet findes i de Microsoft-produkter, der er angivet i afsnittet "Gælder for".
Løsning
Oplysninger om samlet opdatering
SQL Server 2012
Rettelsen til dette problem blev først udgivet i Samlet opdatering 2 til SQL Server 2012. Du kan få flere oplysninger om denne samlede opdateringspakke ved at klikke på nedenstående artikelnummer for at få vist artiklen i Microsoft Knowledge Base:
2703275 Samlet opdateringspakke 2 til SQL Server 2012Note Da builds er kumulative, indeholder hver ny rettelse alle de hotfixes og alle de sikkerhedsrettelser, der fulgte med den tidligere rettelse til SQL Server 2012. Microsoft anbefaler, at du overvejer at anvende den nyeste rettelse, der indeholder dette hotfix. Få flere oplysninger ved at klikke på følgende artikelnummer for at få vist artiklen i Microsoft Knowledge Base:
2692828 De SQL Server 2012-builds, der blev udgivet efter SQL Server 2012 blev udgivet. Du skal anvende et hotfix fra SQL Server 2012 på en installation af SQL Server 2012.
Løsning
Du kan løse dette problem ved at bruge en af følgende metoder.Metode 1Gendan en sikkerhedskopi af databasen fra INST1 på INST2.Bemærk! Det problem, der er beskrevet i afsnittet "Symptomer", forekommer ikke i SQL Server 2012, når du gendanner en sikkerhedskopi fra en tidligere version.Metode 2Udfør en lokal opgradering af den tidligere version af SQL Server til SQL Server 2012.Metode 3Flyt en database, der indeholder en skrivebeskyttet filgruppe, til en forekomst af SQL Server 2012. Det kan du gøre ved at benytte følgende fremgangsmåde.Bemærk Udfør trin 4 til 11 på den server, der kører SQL Server 2012. Udfør f.eks. trin 4 til 11 på INST2.
-
Fjern databasen på INST1. Fjern f.eks. Test_RO_FG_DB-databasen.
-
Flyt databasefilerne til den server, der er vært for INST2-forekomsten.
-
Prøv at knytte databasen til INST2. Følgende eksempelkode viser, hvordan du gør dette:
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
Bemærk! Du får vist 3425-fejlmeddelelsen, der er nævnt i afsnittet "Symptomer".
-
Omdøb databasefilerne ved en kommandoprompt. Følgende eksempelkommando viser, hvordan du gør dette:
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
-
I SQL Server Management Studio skal du oprette en database med samme navn og fysiske struktur som den database, du vil vedhæfte. Følgende eksempelkode viser, hvordan du gør dette:
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
-
Indstil databasen til offline. Det gør du ved at køre følgende kommando:
ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO
-
Omdøb filerne i den nye database ved en kommandoprompt. Følgende eksempelkommando viser, hvordan du gør dette:
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
-
Omdøb de filer i databasen, du flyttede i trin 2, ved en kommandoprompt. Omdøb filerne, så de passer til den database, du oprettede i trin 4. Følgende eksempelkommando viser, hvordan du gør dette:
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
-
Indstil databasen til ONLINE. Det gør du ved at køre følgende kommando:
ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO
-
Kontrollér, at databasen er online, og gentabler funktionaliteten i Service Broker.
-
Slet de databasefiler, der ikke er nødvendige. Følgende eksempelkommando viser, hvordan du gør dette:
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
Metode 4Gentilslut en database, der indeholder en skrivebeskyttet filgruppe, til den tidligere forekomst af SQL Server. Det kan du gøre ved at benytte følgende fremgangsmåde.Noter
-
Databasen indeholder også de nye transaktionslogposter fra den mislykkede opgradering.
-
Udfør trin 3 til 10 på den server, der kører en tidligere version af SQL Server. Udfør f.eks. trin 3 til 10 på INST1.
-
Flyt databasefilerne til forekomsten af SQL Server, der er vært for INST1.
-
Prøv at knytte databasen til INST1. Følgende eksempelkode viser, hvordan du gør dette:
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
Bemærk! Du får vist 3624-fejlmeddelelsen, der er nævnt i afsnittet "Symptomer". Du modtager også en 1813-fejlmeddelelse.
-
Omdøb databasefilerne på INST1 ved en kommandoprompt. Følgende eksempelkommando viser, hvordan du gør dette:
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
-
I SQL Server Management Studio skal du oprette en database med samme navn og fysiske struktur som den database, du vil vedhæfte. Følgende eksempelkode viser, hvordan du gør dette:
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
-
Indstil databasen til offline. Det gør du ved at køre følgende kommando:
ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO
-
Omdøb filerne i den nye database ved en kommandoprompt. Følgende eksempelkommando viser, hvordan du gør dette:
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
-
Omdøb de filer i databasen, du flyttede i trin 2, ved en kommandoprompt. Omdøb filerne, så de passer til den database, du oprettede i trin 4. Følgende eksempelkommando viser, hvordan du gør dette:
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
-
Indstil databasen til NØDTILSTAND, og udfør en reparation. Det gør du ved at køre følgende kommando:Bemærk! Databasetransaktionslogfiler genopbygges under dette trin. Dette kan medføre tab af data. Derfor anbefaler vi, at du sikkerhedskopier databasen, før du udfører dette trin.
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
-
Kontrollér, at databasen er online, og gentabler funktionaliteten i Service Broker.
-
Slet de databasefiler, der ikke er nødvendige. Følgende eksempelkommando viser, hvordan du gør dette:
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
Flere oplysninger
Der er flere trin, der udføres, når en database er knyttet til en forekomst af SQL Server. Disse trin omfatter gendannelse af databasen og opgradering af filer fra tidligere versioner af SQL Server. I det problem, der er beskrevet i afsnittet "Symptomer", starter SQL Server 2012 opgraderingsprocessen, før de skrivebeskyttede filer i databasen registreres. Opgraderingstrinnene omfatter start af en transaktion for at rydde bitten "ren lukning" på startsiden for databasen. Tidligere versioner af SQL Server kan ikke læse startposteringsposten. Databasen kan derfor ikke bruges i tidligere versioner af SQL Server, og SQL Server genererer fejlen 3624.Direkte opgraderinger, når en database er markeret som skrivebeskyttetNår du udfører en lokal opgradering af en forekomst af SQL Server, der indeholder en skrivebeskyttet database, der hedder Test_RO_DB til SQL Server 2012, modtager du muligvis fejlmeddelelser, der ligner følgende i fejlloggen for SQL Server:
Når opgraderingen er afsluttet, er databasen til Test_RO_DB i RECOVERY_PENDING tilstand. Du skal bruge kommandoen ALTER DATABASE for at indstille databasen til at READ_WRITE. Brug derefter kommandoen ALTER DATABASE til at indstille databasen til at READ_ONLY. Dette gør det muligt for SQL Server programmet at opgradere databasen til den korrekte version.Lokal opgraderinger, når en læse-/skrivedatabase indeholder filgrupper, der er markeret som skrivebeskyttedeNår du udfører en lokal opgradering til SQL Server 2012, kan du modtage meddelelser, der ligner følgende i fejlloggen for SQL Server. Dette problem opstår, når den tidligere forekomst af SQL Server hoster en læse-/skrivedatabase og indeholder filgrupper, der er markeret READ_ONLY. Opgraderingsprocessen afsluttes dog som forventet, og databasen starter online.Bemærk! I følgende fejlmeddelelse hedder databasen Test_RO_FG: