Azure SQL Databaseのバックアップ
1. この記事の範囲
この記事では、Azure SQL Databaseのバックアップ機能と、BACPACファイルのエクスポートについて詳細に解説します。これらの機能を活用することで、データ損失のリスクを低減し、システムの可用性と信頼性を向上させます。
2. 内容
Azure SQL Databaseでは、自動バックアップがデフォルトで有効になっており、データ保護を簡素化します。バックアップ機能は、データ損失への対策だけでなく、アプリケーションやシステムの可用性を維持するための重要な手段です。たとえば、誤操作によるデータ削除や障害発生時に迅速な復旧を行うだけでなく、テスト環境や開発環境へのデータ移行にも活用できます。さらに、バックアップを活用して長期的なデータ保持を実現することで、規制遵守や監査要件にも対応可能です。
2-1. 機能
自動バックアップ
Azure SQL Databaseのバックアップ機能は、データベースの可用性を確保するために設計されています。完全バックアップ、差分バックアップ、トランザクションログバックアップが自動的に取得され、最大35日間保持されます。
- トランザクションログのバックアップ: 5~10分間隔で取得。特定の時点への復元を可能にします。
- データベースの完全バックアップ: 毎週取得。データベース全体を含むバックアップ。
- 差分バックアップ: 毎日取得。完全バックアップ以降に変更されたデータのみを含むバックアップ。
バックアップ ストレージの冗長性
バックアップはAzure Storageに格納され、Geo冗長化によって別リージョンにも保存可能です。これにより、リージョン全体の障害時にもデータを復旧できます。さらに、Azure Storageはローカル冗長ストレージやゾーン冗長ストレージもサポートしており、運用環境に合わせた柔軟なバックアップ構成が可能です。
- Geo冗長ストレージ (GRS): 別リージョンにバックアップを保存し、災害復旧を可能にします。
- ローカル冗長ストレージ (LRS): 同一リージョン内での冗長化。
- ゾーン冗長ストレージ (ZRS): 可用性ゾーン内で冗長化。
長期バックアップ
長期保持 (LTR) を構成することで、最大10年間のバックアップデータを保存できます。LTRを有効化すると、週に1回の完全バックアップが別のストレージコンテナーに自動的にコピーされ、長期的なデータ保存が必要な規制遵守やアーカイブ要件に対応できます。
BACPACファイル
データベースのスキーマとデータを保存する場合、エクスポート機能を利用してBACPACファイル形式でバックアップを取得できます。この形式は、他の環境へのデータ移行や、スナップショットとしての保存に適しています。
2-2. バックアップ設定の確認方法
バックアップの状態を確認するには、AzureポータルまたはAzure CLIを使用します。以下はCLIを用いた確認方法の例です。
az sql db show --name <データベース名> --resource-group <リソースグループ名> --server <サーバー名>
実行結果からデータベースのバックアップ設定に関する情報の抜粋例です。
{
"currentBackupStorageRedundancy": "Geo", //現在のバックアップストレージの冗長性
"requestedBackupStorageRedundancy": "Geo", //要求されたストレージ冗長性
"earliestRestoreDate": "2024-11-16T07:04:31.261360+00:00", // 復元可能な最も古い日時
"defaultSecondaryLocation": "japanwest", // デフォルトのセカンダリリージョン
"creationDate": "2018-10-31T01:11:51+00:00" // データベース作成日時
}
- 現在のバックアップストレージの冗長性は"Geo"であり、バックアップデータは複数のリージョンに保存されています。
- 復元可能な最も古い日時は2024年11月16日で、この時点までのデータが復旧可能です。
- デフォルトのセカンダリリージョンは "japanwest"で、Geo冗長化により災害発生時のデータ復旧が可能です。
これらの情報は、運用要件に合ったバックアップ構成の評価や、災害復旧プランの策定に役立ちます。
2-3. BACPACファイルのエクスポート
Azure SQL Database で BACPAC ファイルをエクスポートする際、ストレージ(Azure Blob Storage)にエクスポートする場合とローカル(オンプレミスやローカル環境)にエクスポートする場合があります。それぞれの方法には利点と注意点があり、用途や環境に応じて選択することが重要です。
Azure Blob Storageにエクスポートする場合、クラウド上でデータを安全に保管できるため、バックアップやデータ移行が容易になります。また、複数のリージョンにわたるアクセスやスケーラビリティを活用することが可能です。一方で、ネットワーク帯域幅やストレージコストに注意が必要です。
ローカル環境にエクスポートする場合、ネットワーク接続に依存せずにデータを直接管理できます。特にオンプレミス環境での作業や、クラウド環境へのアクセスが制限されている場合に有効です。ただし、大規模なデータの場合はエクスポート時間が長くなる可能性があり、十分なディスク容量を確保する必要があります。
どちらの方法を選択する場合でも、事前にエクスポート先の準備を整え、データの整合性とセキュリティを確保することが重要です。
2-3-1. ストレージにエクスポートする場合
適したシナリオ
BACPACファイルをAzure Blob Storageに保存することで、別のAzureサブスクリプションやリージョンから容易にアクセスでき、異なる環境間でデータを効率的に共有できます。また、ストレージに保存されたBACPACファイルは、災害復旧やアーカイブ要件への対応にも役立ちます。Azure Storageを活用することで、バックアップデータを安全かつ信頼性の高い形で長期間保持できるため、業務継続計画 (BCP) の一環としても非常に有効です。
エクスポート手順
Azureポータルまたは Azure CLIを使用してAzure Blob Storageにエクスポートします。
az sql db export \
--admin-password <AdminPassword> \
--admin-user <AdminUsername> \
--storage-key <StorageAccountKey> \
--storage-key-type StorageAccessKey \
--storage-uri <BlobStorageUri> \
--name <DatabaseName> \
--server <ServerName> \
--resource-group <ResourceGroupName>
2-3-2. ローカルにエクスポートする場合
適したシナリオ
ローカルにBACPACファイルをエクスポートする方法は、データベースが小規模である場合に適しています。ローカル環境にエクスポートした BACPACファイルを使用することで、オンプレミスのSQL Serverに容易にデータをインポートすることができるため、テスト環境や開発環境で迅速に利用でき、スナップショットのような形で活用することが可能です。
エクスポート手順
SqlPackage
ユーティリティを使用してローカルにエクスポートします。SQLPackage
は、Microsoftが提供するコマンドラインツールで、SQL ServerやAzure SQL Databaseのデータベース管理を効率的に行うために設計されています。このツールを使用することで、データベースのエクスポートやインポート、デプロイ、スキーマ比較などをコマンドラインから実行できます。
SQLPackage
は並列実行をサポートしており、複数のコマンドを同時に実行することで、大量データのエクスポートやインポートの速度を向上させることが可能です。また、このツールはマルチプラットフォームに対応しており、Windows、macOS、Linuxのいずれの環境でも利用できます。そのため、開発環境や運用環境の多様性を問わず、幅広いシステムで活用することができます。
認証方式についても柔軟性があります。SQLPackage
はSQL認証やAzure Active Directory (AAD) 認証、さらにはユニバーサル認証などの多様な認証方式をサポートしており、セキュアな接続を確保しながら操作を実行することができます。
Azure SQL Databaseに接続するため、AAD認証用のアクセストークンを取得します。
ACCESS_TOKEN=$(az account get-access-token --resource https://database.windows.net/ --query accessToken -o tsv)
以下のコマンドを使用して、Azure SQL DatabaseからデータベースをBACPACファイルにエクスポートします。取得したアクセストークンを /AccessToken
パラメーターで指定します。
SqlPackage /Action:Export \ // データベースをエクスポート
/SourceServerName:"<server-name>.database.windows.net" \ // SQL ServerまたはAzure SQL Database のサーバー名
/SourceDatabaseName:"<database-name>" \ // エクスポートするデータベース名
/TargetFile:"<path-to-export>/ExportedDatabase.bacpac" \ // BACPAC ファイルを保存するローカルパス
/AccessToken:"<AAD-access-token>" //Azure Active Directory ユニバーサル認証トークン
実行結果例
Connecting to database 'p1db' on server 'p1.database.windows.net'.
Extracting schema
Extracting schema from database
Resolving references in schema model
Validating schema model
Validating schema model for data package
Validating schema
Exporting data from database
Exporting data
Processing Export.
Processing Table '[dbo].[SampleTable]'.
Successfully exported database and saved it to file '/mnt/c/Users/2024-/sample/ExportedDatabase.bacpac'.
Changes to connection setting default values were incorporated in a recent release. More information is available at https://aka.ms/dacfx-connection
Time elapsed 0:00:26.90
3. まとめ
Azure SQL Databaseのバックアップ機能とBACPACファイルのエクスポートは、データ保護と運用効率の向上に不可欠な要素です。これらのツールを適切に活用することで、データ損失リスクを低減し、システムの可用性と信頼性を高めることが可能です。特に、運用要件やデータ規模に応じて適切なエクスポート方法を選択することで、効率的な運用管理が実現します。
Discussion