SQL Server Backup to URL に関するベスト プラクティスとトラブルシューティング

このトピックでは、Azure Blob service との間の SQL Server のバックアップと復元に関するベスト プラクティスとトラブルシューティングのヒントを示します。

SQL Server のバックアップ操作または復元操作に Azure Blob Storage サービスを使用する方法の詳細については、次のトピックを参照してください。

バックアップの管理

バックアップを管理するための一般的な推奨事項を次に示します。

  • BLOB を誤って上書きしないように、各バックアップに一意なファイル名を付けることをお勧めします。

  • コンテナーを作成する際は、アクセス レベルを privateに設定し、必要な認証情報を指定できるユーザーまたはアカウントだけがコンテナー内の BLOB の読み取りや書き込みを実行できるようにすることをお勧めします。

  • Azure 仮想マシンで実行されている SQL Server のインスタンス上の SQL Server データベースの場合、仮想マシンと同じリージョンのストレージ アカウントを使用して、リージョン間のデータ転送のコストがかからないようにします。 また、同じ地域を使用すると、バックアップ操作と復元操作で最適なパフォーマンスを得ることができます。

  • バックアップ処理に失敗すると、無効なバックアップ ファイルが生成されます。 失敗したバックアップを定期的に確認し、BLOB ファイルを削除することをお勧めします。 詳細については、「 Deleting Backup Blob Files with Active Leases」をご覧ください。

  • バックアップ中に WITH COMPRESSION オプションを使用すると、ストレージ コストとストレージのトランザクション コストを最小限に抑えることができます。 また、バックアップ プロセスが完了するまでにかかる時間を短縮することもできます。

大きなファイルの処理

  • SQL Server のバックアップ操作では、複数のスレッドを使用して、Azure Blob Storage サービスへのデータ転送が最適化されます。 ただし、パフォーマンスは ISV の帯域幅やデータベースのサイズなどのさまざまな要因によって異なります。 内部設置型の SQL Server データベースから大きなデータベースまたはファイル グループをバックアップする場合は、最初にスループットのテストを行うことをお勧めします。 Azure Storage SLA には、 考慮できる BLOB の最大処理時間があります。

  • バックアップの管理」セクションで推奨されているように WITH COMPRESSION オプションを使用することは、大きなファイルをバックアップするときに非常に重要です。

BACKUP TO URL または RESTORE FROM URL のトラブルシューティング

ここでは、Azure Blob Storage サービスへのバックアップまたは Azure Blob Storage サービスからの復元を実行するときに発生するエラーを簡単にトラブルシューティングする方法をいくつか示します。

サポートされていないオプションまたは制限事項によるエラーを回避するには、「Azure Blob Storage サービスを使用したバックアップと復元」の記事で、制限事項の一覧と BACKUP コマンドと RESTORE コマンドのサポートに関する情報SQL Server確認してください。

認証エラー:

  • WITH CREDENTIAL は新しいオプションであり、Azure Blob Storage サービスへのバックアップまたは Azure Blob Storage サービスからの復元に必要です。 資格情報に関連するエラーには、次のようなものがあります。

    BACKUP コマンドまたは RESTORE コマンドで指定された資格情報が存在しません。 この問題を回避するには、資格情報が BACKUP ステートメントに存在しない場合に資格情報を作成する T-SQL ステートメントを含めることができます。 使用可能な例を次に示します。

    IF NOT EXISTS  
    (SELECT * FROM sys.credentials   
    WHERE credential_identity = 'mycredential')  
    CREATE CREDENTIAL <credential name> WITH IDENTITY = 'mystorageaccount'  
    ,SECRET = '<storage access key> ;  
    
    
  • 資格情報は存在しますが、BACKUP コマンドの実行に使用されるログイン アカウントに資格情報へのアクセス権限がありません。 Alter any credential 権限がある db_backupoperator ロールのログイン アカウントを使用してください。

  • ストレージ アカウントの名前とキーの値を確認してください。 資格情報に格納されている情報は、バックアップ操作と復元操作で使用する Azure ストレージ アカウントのプロパティの値と一致する必要があります。

バックアップ エラー/障害:

  • 同じ BLOB への並列バックアップを実行すると、バックアップの 1 つが " 初期化に失敗しました " エラーで失敗します。

  • 次のエラー ログを使用して、バックアップ エラーのトラブルシューティングに役立ててください。

    • トレース フラグ 3051 を設定して、次の形式の特定のエラー ログへの記録を有効にします。

      BackupToUrl-instname-dbname-action-PID.log<<><>> アクション>は<次のいずれかです。

      • DB

      • FILELISTONLY

      • LABELONLY

      • HEADERONLY

      • VERIFYONLY

    • 情報を見つけるには、Windows イベント ログ - [アプリケーション ログ] の [SQLBackupToUrl] という名前を確認します。

  • 圧縮されたバックアップから復元するときに、次のエラーが表示される場合があります。

    • SqlException 3284 が発生しました。SqlException 3284 occurred. 重大度: 16、状態: 5
      デバイス 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak' のメッセージ ファイルマークが揃っていない。 バックアップセットの作成に使用したのと同じブロック サイズを指定して RESTORE ステートメントを再実行してください。使用した可能性のある値は '65536' です。

      このエラーを解決するには、BACKUP を指定した BLOCKSIZE = 65536 ステートメントを再実行してください。

  • アクティブなリースを保持している BLOB が原因でバックアップ中に発生するエラー:バックアップ処理に失敗すると、アクティブなリースを保持する BLOB が生成されます。

    BACKUP ステートメントが再実行されると、バックアップ操作が次のようなエラーで失敗することがあります。

    Backup to URL がリモート エンドポイントから例外を受け取りました。 例外メッセージ: リモート サーバーからエラーが返されました。 (412) 現在、BLOB にリースがあり、要求でリース ID が指定されていません.

    アクティブなリースを保持しているバックアップ BLOB ファイルに対して RESTORE ステートメントが実行されると、復元操作は次のようなエラーで失敗します。

    例外メッセージ: リモート サーバーからエラーが返されました: (409) 競合。

    このようなエラーが発生した場合は、BLOB ファイルを削除する必要があります。 このシナリオの詳細とこの問題の解決方法については、「 Deleting Backup Blob Files with Active Leases」を参照してください。

プロキシ エラー

インターネットへのアクセスにプロキシ サーバーを使用している場合、以下の問題が発生することがあります。

プロキシ サーバーによる接続数の設定:

プロキシ サーバーで、1 分あたりの接続数を制限する設定が使用されている場合があります。 Backup to URL プロセスはマルチスレッド プロセスであるため、この制限を超える可能性があります。 制限を超えた場合、プロキシ サーバーは接続を切断します。 この問題を解決するには、プロキシ設定を変更し、SQL Server がプロキシを使用しないようにします。 エラー ログに表示される可能性のある種類またはエラー メッセージの例を次に示します。

  • に書き込みます。http://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak"失敗: URL へのバックアップがリモート エンドポイントから例外を受信しました。 例外メッセージ: 転送接続からデータを読み取ることができません: 接続は閉じられました。

  • ファイル "http://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" で回復不可能な I/O エラーが発生しました。リモート エンドポイントからエラーを収集できませんでした。

    メッセージ 3013、レベル 16、状態 1、行 2

    BACKUP DATABASE が異常終了しています。

  • BackupIoRequest::ReportIoError: バックアップ デバイス 'http://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak' での書き込みエラー。 Backup to URL がリモート エンドポイントから例外を受け取ったオペレーティング システム エラーです。 例外メッセージ: 転送接続からデータを読み取ることができません: 接続は閉じられました。

トレース フラグ 3051 を使用して詳細ログを有効にすると、ログに次のメッセージが表示される場合もあります。

HTTP 状態コード 502、HTTP ステータス メッセージ プロキシ エラー ( 1 分あたりの HTTP 要求数が構成された制限を超えました。ISA サーバー管理者に問い合わせてください。)

選択されていない既定のプロキシ設定:

次に示すようなプロキシ認証エラーを引き起こして、既定の設定が選択されない場合があります。回復不可能な I/O エラーがファイル "http://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" で発生しました。URL へのバックアップでリモート エンドポイントから例外を受信しました。例外メッセージ: リモート サーバーからエラーが返されました: (407)プロキシ認証が必要です

この問題を解決するには、次の手順に従って、Backup to URL プロセスで既定のプロキシ設定を使用できるようにするための構成ファイルを作成します。

  1. 次の xml を使用して、BackuptoURL.exe.configという名前の構成ファイルを作成します。

    <?xml version ="1.0"?>  
    <configuration>   
                    <system.net>   
                                    <defaultProxy enabled="true" useDefaultCredentials="true">   
                                                    <proxy usesystemdefault="true" />   
                                    </defaultProxy>   
                    </system.net>  
    </configuration>  
    
    
  2. SQL Server インスタンスの Binn フォルダーに構成ファイルを配置します。 たとえば、コンピューターの C ドライブにSQL Serverがインストールされている場合は、構成ファイルを C:\Program Files\Microsoft SQL Server\MSSQL12 に配置します。<InstanceName>\MSSQL\Binn

Azure への SQL Server マネージド バックアップのトラブルシューティング

SQL Server マネージド バックアップは Backup to URL の上に構築されるので、前のセクションで説明したトラブルシューティングのヒントは、SQL Server マネージド バックアップを使用するデータベースまたはインスタンスに適用されます。 Azure へのマネージド バックアップSQL Serverトラブルシューティングの詳細については、「Azure へのマネージド バックアップSQL Serverトラブルシューティング」を参照してください。

参照

Azure に格納されたバックアップからの復元