SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server 2012 の Backup to URL を現在の Azure BLOB ストレージに実施する際の注意点

leave a comment

SQL Server 2012 SP1 CU2 から、Backup to URL という機能がサポートされ、SQL Server のバックアップを Azure BLOB ストレージ上に直接取得することができるようになりました。

SQL Server 2012 / 2014 での実装では、ページ BLOB に対しての取得であり、制限事項 に記載されているようにストライピングでの取得ができないため、バックアップファイルの最大サイズは 1TB までとなります。

SQL Server 2012 ではバックアップの取得は次のようなクエリとなります。

CREATE CREDENTIAL azurestorage WITH IDENTITY = '<ストレージアカウント名>'  
, SECRET = '<アクセスキー>' ;  

BACKUP DATABASE AdventureWorks2012 TO URL = 'https://xxxxx.blob.core.windows.net/backup/adventureworks2012.bak'
WITH CREDENTIAL='azurestorage',STATS=10

 

今回、Windows Server 2008 + SQL Server 2012 SP4 の環境を使用していたのですが、デフォルトの状態では、次のエラーが発生して、バックアップを取得できませんでした。

メッセージ 3271、レベル 16、状態 1、行 4
A nonrecoverable I/O error occurred on file "https://xxxxxx.blob.core.windows.net/backup/adventureworks2012.bak:" Backup to URL received an exception from the remote endpoint. Exception Message: リモート サーバーがエラーを返しました: (400) 要求が不適切です.
メッセージ 3013、レベル 16、状態 1、行 4
BACKUP DATABASE is terminating abnormally.

エラー 3271 については、BACKUP TO URL または RESTORE FROM URL のトラブルシューティング に記載されている「400 (無効な要求) エラー」現象となります。

現在の Azure BLOB ストレージのデフォルトの設定では「TLS の最小バージョン」が「1.2」となっています。

image

上述した Windows Server 2008 + SQL Server 2012 SP4 で Backup to URL を実行した場合には、TLS 1.0 による接続を行っているようでした。

image

そのため、TLS の最小のバージョンが 1.2 になっているコンテナーに対して、バックアップファイルを生成できないという状態となっています。

この状態を解消させるためには、

  1. BLOB ストレージの TLS の最小バージョンを 1.0 に変更する
  2. Backup to URL で TLS 1.2 を使用するようにする

のいずれかの対応が必要となりますが、今回は、TLS 1.2 を使用する方法で回避したいと思います。

SQL Server 2012 の Backup to URL で TLS 1.2 を使用するための情報ですが次のようなものがあります。

今回の環境では「クライアントで TLS 1.2 を有効にする方法」に記載されている内容の対応だけで解消できました。

具体的には「HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319」のレジストリキー配下に、「SystemDefaultTlsVersions (DWORD) : 1」を設定することで TLS 1.2 の通信に切り替わりました。(再起動は不要でした)

image

image

BLOB へのバックアップについては、BackupToUrl.exe という .NET Framework のアプリケーションが処理を行っているため、.NET Framework が使用する TLS のバージョンの設定で対応ができている感じでしょうかね。

レジストリの変更を行えない場合は、バックアップを取得するタイミングだけ一時的に BLOB の TLS の最小バージョンを 1.0 に変更するというような対応を行うことで、SQL Server 側の変更は発生せずにバックアップを取得することもできるかと思います。

Written by Masayuki.Ozawa

6月 15th, 2021 at 9:42 pm

Posted in SQL Server

Tagged with ,

Leave a Reply

Share via
Copy link
Powered by Social Snap