Freigeben über


Verhalten komprimierter Sicherungen beim Anfügen von Sicherungen an einen vorhandenen Mediensatz

In diesem Artikel wird das Verhalten komprimierter Sicherungen vorgestellt, wenn Sie Sicherungen an einen vorhandenen Mediensatz anfügen.

Ursprüngliche Produktversion: SQL Server
Ursprüngliche KB-Nummer: 2297053

Zusammenfassung

Eine der Haupteinschränkungen mit komprimierten Sicherungen besteht darin, dass komprimierte und nicht komprimierte Sicherungen in einem Mediensatz nicht koexistieren können. Diese Einschränkung wird in der Sicherungskomprimierung (SQL Server) dokumentiert.

Dieser Artikel ergänzt diese Dokumentation und enthält weitere Informationen zum erwarteten Verhalten komprimierter Sicherungen im Zusammenhang mit der Sicherungskomprimierung der Serverkonfigurationsoption - .

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie fügen eine Sicherung an einen vorhandenen Mediensatz an.
  • Sie verlassen sich auf die Option backup compression default der vom System gespeicherten Prozedur sp_configure, und geben Sie die WITH COMPRESSION Klausel in der Backup-Anweisung nicht an.

In diesem Szenario stellen Sie fest, dass die Sicherung erfolgreich ist, aber möglicherweise in einem anderen Komprimierungszustand als erwartet enden kann.

Weitere Informationen

Wenn Sie eine Sicherung an einen vorhandenen Mediensatz anfügen, erbt die Sicherung die Komprimierungseinstellung von der Medienmenge.

Wenn ein Mediensatz erstellt wird, werden Informationen zur Komprimierungseinstellung dieses Mediensatzes in die Medienkopfdatei geschrieben.

Sicherungen, die an einen vorhandenen Mediensatz übernommen wurden, können nur vorhanden sein, wenn die Komprimierungseinstellung dieser Sicherungen mit dem des Mediensatzes identisch ist. Die folgenden drei Faktoren wirken sich auf das Verhalten komprimierter Sicherungen aus:

Die folgende Tabelle fasst das Verhalten komprimierter Sicherungen basierend auf den drei oben genannten Faktoren zusammen:

Backup-Anweisung Neuer Mediensatz Anfügen an einen vorhandenen Mediensatz mit komprimierter Sicherung Anfügen an einen vorhandenen Mediensatz mit einer nicht komprimierten Sicherung
Klausel auf Anweisungsebene WITH COMPRESSION Die Sicherung ist erfolgreich und wird komprimiert. Erfolgreich Fehler
Klausel auf Anweisungsebene WITH NO_COMPRESSION Die Sicherung ist erfolgreich und wird nicht komprimiert. Fehler Erfolgreich
Back up-Anweisung ohne Komprimierungsklausel auf Anweisungsebene Die Sicherung ist erfolgreich, und die Komprimierung hängt von der Option backup compression default der gespeicherten Systemprozedur ab. sp_configure Die Sicherung ist erfolgreich und wird komprimiert. Die Sicherung ist erfolgreich und wird nicht komprimiert.

Wie Sie aus der obigen Tabelle sehen können, wenn Sie die Option backup compression default auf dem Server verwenden und die komprimierte Sicherung an einen vorhandenen Mediensatz anfügen, schlägt die Sicherung aufgrund eines Konflikts in den Komprimierungseinstellungen nie fehl. Es funktioniert, erbt jedoch die Einstellung in der Kopfzeile des Mediensatzes. Wenn Sie jedoch die Klausel WITH COMPRESSION oder WITH NO_COMPRESSION in Ihrer Sicherungsaufweisung angeben, wird ein Fehler ausgelöst, wenn ein Konflikt zwischen der in dem Mediensatz gespeicherten Sicherung und der aktuellen Sicherung in Bezug auf die Komprimierungseinstellung vorliegt.

Notiz

Sie finden die aktuelle Einstellung für die Option backup compression default , indem Sie die gespeicherte Systemprozedur sp_configure in SQL Server Management Studio ausführen. Wenn Sie eine komprimierte Sicherung an ein vorhandenes Medium anfügen, können Sie die Headerinformationen mithilfe der Anweisung RESTORE HEADERONLY abrufen. Weitere Informationen finden Sie im Abschnitt Beispiele.

Beispiele

Im Folgenden sind einige Skriptbeispiele aufgeführt, die das Verhalten für verschiedene Fälle veranschaulichen. Das Verhalten ist identisch, unabhängig davon, ob es sich bei der Sicherung um ein Band oder einen Datenträger handelt.

  • Beispiel 1: Wenn der Wert der Option backup compression default lautet 0, verwenden Sie die Klausel WITH COMPRESSION auf Anweisungsebene, um eine Sicherung an einen vorhandenen Mediensatz anzufügen, der über eine nicht komprimierte Sicherungseinstellung verfügt:

    1. Überprüfen Sie den Komprimierungswert:

      -- The value of the option "backup compression default" is 0 by default
      sp_configure 'backup compression default'
      
    2. Erstellen Eines neuen Mediensatzes mithilfe der Klausel WITH FORMAT:

      BACKUP DATABASE test TO DISK = N'E:\testbackup.bak'
      WITH FORMAT, INIT,
      NAME = N'testbackup-Full Database Backup', SKIP, NOUNLOAD, STATS = 10
      GO
      
    3. Überprüfen Sie die Sicherung und die Kopfzeile, und sehen Sie, dass der komprimierte Spaltenwert 0 ist:

      RESTORE HEADERONLY FROM DISK = N'E:\testbackup.bak'
      
    4. Sichern Sie die Datenbank test mithilfe der Klausel WITH COMPRESSION:

      -- The backup will fail as compressed and non compressed backups can't be mixed within the same media set
      BACKUP DATABASE test TO DISK = N'E:\testbackup.bak'
      WITH NAME = N'testbackup-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10
      GO
      

      Nach dem Ausführen des SQL-Skripts erhalten Sie möglicherweise Fehlermeldungen 3098 und 3013.

  • Beispiel 2: Anfügen einer Sicherung an denselben Mediensatz beim Festlegen des Optionswerts backup compression default auf 1:

    1. Aktivieren Sie auf backup compression default Serverebene:

      -- The option "backup compression default" as this point is set to 1.
      sp_configure 'backup compression default', 1
      GO
      RECONFIGURE
      GO
      
    2. Fügen Sie die Sicherung an denselben Mediensatz an:

      -- Given that you may expect the backup to be compressed and it will be if it is a new media set.
      -- However, if you have a backup and append the backup to the same media set, 
      -- the backup works but results in an uncompressed backup.
      BACKUP DATABASE test TO DISK = N'E:\testbackup.bak'
      WITH NAME = N'testbackup-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
      GO
      

      Nach dem Ausführen des SQL-Skripts können Sie die folgende Ausgabe sehen:

      Processed two pages for database `test`, file _test_log_ on file 2.
      
      BACKUP DATABASE successfully processed 162 pages in 6.211 seconds (0.203 MB/sec).
      
    3. Überprüfen Sie den Sicherungs- und Mediensatzheader:

      -- Then, you will see that though Server default is set to compressed, the backup given that
      -- it is appended to an existing media set inherits the compression setting of the media set itself.
      -- You may expect this to have failed with the same error as when specifying the clause `WITH COMPRESSION`
      -- in the backup statement given that compressed and non compressed backups can't co-exist in the media set.
      RESTORE HEADERONLY FROM DISK = N'E:\testbackup.bak'
      
  • Beispiel 3: Festlegen des Werts der Option backup compression default auf 0und Anfügen einer Sicherung an einen vorhandenen Mediensatz mit einer komprimierten Sicherungseinstellung:

    1. Erstellen Eines neuen Mediensatzes mithilfe der Klausel WITH FORMAT:

      -- If you create a new media set by using the FORMAT option, the current compression setting is inherited
      BACKUP DATABASE test TO DISK = N'E:\testbackup.bak'
      WITH FORMAT, INIT, NAME = N'testbackup-Full Database Backup', SKIP, NOUNLOAD, STATS = 10
      GO
      
    2. Überprüfen Sie den Sicherungs- und Mediensatzheader:

      RESTORE HEADERONLY FROM DISK = N'E:\testbackup.bak'
      
    3. Legen Sie die Option backup compression default wieder auf 0:

      sp_configure 'backup compression default', 0
      GO
      RECONFIGURE
      GO
      
    4. Sichern Sie die Datenbank test mithilfe der Klausel WITH INITauf demselben Mediensatz:

      -- If you use the clause "WITH INIT", the backup sets are overwritten but the media header is not
      BACKUP DATABASE test TO DISK = N'E:\testbackup.bak'
      WITH INIT, NAME = N'testbackup-Full Database Backup', SKIP, NOUNLOAD, STATS = 10
      GO
      
    5. Überprüfen Sie den Sicherungs- und Mediensatzheader:

      -- Note that even though we changed backup compression default to 0, the old media header is preserved which has it as 1, and the backup goes as compressed
      RESTORE HEADERONLY FROM DISK = N'E:\testbackup.bak'
      
  • Beispiel 4: Komprimierte Sicherungen können nicht mit NT-Sicherungen mit einer nicht komprimierten Einstellung koexistieren:

    1. Erstellen Sie eine NT-Sicherung, und überprüfen Sie den Sicherungsheader:

      -- You can see that it is not a SQL backup and the value of compressed is 0
      RESTORE HEADERONLY FROM TAPE = N'\\.\Tape0'
      
    2. Sichern Sie die Datenbank test mithilfe von Klauseln WITH INIT WITH COMPRESSIONund :

      BACKUP DATABASE test TO TAPE = N'\\.\Tape0'
      WITH INIT, COMPRESSION,
      NAME = N'testbackup-Full Database Backup', SKIP, NOUNLOAD, STATS = 10
      GO
      

      Nach dem Ausführen des SQL-Skripts erhalten Sie möglicherweise Fehlermeldungen 3098 und 3013.

  • Beispiel 5: Nicht komprimierte Sicherungen und NT-Sicherungen mit einer nicht komprimierten Einstellung können koexistieren:

    1. Sichern Sie die Datenbank test ohne Initialisierung und keine Komprimierung in demselben Mediensatz:

      --The backups ( NT and non-compressed backup) can co-exist
      BACKUP DATABASE test TO TAPE = N'\\.\Tape0'
      WITH NAME = N'testbackup-Full Database Backup', SKIP, NOUNLOAD, STATS = 10
      GO
      
    2. Überprüfen Sie den Sicherungsheader, und sehen Sie sich die SQL- und NT-Sicherung an:

      RESTORE HEADERONLY FROM TAPE = N'\\.\Tape0'
      
    3. Erzwingen Sie eine komprimierte Sicherung auf einem Band mit einer NT-Sicherung:

      BACKUP DATABASE test TO TAPE = N'\\.\Tape0'
      WITH COMPRESSION,
      NAME = N'testbackup1 Full Database Backup', SKIP, NOUNLOAD, STATS = 10
      GO
      

      Nach dem Ausführen des SQL-Skripts erhalten Sie möglicherweise Fehlermeldungen 3098 und 3013.

Fehlermeldungen 3098 und 3013

  • Fehlermeldung 3098

    Msg 3098, Level 16, State 2, Line 1  
    The backup cannot be performed because 'COMPRESSION' was requested after the media was formatted with an incompatible structure.
    To append to this media set, either omit 'COMPRESSION' or specify 'NO_COMPRESSION'. Alternatively, you can create a new media set by using WITH FORMAT in your BACKUP statement.
    If you use WITH FORMAT on an existing media set, all its backup sets will be overwritten.  
    
  • Fehlermeldung 3013

    Msg 3013, Level 16, State 1, Line 1  
    BACKUP DATABASE is terminating abnormally.