バックアップと復元に関するベスト プラクティス (Windows Azure BLOB ストレージ サービス)
このトピックには、Windows Azure BLOB サービスとの間の SQL Server のバックアップと復元に関するベスト プラクティスとトラブルシューティングのヒントを示しています。
SQL Server のバックアップ操作または復元操作に Windows Azure BLOB スレージ サービスを使用する方法の詳細については、次のトピックを参照してください。
バックアップの管理
バックアップを管理するための一般的な推奨事項を次に示します。
BLOB を誤って上書きしないように、各バックアップに一意なファイル名を付けることをお勧めします。
Windows Azure Blob コンテナーを作成する際は、アクセス レベルを private に設定し、必要な認証情報を指定できるユーザーまたはアカウントだけがコンテナー内の BLOB の読み取りや書き込みを実行できるようにすることをお勧めします。
Windows Azure バーチャル マシンで実行している SQL Server インスタンス上のデータベースでは、バーチャル マシンと同じ地域のストレージ アカウントを使用して、地域間のデータ転送コストを回避してください。 また、同じ地域を使用すると、バックアップ操作と復元操作で最適なパフォーマンスを得ることができます。
バックアップ処理に失敗すると、無効なバックアップ ファイルが生成されます。 失敗したバックアップを定期的に確認し、BLOB ファイルを削除することをお勧めします。 詳細については、「アクティブなリースを保持しているバックアップ BLOB ファイルの削除」を参照してください。
バックアップ中に WITH COMPRESSION オプションを使用すると、ストレージ コストとストレージのトランザクション コストを最小限に抑えることができます。 また、バックアップ プロセスが完了するまでにかかる時間を短縮することもできます。
大きなファイルの処理
SQL Server のバックアップ操作では、複数のスレッドを使用して、Windows Azure BLOB ストレージ サービスへのデータ転送を最適化します。 ただし、パフォーマンスは ISV の帯域幅やデータベースのサイズなどのさまざまな要因によって異なります。 内部設置型 SQL Server データベースから大きなデータベースまたはファイル グループをバックアップする場合は、最初にスループットのテストを行うことをお勧めします。 Windows Azure ストレージ SLA には BLOB の最大処理時間が示されているため、考慮に入れておくことができます。
「バックアップの管理」セクションで推奨している方法で WITH COMPRESSION オプションを使用することは、大きなファイルをバックアップするときに非常に重要です。
復元の最適化
復元の書き込み時間を短縮するには、SQL Server ユーザー アカウントに [ボリュームの保守タスクを実行] ユーザー権利を追加します。 詳細については、「データベース ファイルの初期化」を参照してください。
パフォーマンスに関する考慮事項
バックアップと復元のパフォーマンスは、ネットワーク帯域幅、データベースのサイズ、および内部環境と Windows Azure ストレージ サービス間の距離によって異なる場合があります。 使用環境におけるバックアップと復元のパフォーマンスを評価するために、バックアップと復元をテストし、スループットとパフォーマンスを測定することをお勧めします。 Windows Azure BLOB ストレージ サービスにバックアップする場合は、次の項目を考慮する必要があります。
バックアップと復元の時間はネットワーク帯域幅に比例します。
バックアップの最小のネットワーク帯域幅は 1 MB/秒です。 帯域幅が 1 MB/秒未満である場合は、バックアップがタイムアウト エラーで失敗する可能性があります。
復元時間はネットワークの待機時間にも比例します。特に、復元先の SQL Server インスタンスと地理的に異なる地域にある Windows Azure からファイルを復元する場合に影響が大きくなります。 このような場合、確実に RTO の要件を満たすためには、テストが非常に重要です。
Windows Azure BLOB ストレージ サービスへのバックアップまたは Windows Azure BLOB ストレージ サービスからの復元に関するトラブルシューティング
ここでは、Windows Azure BLOB ストレージ サービスへのバックアップまたは Windows Azure BLOB ストレージ サービスからの復元を実行する際に発生するエラーを簡単にトラブルシューティングする方法をいくつか示します。
サポートされないオプションまたは制限事項によるエラーを回避するには、「Windows Azure BLOB ストレージ サービスを使用した SQL Server のバックアップと復元」で、制限事項の一覧および BACKUP コマンドと RESTORE コマンドのサポート情報を確認してください。
認証エラー:
WITH CREDENTIAL は新しいオプションで、Windows Azure BLOB ストレージ サービスへのバックアップまたは Windows Azure BLOB ストレージ サービスからの復元に必要です。 資格情報に関連するエラーには、次のようなものがあります。
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 ロールのログイン アカウントを使用してください。
ストレージ アカウントの名前とキーの値を確認してください。 資格情報に格納されている情報は、バックアップ操作と復元操作で使用する Windows Azure ストレージ アカウントのプロパティ値と一致する必要があります。
バックアップ エラー/障害:
同じ BLOB への並列バックアップを実行すると、バックアップの 1 つが "初期化に失敗しました" エラーで失敗します。
次のエラー ログを使用して、バックアップ エラーのトラブルシューティングに役立ててください。
トレース フラグ 3051 を設定して、次の形式の特定のエラー ログへの記録を有効にします。
BackupToUrl-<instname>-<dbname>-action-<PID>.log。ここで、<action> には次のいずれかを指定します。
DB
FILELISTONLY
LABELONLY
HEADERONLY
VERIFYONLY
Windows イベント ログ ('SQLBackupToUrl' という名前のアプリケーション ログ) を確認することで情報を見つけることもできます。
アクティブなリースを保持している BLOB が原因でバックアップ中に発生するエラー: バックアップ処理に失敗すると、アクティブなリースを保持する BLOB が生成されます。
BACKUP ステートメントが再実行されると、バックアップ操作が次のようなエラーで失敗することがあります。
Backup to URL はリモート エンドポイントから例外を受け取りました。例外メッセージ: リモート サーバーからエラーが返されました: (412) 現在 BLOB にリースがありますが、要求にリース ID が指定されていません。
アクティブなリースを保持しているバックアップ BLOB ファイルに対して RESTORE ステートメントが実行されると、復元操作は次のようなエラーで失敗します。
例外メッセージ: リモート サーバーからエラーが返されました: (409) 競合。
このようなエラーが発生した場合は、BLOB ファイルを削除する必要があります。 このシナリオの詳細とこの問題の解決方法については、「アクティブなリースを保持しているバックアップ BLOB ファイルの削除」を参照してください。
プロキシ エラー
インターネットへのアクセスにプロキシ サーバーを使用している場合、以下の問題が発生することがあります。
プロキシ サーバーによる接続数の設定:
プロキシ サーバーで、1 分あたりの接続数を制限する設定が使用されている場合があります。 Backup to URL プロセスはマルチスレッド プロセスであるため、この制限を超える可能性があります。 制限を超えた場合、プロキシ サーバーは接続を切断します。 この問題を解決するには、プロキシ設定を変更し、SQL Server がプロキシを使用しないようにします。 エラー ログに表示される可能性のある種類またはエラー メッセージの例を次に示します。
"http://storageaccount.blob.core.windows. net/container/BackupAzurefile.bak" での書き込みに失敗しました: Backup to URL がリモート エンドポイントから例外を受け取りました。 例外メッセージ: 転送接続からデータを読み取ることができません: 接続は閉じられました。
"http://storageaccount.blob.core.windows. net/container/BackupAzurefile.bak" ファイルで回復不可能な I/O エラーが発生しました: リモート エンドポイントからエラーを収集できませんでした。
メッセージ 3013、レベル 16、状態 1、行 2
バックアップ データベースが異常終了しています。
BackupIoRequest::ReportIoError: バックアップ デバイス http://storageaccount.blob.core.windows. net/container/BackupAzurefile.bak で書き込みエラーが発生しました。 Backup to URL がリモート エンドポイントから例外を受け取ったオペレーティング システム エラーです。 例外メッセージ: 転送接続からデータを読み取ることができません: 接続は閉じられました。
トレース フラグ 3051 を使用して詳細ログを有効にすると、ログに次のメッセージが表示される場合もあります。
HTTP ステータス コード 502、HTTP ステータス メッセージ プロキシ エラー (1 分あたりの HTTP 要求数が構成済みの上限を超えました。 ISA Server 管理者に連絡してください。) )
選択されていない既定のプロキシ設定:
既定の設定が選択されていないことが原因で、次のようなプロキシ認証エラーが発生する場合があります。"http://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak" ファイルで回復不可能な I/O エラーが発生しました: Backup to URL がリモート エンドポイントから例外を受け取りました。例外メッセージ: リモート サーバーからエラーが返されました: (407) プロキシ認証が必要です。
この問題を解決するには、次の手順に従って、Backup to URL プロセスで既定のプロキシ設定を使用できるようにするための構成ファイルを作成します。
次の xml を使用して、BackuptoURL.exe.config という名前の構成ファイルを作成します。
<?xml version ="1.0"?> <configuration> <system.net> <defaultProxy enabled="true" useDefaultCredentials="true"> <proxy usesystemdefault="true" /> </defaultProxy> </system.net> </configuration>
SQL Server インスタンスの Binn フォルダーに構成ファイルを配置します。 たとえば、SQL Server がコンピューターの C ドライブにインストールされている場合は、構成ファイルを C:\Program Files\Microsoft SQL Server\MSSQL11.<InstanceName>\MSSQL\Binn に配置します。