NEWSニュース&ブログ

【Azure SQL Managed Instance】バックアップリストア方法を理解しよう

     投稿日:2024/08/27

はじめに

 Azure SQL Managed Instanceは、フルマネージドのPaaSデータベースであり、Microsoft SQL Serverの最新バージョンと高い互換性を持つため、オンプレ環境のSQL Serverへの移行対象となることが非常に多いです。

 PaaSサービスであるため、オンプレ環境で発生していたバックアップやアップグレードなどの管理タスクを自動化することで、データベースを利用するユーザーは管理業務以外のことにリソースを割くことができます。

 上記のようなメリットが多くある一方で、既存のSQL Server環境からの移行は容易であるもののいくつか制約があります。

 今回はオンプレ環境のSQL ServerのバックアップをAzure上のAzure SQL Managed Instance上にリストアする方法と、手動でバックアップを取得する方法の2点をご紹介したいと思います。

検証構成

 簡易的な構成ではありますが、セキュリティを考慮した形で検証します。
 ※プライベートサブネットと記載していますが、デフォルトで送信アクセスが無効になっているサブネットではありません。
  参考:ネットワークの制約

前提

  • Azure SQL Managed Instanceが作成されていること
  • 踏み台サーバにSQL Server Management Studio (SSMS)がインストールされていること
  • Azure Blob Storage(以降、Blobと記載)が作成されていること

資格情報の作成

 資格情報は、SQL Serverが外部のリソースへの接続に必要な認証情報を含むオブジェクトを意味します。

 今回はAzure SQL Managed InstanceはBlobに格納されているバックアップファイルを参照し、リストアを行います。

 バックアップも同様に、Azure SQL Managed InstanceからBlobに接続し、バックアップファイルを出力します。

 そのため、Azure SQL Managed InstanceからBlobへの操作は必須条件であり、バックアップリストアができない場合は、資格情報の作成が正しくできているかを確認してください。

 まずはAzure Portalにて事前に作成したBlobにアクセスし、【Shared Access Signature(SAS)】を押下します。

 赤枠の箇所をすべて選択し、SASの有効期限を設定したら【SASと接続文字列を生成する】を押下します。

 その後、画面下部にSASの情報が出力されます。

 今回は資格情報の作成に必要な「SASトークン」をコピーしましょう。

 最後にSSMSからAzure SQL Managed Instanceに接続し、masterにて以下SQLを実行します。

CREATE CREDENTIAL [https://<Blob Name>.blob.core.windows.net/blob]
WITH IDENTITY = N'SHARED ACCESS SIGNATURE'
, SECRET = N'<SAS Token>'

 MSの公式Docにも記載がありますが、資格情報名はBlob内のコンテナーのパスと一致させ、https で始まる必要があり、末尾にスラッシュを含めることはできませんのでご注意を。(※1)

 SQLの実行が成功したら、sys.credentialsにて資格情報が作成されたかを確認しましょう。

SELECT * FROM sys.credentials

リストア検証

 準備が整いましたので、リストアの検証を行います。

 Azure SQL Managed InstanceはPaaSであるため、RESTOREコマンドのDiskオプションを指定してリストアすることができません。

 そのため、Blobにバックアップファイルを配置し、URLオプションを使用することでリストアすることができます。

 まずは、Blobに作成しているコンテナ内にバックアップファイルを配置します。

 配置ができたら、SSMSにて以下のSQLを実行し、バックアップファイルに保存されているデータファイルとログファイルのリストを含んだ結果を確認できます。

RESTORE FILELISTONLY FROM URL = N'https://<Blob Name>.blob.core.windows.net/blob/test.bak';  

 問題なく上記SQLの実行確認が取れたら、リストアを実行しましょう。

RESTORE DATABASE <DB Name> FROM URL = N'https://<Blob Name>.blob.core.windows.net/blob/test.bak';  

バックアップ検証

 Azure SQL Managed Instanceは自動バックアップ機能を有していますが、PITR(Point In Time Recovery)のために手動バックアップを取得するタイミングもあります。

 PITRとは、バックアップ対象のデータベースを指定した日付と時刻の状態にリストアするためのオンラインバックアップの機能のことです。

 リストアと同様、BACKUPコマンドのDiskオプションを指定することができないため、URLオプションにてBlobのコンテナを指定することで手動バックアップを取得することができます。

 なお、Azure SQL Managed Instanceは、COPY_ONLYオプションでの完全バックアップがサポートされています。

 以下のSQLを実行することで手動バックアップを実行することが可能です。

BACKUP DATABASE <DB Name> TO URL = 'https://<Blob Name>.blob.core.windows.net/blob/<Backup File Name>.bak' WITH  COPY_ONLY

まとめ

 Azure SQL Managed Instanceはオンプレ環境のSQL Serverとほぼ100%の互換性を持つものの、PaaSであるが故にいくつかの制限があるため、当初予定していたデータ移行が実現できないことも考えられます。

 弊社はSQL Serverのデータ移行だけでなく、Oracle DatabaseなどのRDBMSの移行も数多く経験しており、データ移行のノウハウを持ち合わせています。

 また、昨今のDX推進に伴い、データ分析基盤構築案件にも複数対応させていただいております。

 データベースの移行やデータ分析基盤構築についてお困りのことがあれば、ぜひ弊社にお問い合わせください。

 ※1
私が検証した際は資格情報名を「CredentialBlob」にして作成した後にバックアップ・リストアを試してみましたが、以下のエラー出力がされました。
> System error 86 has occurred.The specified network password is not correct instead.

中川 智文(2022年入社)
株式会社システムサポート フューチャーイノベーション事業本部 ソリューションサービス事業部所属
Oracle Database, SQL Serverを中心とした案件に従事