次の方法で共有


既存のメディア セットにバックアップを追加するときの圧縮バックアップの動作

この記事では、既存のメディア セットにバックアップを追加するときの圧縮バックアップの動作について説明します。

元の製品バージョン: SQL Server
元の KB 番号: 2297053

まとめ

圧縮バックアップの主な制限の 1 つは、圧縮バックアップと圧縮されていないバックアップをメディア セットに共存できないことです。 この制限については、「 Backup Compression (SQL Server)」を参照してください。

この記事では、そのドキュメントを補足し、 server 構成オプション - バックアップ圧縮の既定値に関連して、圧縮されたバックアップの予想される動作について詳しく説明

現象

以下のシナリオについて考えてみます。

  • 既存のメディア セットにバックアップを追加します。
  • システム ストアド プロシージャ sp_configureのオプション backup compression defaultに依存しており、バックアップ ステートメントで WITH COMPRESSION 句を指定しないでください。

このシナリオでは、バックアップは成功しましたが、最終的に予想とは異なる圧縮状態になる可能性があります。

詳細

既存のメディア セットにバックアップを追加すると、バックアップはメディア セットから圧縮設定を継承します。

メディア セットが作成されると、このメディア セットの圧縮設定に関する情報がメディア ヘッダー ファイルに書き込まれます。

既存のメディア セットに作成されたバックアップは、これらのバックアップの圧縮設定がメディア セットの圧縮設定と同じ場合にのみ共存できます。 次の 3 つの要因は、圧縮されたバックアップの動作に影響します。

  • SQL Server の構成オプション - Backup 圧縮の既定値

  • バックアップ セット オプション - COMPRESSION または NO_COMPRESSION

  • 既存のメディアの場合、考慮すべき重要な要素は、メディア セットに現在圧縮バックアップと圧縮されていないバックアップのどちらが含まれているかです。

次の表は、上記の 3 つの要因に基づく圧縮バックアップの動作をまとめたものです。

Backup ステートメント 新しいメディア セット 圧縮バックアップがある既存のメディア セットに追加する 圧縮されていないバックアップがある既存のメディア セットに追加する
ステートメント レベル句 WITH COMPRESSION バックアップが成功し、圧縮されます 成功 エラー
ステートメント レベル句 WITH NO_COMPRESSION バックアップは成功し、圧縮されません エラー 成功
ステートメント レベルの圧縮句を使用せずにステートメントをバックアップする バックアップが成功し、圧縮はシステム ストアド プロシージャのオプション backup compression default によって異なります sp_configure バックアップが成功し、圧縮されます バックアップは成功し、圧縮されません

上の表からわかるように、サーバーで backup compression default オプションを使用し、圧縮されたバックアップを既存のメディア セットに追加すると、圧縮設定の不一致が原因でバックアップが失敗することはありません。 機能しますが、メディア セットのヘッダーの設定を継承します。 ただし、バックアップ ステートメントで句 WITH COMPRESSION または WITH NO_COMPRESSION を指定した場合、メディア セットに格納されているバックアップと現在のバックアップが圧縮設定の観点から一致しない場合は、エラーが発生します。

Note

SQL Server Management Studio でシステム ストアド プロシージャ sp_configureを実行すると、オプションbackup compression defaultの現在の設定を確認できます。 既存のメディアに圧縮バックアップを追加する場合は、ステートメント RESTORE HEADERONLY を使用してヘッダー情報を取得できます。 詳細については、「」のセクションを参照してください。

さまざまなケースの動作を示すいくつかのスクリプト例を次に示します。 バックアップがテープかディスクかに関係なく、動作は同じです。

  • 例 1: オプション backup compression default の値が 0されている場合は、ステートメント レベル句 WITH COMPRESSION 使用して、圧縮されていないバックアップ設定を持つ既存のメディア セットにバックアップを追加します。

    1. 圧縮値を確認します。

      -- The value of the option "backup compression default" is 0 by default
      sp_configure 'backup compression default'
      
    2. 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. バックアップとヘッダーを確認し、圧縮された列の値が 0 であることを確認します

      RESTORE HEADERONLY FROM DISK = N'E:\testbackup.bak'
      
    4. WITH COMPRESSIONを使用して、データベース testをバックアップします。

      -- 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
      

      SQL スクリプトを実行すると、 エラー メッセージ 3098 と 3013 が表示されることがあります。

  • 例 2: オプション backup compression default の値を 1 に設定するときに、同じメディア セットにバックアップを追加します。

    1. サーバー レベルで backup compression default を有効にします。

      -- The option "backup compression default" as this point is set to 1.
      sp_configure 'backup compression default', 1
      GO
      RECONFIGURE
      GO
      
    2. 同じメディア セットにバックアップを追加します。

      -- 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
      

      SQL スクリプトを実行すると、次の出力が表示されます。

      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. バックアップとメディア セットのヘッダーを確認します。

      -- 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'
      
  • 例 3: オプション backup compression default の値を 0 に設定し、圧縮されたバックアップ設定を持つ既存のメディア セットにバックアップを追加します。

    1. 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. バックアップとメディア セットのヘッダーを確認します。

      RESTORE HEADERONLY FROM DISK = N'E:\testbackup.bak'
      
    3. オプションbackup compression default0に戻します。

      sp_configure 'backup compression default', 0
      GO
      RECONFIGURE
      GO
      
    4. WITH INITを使用して、データベース testを同じメディア セットにバックアップします。

      -- 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. バックアップとメディア セットのヘッダーを確認します。

      -- 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'
      
  • 例 4: 圧縮されていない設定を持つ NT バックアップと圧縮されたバックアップを共存することはできません。

    1. NT バックアップを実行し、バックアップ ヘッダーを確認します。

      -- You can see that it is not a SQL backup and the value of compressed is 0
      RESTORE HEADERONLY FROM TAPE = N'\\.\Tape0'
      
    2. WITH INIT句とWITH COMPRESSION句を使用して、データベース testを同じメディア セットにバックアップします。

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

      SQL スクリプトを実行すると、 エラー メッセージ 3098 と 3013 が表示されることがあります。

  • 例 5: 圧縮されていないバックアップと、圧縮されていない設定を持つ NT バックアップを共存させることができます。

    1. データベース test を初期化せずに、圧縮なしで同じメディア セットにバックアップします。

      --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. バックアップ ヘッダーを確認し、SQL と NT バックアップを確認します。

      RESTORE HEADERONLY FROM TAPE = N'\\.\Tape0'
      
    3. NT バックアップを使用してテープに圧縮バックアップを強制する:

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

      SQL スクリプトを実行すると、 エラー メッセージ 3098 と 3013 が表示されることがあります。

エラー メッセージ 3098 および 3013

  • エラー メッセージ 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.  
    
  • エラー メッセージ 3013

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