SQL Server の Microsoft Azure Blob Storage への URL バックアップのベスト プラクティスとトラブルシューティング

applies to:SQL ServerAzure SQL Managed Instance

この記事には、Microsoft Azure Blob Storage へのバックアップと復元をSQL Serverするためのベスト プラクティスとトラブルシューティングのヒントが含まれています。

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

バックアップの管理

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

  • BLOB を誤って上書きしないように、バックアップごとに一意のファイル名を使用します。

  • コンテナーを作成するときに、必要な認証情報を提供できるユーザーまたはアカウントのみがコンテナー内の BLOB の読み取りまたは書き込みを行えるように、アクセス レベルを プライベート に設定します。

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

  • バックアップ処理に失敗すると、無効なバックアップ ファイルが生成されます。 失敗したバックアップを定期的に特定し、BLOB ファイルを削除します。 詳細については、「 アクティブなリースを使用してバックアップ BLOB ファイルを削除する」を参照してください。

  • WITH COMPRESSION オプションを使用して、ストレージ コストとストレージ トランザクション コストを最小限に抑え、バックアップ時間を短縮します。

  • MAXTRANSFERSIZE 引数と BLOCKSIZE 引数を、Azure Blob Storage 用 URL への SQL Server バックアップで説明されている値に設定します。

  • すべてのストレージ冗長性 (LRS、ZRS、GRS、RA-GRS、RA-GZRS など) において、ブロック BLOB へのバックアップが可能です。

大きなファイルを処理する

SQL Serverバックアップ操作では、複数のスレッドを使用して、Azure Blob Storageへのデータ転送を最適化します。 ただし、パフォーマンスは ISV 帯域幅やデータベース サイズなどの要因によって異なります。 オンプレミスのSQL Server データベースから大規模なデータベースまたはファイル グループをバックアップする場合は、まずスループットをテストします。 ストレージのAzure SLA には、BLOB が考慮する最大処理時間があります。

大きなファイルをバックアップする場合は、[WITH COMPRESSION] セクションで推奨される オプションを使用します。

URLへのバックアップまたはURLからの復元のトラブルシューティング

次のヒントを使用して、Azure Blob Storageへのバックアップまたは復元時のエラーのトラブルシューティングを行います。

サポートされていないオプションや制限事項によるエラーを回避するには、BACKUPRESTORE コマンドと コマンドでサポートされているオプションと制限事項を確認してください。

初期化に失敗しました

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

I/O デバイス エラーが原因で要求を実行できませんでした

大規模なデータベースをバックアップする場合は、COMPRESSIONMAXTRANSFERSIZEBLOCKSIZE、および複数の URL 引数を検討してください。 「 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;

デバイス上のMessage Filemarkが整列していない

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

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

このエラーを解決するには、 RESTORE ステートメントを BLOCKSIZE = 65536 で再発行します。

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

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

バックアップ ステートメントを再試行すると、次の出力のようなエラーでバックアップ操作が失敗する可能性があります。

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 ファイルを削除します。 このシナリオとこの問題を修正する方法の詳細については、「 アクティブなリースを使用してバックアップ BLOB ファイルを削除する」を参照してください。

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

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

  • 指定されたストレージ アカウントが General Purpose V1/V2 ではない。
  • Shared Access Signature (SAS) トークンには、先頭に ? シンボルがあります。 その場合は、記号を削除します。
  • Storage Explorerまたは SQL Server Management Studio (SSMS) を使用して、現在のマシンからストレージ アカウントに接続することはできません。
  • SAS トークンに割り当てられたポリシーの有効期限が切れています。 Azure Storage Explorerを使用して新しいポリシーを作成し、ポリシーを使用して新しい SAS トークンを作成するか、資格情報を変更して、もう一度バックアップを試みます。
  • このルート証明書は、信頼されたルート証明書ストアに存在しません。 詳細については、「Azure ルート証明機関を参照してください。

認証エラー

Azure Blob Storageへのバックアップまたは復元には、認証情報を格納する資格情報が必要です。 SQL Server 2016 (13.x) 以降のバージョンでは、Shared Access Signature (SAS) トークンが使用され、SQL Server データベース エンジンは資格情報とコンテナー URL に自動的に一致します。

資格情報に関連するエラーにより、次のエラー メッセージが生成される場合があります。

エラー番号 Message
3288 Credential name <mycredential> does not exist or user does not have permission to access it.
3289 A Backup device of type URL was specified without a Credential, Backup/Restore operation cannot proceed.

この問題を回避するには、資格情報が存在しない場合は作成してください。 例えば次が挙げられます。

IF NOT EXISTS (SELECT *
    FROM sys.credentials
    WHERE name = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>')
CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>]
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<SAS_TOKEN>';

資格情報は存在しますが、バックアップ コマンドを実行するログインには、資格情報にアクセスするためのアクセス許可がありません。 db_backupoperator という固定データベースロールに属し、資格情報の変更のアクセス許可を持つアカウントを使用してください。

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

プロキシ エラー

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

プロキシ サーバーによる接続制限

プロキシ サーバーには、1 分あたりの接続数を制限する設定がある場合があります。 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.

一般的なエラーと解決

問題 解決策
エラー 3063: Write to backup block blob device https://storageaccount/container/name.bak failed. Device has reached its limit of allowed blocks. 完全バックアップまたは差分バックアップでこの問題を解決するには、バックアップ ターゲットを複数のファイルで ストライプします 。 すべてのバックアップの種類について、backup コマンドで次のパラメーターを使用します: COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536。 このエラーは、バックアップがサポートされている最大サイズに達した場合にも発生する可能性があります。 たとえば、SQL Server 2022 (16.x) 以前のバージョンでは、最大バックアップ サイズは 12.8 TB で、4 MB MAXTRANSFERSIZE× 50,000 ブロック× 64 ストライプとして計算されます。
エラー 3035: 1 つまたは複数のデータベースの差分バックアップが失敗する。 このエラーは、SQL データベースまたは仮想マシン (VM) スナップショットをバックアップするようにAzure Backup構成した場合に発生します。このスナップショットではコピーのみのバックアップが作成されないため、メンテナンス プランまたは SQL エージェント ジョブのオンデマンド バックアップが失敗します。 この問題を解決するには、レジストリ キー[HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT]でSQL Server インスタンスをホストしている VM にこれらのレジストリ キーを追加し、"USEVSSCOPYBACKUP"="TRUE"を追加します。
エラー 3201: Cannot open backup device '<url>'. Operating system error 50(The request is not supported.) Storage Explorer: Azure Storage Explorerで、そのポリシーから新しいポリシーと新しい SAS トークンを作成して、SAS トークンを再生成します。 新しい SAS トークンを使用して資格情報を再作成し、バックアップを再試行します。 詳細については、BACKUP TO URL に関する既知の問題を参照してください。 ネットワーク セキュリティ グループ (NSG) またはファイアウォールで、ポート 1433 と 443 での受信接続と送信接続が許可されていることを確認します。
エラー 3290: Backup to URL received an exception from the remote endpoint. Exception Message: The remote name could not be resolved. このメッセージは、バックアップの構成に正しくない資格情報、シークレット、または SAS キーが使用された場合に表示されます。 資格情報を削除して再作成します。 SQL Server 2016 (13.x) 以降のバージョンでは、SAS を使用します。
エラー 3290: Backup to URL received an exception from the remote endpoint. Exception Message: The remote server returned an error: (400) Bad Request. 解決するには、ストレージ アカウントの最小 TLS バージョンを 1.0 (ストレージ アカウント>Configuration>Minimum TLS バージョン) に変更します。
例外メッセージ: The remote server returned an error: (412) There is currently a lease on the blob and no lease ID was specified in the request. Azure Storage Explorerで、1 TB の BLOB を識別し、リースを解除し、BLOB を削除して、バックアップ操作を再試行します。
エラー: The remote server returned an error: (403) Forbidden. ストレージ アカウント、資格情報、SAS トークンを再作成すると、問題が解決します。
メンテナンス プランを使用しているときにバックアップに失敗しました。 メンテナンス プランは断続的に失敗する可能性があります。 T-SQL を使用して同等のバックアップを直接実行します。 T-SQL バックアップが成功した場合は、メンテナンス プランを使用するのではなく、SQL Server エージェント ジョブとしてスケジュールします。
VM の制限に達したため、バックアップに失敗しました。 ディスク IOPS/VM の制限に達したというエラーが発生した場合、バックアップの速度が低下したり、失敗したりする可能性があります。 IOPS/VM の制限を監視するには、Azure Monitor Metrics を使用し、必要に応じて VM/ディスクのサイズを変更して問題を解決します。