SQL Server の URL へのバックアップに関するベスト プラクティスとトラブルシューティング

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL Managed Instance

このトピックでは、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 Backup to URL」で推奨されているように、MAXTRANSFERSIZE 引数と BLOCKSIZE 引数を設定します。

  • SQL Server は、使用されるストレージの冗長性の種類に依存しません。 ページ BLOB とブロック BLOB へのバックアップは、すべてのストレージ冗長性 (LRS\ZRS\GRS\RA-GRS\RA-GZRS\etc.) でサポートされています。

大きなファイルの処理

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

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

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

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

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

初期化に失敗しました

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

ページ BLOB (BACKUP... TO URL... WITH CREDENTIAL など) を使用している場合は、次のエラー ログを使用して、バックアップ エラーのトラブルシューティングに役立ててください。

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

BackupToUrl-\<instname>-\<dbname>-action-\<PID>.log ここで \<action> は、次のいずれかです。

  • DB (DB)
  • FILELISTONLY
  • LABELONLY
  • HEADERONLY
  • VERIFYONLY

Windows イベント ログ (SQLBackupToUrl という名前のアプリケーション ログ) を確認することで情報を見つけることもできます。

I/O デバイス エラーのため、要求は実行されませんでした。

大規模なデータベースをバックアップする場合は、COMPRESSION、MAXTRANSFERSIZE、BLOCKSIZE、および複数の URL 引数を検討してください。 「Backing up a VLDB to Azure Blob Storage」(VLDB を Azure Blob Storage にバックアップする) を参照してください

エラー:

Msg 3202, Level 16, State 1, Line 1
Write on "https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak" failed: 
1117(The request could not be performed because of an I/O device error.)
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.

解決の例:

BACKUP DATABASE TestDb
TO URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak',
URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_1.bak',
URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_2.bak'
WITH COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536;  

デバイスのメッセージ ファイルマークが揃っていません。

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

SqlException 3284 occurred. Severity: 16 State: 5  
Message Filemark on device 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak' is not aligned.
Reissue the Restore statement with the same block size used to create the backupset: '65536' looks like a possible value.  

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

バックアップ処理に失敗すると、アクティブなリースを保持する BLOB が生成されます。

アクティブなリースを保持している BLOB が原因でバックアップ中に発生するエラー: Failed backup activity can result in blobs with active leases.

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

Backup to URL received an exception from the remote endpoint. Exception Message: 
The remote server returned an error: (412) There is currently a lease on the blob and no lease ID was specified in the request. 

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

Exception Message: The remote server returned an error: (409) Conflict..

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

OS エラー 50:要求はサポートされていません

データベースをバックアップしているときに、次の理由によりエラー Operating system error 50(The request is not supported) が表示される場合があります。

  • 指定されたストレージ アカウントが General Purpose V1/V2 でない。
  • 資格情報が作成されたときに、SAS トークンの先頭に ? 記号があった。 その場合は、削除してください。
  • 現在の接続では、Storage Explorer または SQL Server Management Studio (SSMS) を使用して、現在のマシンからストレージ アカウントに接続できない。
  • SAS トークンに割り当てられたポリシーの有効期限が切れている。 Azure Storage Explorer を使用して新しいポリシーを作成し、そのポリシーを使用して新しい SAS トークンを作成するか、資格情報を変更して、もう一度バックアップを試行してください。

認証エラー

WITH CREDENTIAL は新しいオプションで、Azure Blob Storage サービスへのバックアップまたは Azure Blob Storage サービスからの復元に必要です。

資格情報に関連するエラーには、The credential specified in the **BACKUP** or **RESTORE** command does not exist. のようなものがあります。

この問題を回避するには、資格情報が 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 ストレージ アカウントのプロパティの値と一致する必要があります。

400 (無効な要求) エラー

SQL Server 2012 を使用すると、次のようなバックアップの実行中にエラーが発生する場合があります。

Backup to URL received an exception from the remote endpoint. Exception Message: 
The remote server returned an error: (400) Bad Request..

これは、Azure Storage アカウントでサポートされている TLS バージョンが原因で発生します。 サポートされている TLS バージョンを変更するか、KB4017023 に記載されている回避策を使用してください。

プロキシ エラー

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

プロキシ サーバーによる接続調整

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

Write on "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak" failed: Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.
A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Error could not be gathered from Remote Endpoint.  
  
Msg 3013, Level 16, State 1, Line 2  
  
BACKUP DATABASE is terminating abnormally.  
BackupIoRequest::ReportIoError: write failure on backup device https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak'. Operating system error Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.

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

HTTP status code 502, HTTP Status Message Proxy Error (The number of HTTP requests per minute exceeded the configured limit. Contact your ISA Server administrator.)

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

場合によっては、既定の設定が選択されず、次のようなプロキシ認証エラーが発生します。

A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Backup to URL received an exception from the remote endpoint. Exception Message: The remote server returned an error: (407)* **Proxy Authentication Required.

この問題を解決するには、次の手順に従って、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 フォルダーに構成ファイルを配置します。 たとえば、SQL Server がコンピューターの C ドライブにインストールされている場合は、構成ファイルを C:\Program Files\Microsoft SQL Server\MSSQL13.\<InstanceName>\MSSQL\Binn に配置します。

参照

Microsoft Azure に格納されたバックアップからの復元
BACKUP (Transact-SQL)
RESTORE (Transact-SQL)