Bei Microsoft anmelden
Melden Sie sich an, oder erstellen Sie ein Konto.
Hallo,
Wählen Sie ein anderes Konto aus.
Sie haben mehrere Konten.
Wählen Sie das Konto aus, mit dem Sie sich anmelden möchten.

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie installieren eine Instanz von Microsoft SQL Server 2005, Microsoft SQL Server 2008 oder Microsoft SQL Server 2008 R2.

  • Die Instanz von SQL Server hat den Namen inst1 und hostet eine Datenbank mit dem Namen Test_RO_FG_DB.

  • Die Datenbank enthält die folgenden Dateigruppen:

    • Primär

    • RO_FG

    • RW_FG

  • Die Dateigruppe mit dem Namen RO_FG wird als READ_ONLY markiert.

  • Sie installieren eine neue Instanz von Microsoft SQL Server 2012. Diese Instanz von SQL Server 2012 hat den Namen INST2.

  • Sie lösen die Test_RO_FG_DB-Datenbank von inst1.

  • Sie versuchen, die Test_RO_FG_DB-Datenbank an INST2 anzufügen.

  • Sie erhalten eine Fehlermeldung, die wie folgt aussieht:

    Msg 3415, Ebene 16, Zustand 2, Zeile 1Database "Test_RO_FG_DB" kann nicht aktualisiert werden, da sie schreibgeschützt ist, schreibgeschützte Dateien enthält oder der Benutzer keine Berechtigungen zum Ändern einiger Dateien hat. Erstellen Sie die Datenbank oder Dateien, und führen Sie die Wiederherstellung erneut aus.

  • Sie versuchen, die Test_RO_FG_DB-Datenbank erneut an inst1 anzufügen.

In diesem Szenario können Sie die Datenbank nicht erneut an inst1 anfügen. Und im SQL Server-Fehlerprotokoll wird die folgende Fehlermeldung angezeigt:

Hinweis Dieses Problem tritt nur auf, wenn Sie versuchen, eine Datenbank anzufügen, die eine Dateigruppe enthält, die READ_ONLY markiert ist. Dieses Problem tritt nicht auf, wenn Sie versuchen, eine READ_ONLY Datenbank zu verschieben, in der alle Daten READ_ONLY markiert sind.

Ursache

Dieses Problem tritt auf, weil SQL Server 2012 die schreibgeschützte Dateigruppe nicht erkennt, bevor Sie mit dem Upgrade der Datenbank beginnt. Nach dem Start des Upgrades schreibt SQL Server 2012 Einträge in das Transaktionsprotokoll. In früheren Versionen können die neuen Transaktionsprotokolleinträge nicht gelesen werden.

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.

Fehlerbehebung

Informationen zum kumulativen Update

SQL Server 2012

Der Fix für dieses Problem wurde erstmals im kumulativen Update 2 für SQL Server 2012 veröffentlicht. Wenn Sie weitere Informationen zu diesem kumulativen Updatepaket erhalten möchten, klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:

2703275 Kumulatives Updatepaket 2 für SQL Server 2012Hinweis Da die Builds kumulativ sind, enthält jede neue Fix-Version alle Hotfixes und alle Sicherheitsupdates, die in der vorherigen Version von SQL Server 2012 behoben wurden. Microsoft empfiehlt, die neueste Fix-Version zu verwenden, die diesen Hotfix enthält. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:

2692828 Die SQL Server 2012-Builds, die nach der Veröffentlichung von SQL Server 2012 veröffentlicht wurden Sie müssen einen SQL Server 2012-Hotfix auf eine Installation von SQL Server 2012 anwenden.

Problemumgehung

Verwenden Sie eine der folgenden Methoden, um dieses Problem zu umgehen.Methode 1Wiederherstellen einer Sicherungskopie der Datenbank von inst1 auf INST2.Hinweis Das im Abschnitt "Problembeschreibung" beschriebene Problem tritt in SQL Server 2012 nicht auf, wenn Sie eine Sicherung aus einer früheren Version wiederherstellen.Methode 2Führen Sie ein in-Place-Upgrade der früheren Version von SQL Server auf SQL Server 2012 aus.Methode 3Verschieben Sie eine Datenbank, die eine schreibgeschützte Dateigruppe enthält, in eine Instanz von SQL Server 2012. Gehen Sie hierzu wie folgt vor.Hinweis Führen Sie die Schritte 4 bis 11 auf dem Server aus, auf dem SQL Server 2012 ausgeführt wird. Führen Sie beispielsweise die Schritte 4 bis 11 auf INST2 aus.

  1. Trennen Sie die Datenbank auf inst1. Trennen Sie beispielsweise die Test_RO_FG_DB-Datenbank.

  2. Verschieben Sie die Datenbankdateien auf den Server, der die INST2-Instanz hostet.

  3. Versuchen Sie, die Datenbank an INST2 anzufügen. Der folgende Beispielcode zeigt, wie Sie dazu vorgehen:

    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

    Hinweis Sie erhalten die 3425-Fehlermeldung, die im Abschnitt "Symptom" erwähnt wird.

  4. Benennen Sie die Datenbankdateien an einer Eingabeaufforderung um. Der folgende Beispielbefehl zeigt die Vorgehensweise:

    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. Erstellen Sie in SQL Server Management Studio eine Datenbank mit dem gleichen Namen und der gleichen physikalischen Struktur wie die Datenbank, die Sie anfügen möchten. Der folgende Beispielcode zeigt, wie Sie dazu vorgehen:

    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. Setzen Sie die Datenbank auf "Offline". Führen Sie dazu den folgenden Befehl aus:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  7. Benennen Sie die Dateien in der neuen Datenbank an einer Eingabeaufforderung um. Der folgende Beispielbefehl zeigt die Vorgehensweise:

    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. Benennen Sie an einer Eingabeaufforderung die Dateien in der Datenbank um, die Sie in Schritt 2 verschoben haben. Benennen Sie die Dateien so um, dass Sie mit der Datenbank übereinstimmen, die Sie in Schritt 4 erstellt haben. Der folgende Beispielbefehl zeigt die Vorgehensweise:

    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. Setzen Sie die Datenbank auf Online. Führen Sie dazu den folgenden Befehl aus:

    ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO 
  10. Überprüfen Sie, ob die Datenbank online ist, und stellen Sie die Service Broker-Funktionalität wieder her.

  11. Löschen Sie die Datenbankdateien, die nicht benötigt werden. Der folgende Beispielbefehl zeigt die Vorgehensweise:

    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 

Methode 4Fügen Sie eine Datenbank, die eine schreibgeschützte Dateigruppe enthält, erneut an die frühere Instanz von SQL Server an. Gehen Sie hierzu wie folgt vor.Hinweise

  • Die Datenbank enthält auch die neuen Transaktionsprotokolleinträge aus dem fehlerhaften Upgrade.

  • Führen Sie die Schritte 3 bis 10 auf dem Server aus, auf dem eine frühere Version von SQL Server ausgeführt wird. Führen Sie beispielsweise die Schritte 3 bis 10 auf inst1 aus.

  1. Verschieben Sie die Datenbankdateien in die Instanz von SQL Server, die inst1 hostet.

  2. Versuchen Sie, die Datenbank an inst1 anzufügen. Der folgende Beispielcode zeigt, wie Sie dazu vorgehen:

    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

    Hinweis Sie erhalten die 3624-Fehlermeldung, die im Abschnitt "Symptom" erwähnt wird. Außerdem wird eine 1813-Fehlermeldung angezeigt.

  3. Benennen Sie die Datenbankdateien an einer Eingabeaufforderung in inst1 um. Der folgende Beispielbefehl zeigt die Vorgehensweise:

    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. Erstellen Sie in SQL Server Management Studio eine Datenbank mit dem gleichen Namen und der gleichen physikalischen Struktur wie die Datenbank, die Sie anfügen möchten. Der folgende Beispielcode zeigt, wie Sie dazu vorgehen:

    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. Setzen Sie die Datenbank auf "Offline". Führen Sie dazu den folgenden Befehl aus:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  6. Benennen Sie die Dateien in der neuen Datenbank an einer Eingabeaufforderung um. Der folgende Beispielbefehl zeigt die Vorgehensweise:

    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. Benennen Sie an einer Eingabeaufforderung die Dateien in der Datenbank um, die Sie in Schritt 2 verschoben haben. Benennen Sie die Dateien so um, dass Sie mit der Datenbank übereinstimmen, die Sie in Schritt 4 erstellt haben. Der folgende Beispielbefehl zeigt die Vorgehensweise:

    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. Setzen Sie die Datenbank in den Notfallmodus, und führen Sie eine Reparatur durch. Führen Sie hierzu den folgenden Befehl aus:Hinweis Die Daten Bank Transaktionsprotokolle werden in diesem Schritt neu erstellt. Dies kann zu einem Datenverlust führen. Daher empfiehlt es sich, die Datenbank zu sichern, bevor Sie diesen Schritt ausführen.

    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. Überprüfen Sie, ob die Datenbank online ist, und stellen Sie die Service Broker-Funktionalität wieder her.

  10. Löschen Sie die Datenbankdateien, die nicht benötigt werden. Der folgende Beispielbefehl zeigt die Vorgehensweise:

    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 

Weitere Informationen

Es gibt mehrere Schritte, die auftreten, wenn eine Datenbank an eine Instanz von SQL Server angefügt wird. Zu diesen Schritten gehören das erneute Herstellen der Datenbank und das Upgrade der Dateien aus früheren Versionen von SQL Server. In dem Problem, das im Abschnitt "Symptom" beschrieben ist, startet SQL Server 2012 den Upgradevorgang, bevor die schreibgeschützten Dateien in der Datenbank erkannt werden. Die Upgrade-Schritte umfassen das Starten einer Transaktion, um das Bit "sauber Herunterfahren" auf der Startseite der Datenbank zu löschen. In früheren Versionen von SQL Server kann der BEGIN-Transaktions Eintrag nicht gelesen werden. Daher ist die Datenbank in früheren Versionen von SQL Server nicht verwendbar, und SQL Server generiert den 3624-Fehler.In-Place-Upgrades, wenn eine Datenbank schreibgeschützt markiert istWenn Sie ein in-Place-Upgrade einer Instanz von SQL Server durchführen, die eine schreibgeschützte Datenbank mit dem Namen Test_RO_DB zu SQL Server 2012 enthält, erhalten Sie möglicherweise Fehlermeldungen, die im SQL Server-Fehlerprotokoll wie folgt aussehen:

Am Ende des Aktualisierungsprozesses befindet sich die Test_RO_DB-Datenbank im RECOVERY_PENDING Zustand. Sie müssen den Befehl ALTER DATABASE verwenden, um die Datenbank auf READ_WRITE zu setzen. Verwenden Sie dann den Befehl ALTER DATABASE , um die Datenbank auf READ_ONLY zu setzen. Dadurch kann das SQL Server-Modul die Datenbank auf die richtige Version aktualisieren.In-Place-Upgrades, wenn eine Datenbank mit Lese-/Schreibzugriff Dateigruppen enthält, die als schreibgeschützt markiert sindWenn Sie ein in-Place-Upgrade auf SQL Server 2012 durchführen, erhalten Sie möglicherweise Nachrichten, die im SQL Server-Fehlerprotokoll wie folgt aussehen. Dieses Problem tritt auf, wenn die frühere Instanz von SQL Server eine Datenbank mit Lese-/Schreibzugriff hostet und Dateigruppen enthält, die READ_ONLY gekennzeichnet sind. Der Aktualisierungsvorgang wird jedoch wie erwartet abgeschlossen, und die Datenbank wird online gestartet.Hinweis In der folgenden Fehlermeldung wird die Datenbank mit dem Namen Test_RO_FG:

Benötigen Sie weitere Hilfe?

Möchten Sie weitere Optionen?

Erkunden Sie die Abonnementvorteile, durchsuchen Sie Trainingskurse, erfahren Sie, wie Sie Ihr Gerät schützen und vieles mehr.

In den Communities können Sie Fragen stellen und beantworten, Feedback geben und von Experten mit umfassendem Wissen hören.

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Sprachqualität?
Was hat Ihre Erfahrung beeinflusst?
Wenn Sie auf "Absenden" klicken, wird Ihr Feedback zur Verbesserung von Produkten und Diensten von Microsoft verwendet. Ihr IT-Administrator kann diese Daten sammeln. Datenschutzbestimmungen.

Vielen Dank für Ihr Feedback!

×