Logga in med Microsoft
Logga in eller skapa ett konto.
Hej,
Välj ett annat konto.
Du har flera konton
Välj det konto som du vill logga in med.

Symptom

Tänk dig följande situation:

  • Du installerar en instans av Microsoft SQL Server 2005, av Microsoft SQL Server 2008 eller Microsoft SQL Server 2008 R2.

  • SQL Server-instansen heter INST1 och hanterar en databas med namnet Test_RO_FG_DB.

  • Databasen innehåller följande fil grupper:

    • Första

    • RO_FG

    • RW_FG

  • Fil gruppen som heter RO_FG är markerad som READ_ONLY.

  • Du installerar en ny instans av Microsoft SQL Server 2012. Den här instansen av SQL Server 2012 heter INST2.

  • Du tar bort Test_RO_FG_DB databasen från INST1.

  • Du försöker koppla Test_RO_FG_DB-databasen till INST2.

  • Du får ett fel meddelande av följande slag:

    Meddelande 3415, nivå 16, tillstånd 2, rad 1Database "Test_RO_FG_DB" kan inte uppgraderas eftersom den är skrivskyddad, innehåller skrivskyddade filer eller om användaren inte har behörighet att ändra vissa av filerna. Gör databasen eller filerna skrivbara och kör återställning igen.

  • Du försöker koppla Test_RO_FG_DB-databasen till INST1.

I det här scenariot kan du inte återansluta databasen till INST1. Och du får följande fel meddelande i SQL Server-felloggen:

Obs! Det här problemet uppstår bara när du försöker bifoga en databas som innehåller en filgrupp som är markerad READ_ONLY. Det här problemet uppstår inte när du försöker flytta en READ_ONLY databas där alla data har marker ATS READ_ONLY.

Orsak

Det här problemet uppstår eftersom SQL Server 2012 inte identifierar den skrivskyddade filgruppen innan den börjar uppgradera databasen. När uppgraderingen har startat skrivs poster till transaktions loggen med SQL Server 2012. Tidigare versioner kan inte läsa de nya transaktions logg posterna.

Status

Microsoft har bekräftat att det här är ett problem i Microsoft-produkterna som nämns i "gäller".

Lösning

Kumulativ uppdaterings information

SQL Server 2012

Korrigeringen för det här problemet släpptes först i kumulativ uppdatering 2 för SQL Server 2012. Om du vill veta mer om det här kumulativa uppdaterings paketet klickar du på följande artikel nummer och läser artikeln i Microsoft Knowledge Base:

2703275 Kumulativt uppdaterings paket 2 för SQL Server 2012Obs! Eftersom build-versionerna är kumulativa innehåller varje ny korrigerings utgåva alla snabb korrigeringar och alla säkerhets korrigeringar som ingick med föregående version av SQL Server 2012. Microsoft rekommenderar att du använder den senaste korrigerings versionen som innehåller den här snabb korrigeringen. Om du vill veta mer klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

2692828 SQL Server 2012-versioner som släpptes efter att SQL Server 2012 släpptes Du måste använda en SQL Server 2012 Hotfix för en installation av SQL Server 2012.

Lösning

Använd någon av följande metoder för att undvika problemet.Metod 1Återställ en säkerhets kopia av databasen från INST1 på INST2.Obs! Problemet som beskrivs i avsnittet "Symptom" inträffar inte i SQL Server 2012 när du återställer en säkerhets kopia från en tidigare version.Metod 2Utför en uppgradering på plats av den tidigare versionen av SQL Server till SQL Server 2012.Metod 3Flytta en databas som innehåller en skrivskyddad filgrupp till en instans av SQL Server 2012. Följ instruktionerna nedan.Obs! Utför steg 4 till 11 på den server som kör SQL Server 2012. Utför till exempel steg 4 till 11 på INST2.

  1. På INST1 tar du bort databasen. Du kan till exempel ta bort Test_RO_FG_DB-databasen.

  2. Flytta databasfilerna till den server som är värd för INST2-instansen.

  3. Försök att bifoga databasen till INST2. Följande exempel kod visar hur du gör detta:

    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

    Obs! Du får fel meddelandet 3425 som nämns i avsnittet "Symptom".

  4. Byt namn på databasfilerna i kommando tolken. I följande exempel visas hur du gör detta:

    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. I SQL Server Management Studio skapar du en databas som har samma namn och fysiska struktur som den databas som du vill bifoga. Följande exempel kod visar hur du gör detta:

    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. Ange databasen som offline. Det gör du genom att köra följande kommando:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  7. Byt namn på filerna i den nya databasen vid kommando tolken. I följande exempel visas hur du gör detta:

    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. Byt namn på filerna i databasen som du flyttade i steg 2 i kommando tolken. Byt namn på filerna så att de matchar den databas som du skapade i steg 4. I följande exempel visas hur du gör detta:

    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. Ange databasen till ONLINE. Det gör du genom att köra följande kommando:

    ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO 
  10. Kontrol lera att databasen är online och återupprätta funktionaliteten för Service Broker.

  11. Ta bort de databasfiler som inte behövs. I följande exempel visas hur du gör detta:

    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 

Metod 4Bifoga en databas som innehåller en skrivskyddad filgrupp till den tidigare instansen av SQL Server. Följ instruktionerna nedan.Kommentarer

  • Databasen innehåller också de nya transaktions logg posterna från den misslyckade uppgraderingen.

  • Utför steg 3 till 10 på den server som kör en tidigare version av SQL Server. Utför till exempel steg 3 till 10 på INST1.

  1. Flytta databasfilerna till instansen av SQL Server som är värd för INST1.

  2. Försök att bifoga databasen till INST1. Följande exempel kod visar hur du gör detta:

    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

    Obs! Du får fel meddelandet 3624 som nämns i avsnittet "Symptom". Du får också ett 1813-felmeddelande.

  3. Byt namn på databasfilerna på INST1 i kommando tolken. I följande exempel visas hur du gör detta:

    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. I SQL Server Management Studio skapar du en databas som har samma namn och fysiska struktur som den databas som du vill bifoga. Följande exempel kod visar hur du gör detta:

    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. Ange databasen som offline. Det gör du genom att köra följande kommando:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  6. Byt namn på filerna i den nya databasen vid kommando tolken. I följande exempel visas hur du gör detta:

    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. Byt namn på filerna i databasen som du flyttade i steg 2 i kommando tolken. Byt namn på filerna så att de matchar den databas som du skapade i steg 4. I följande exempel visas hur du gör detta:

    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. Ställ in databasen i nöd läge och utför en reparation. Det gör du genom att köra följande kommando.Obs! Databas transaktions loggarna återskapas under det här steget. Detta kan leda till data förlust. Därför rekommenderar vi att du säkerhetskopierar databasen innan du utför det här steget.

    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. Kontrol lera att databasen är online och återupprätta funktionaliteten för Service Broker.

  10. Ta bort de databasfiler som inte behövs. I följande exempel visas hur du gör detta:

    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 

Mer information

Det finns flera steg som inträffar när en databas är kopplad till en instans av SQL Server. De här stegen inkluderar återställning av databasen och uppgradering av filer från tidigare versioner av SQL Server. I det problem som beskrivs i avsnittet "Symptom", startar SQL Server 2012 uppgraderingen innan de skrivskyddade filerna i databasen identifieras. Uppgraderings stegen är bland annat att starta en transaktion för att rensa ned "Stäng av"-biten "avslutat" på Start sidan i databasen. Tidigare versioner av SQL Server kan inte läsa BEGIN Transaction-posten. Därför kan databasen inte användas i tidigare versioner av SQL Server och SQL Server genererar 3624-felet.Uppgraderingar på plats när en databas är markerad som skrivskyddadNär du utför en uppgradering på plats av en SQL Server-instans som innehåller en skrivskyddad databas med namnet Test_RO_DB till SQL Server 2012, kan du få fel meddelanden som ser ut ungefär så här i SQL Server-felloggen:

I slutet av uppgraderings processen kommer Test_RO_DB-databasen att vara i RECOVERY_PENDING. Du måste använda kommandot Alter Database för att ange att databasen ska READ_WRITE. Använd sedan kommandot Alter Database för att ange databasen som READ_ONLY. Det gör att SQL Server-motorn uppgraderar databasen till rätt version.Uppgraderingar på plats när en Läs-och skriv databas innehåller filtyper som är markerade som skrivskyddadeNär du genomför en uppgradering på plats till SQL Server 2012 kan du få meddelanden som ser ut ungefär så här i SQL Server-felloggen. Det här problemet uppstår när den tidigare instansen av SQL Server är värd för en Läs-och skriv databas och innehåller filtyper som är markerade READ_ONLY. Men uppgraderingen slutförs som förväntat och databasen startas online.Obs! I följande fel meddelande kallas databasen Test_RO_FG:

Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.

Communities hjälper dig att ställa och svara på frågor, ge feedback och få råd från experter med rika kunskaper.

Hade du nytta av den här informationen?

Hur nöjd är du med språkkvaliteten?
Vad påverkade din upplevelse?
Genom att trycka på skicka, kommer din feedback att användas för att förbättra Microsofts produkter och tjänster. IT-administratören kan samla in denna data. Sekretesspolicy.

Tack för din feedback!

×