Azure SQL Databaseのリストア手法がいくつかあったので纏めてみました。
バックアップ
SQL Databaseではユーザが意識することなく、自動的にバックアップが取得されています。
取得タイミングはAzure側で決定されるため、ユーザが指定することはできません。
- 取得サイクル
- 完全バックアップ
- 毎週
- 差分バックアップ
- 数時間に1回
- トランザクションログバックアップ
- 5~10分に1回
- 完全バックアップ
バックアップ保存期間はSQL Databaseのサービスレベルによって異なります。
- 保存期間
- Basic
- 7日間
- Standard
- 35日間
- Premium
- 35日間
- Basic
リストア
Point in Timeリストア
概要
- 同一サーバ内に新規データベースとして復元する手法
- 保存期間に合わせた任意の時間に復元することが可能
- 主な利用用途は、何か不具合発生時に過去に遡って検証したいケースが考えられます
イメージ図
リストア手順
データベースコピー
概要
- 最新時点のデータベースコピーを作成する手法
- Point in Timeリストアと違い、任意の時点を指定することはできません
- 同じサーバだけでなく、異なるサーバー、異なるリージョンのサーバーにコピーすることが可能
- 主な利用用途は、最新の本番データを開発/検証用の論理サーバーで利用したいケースが考えられます
イメージ図
リストア手順
geoリストア
概要
- 1時間前の状態の新規データベースとして復元する手法
- 任意の時点を指定することはできない
- 同じサーバだけでなく、異なるサーバー、異なるリージョンのサーバーに作成することが可能
- 利用用途としては、リージョンが全滅した場合に、1時間前であれば他のリージョンで起動することができるというDR用途です
- よりRTO/RPOを求めるのであれば、アクティブgeoレプリケーションを選定することになります
イメージ図
リストア手順
長期保管
バックアップは最大35日保管できますが、バックアップ先にAzure Backupを指定することで最大10年間保管することが可能です。
設定の注意点としては、SQL Databaseと同じサブスクリプション・リージョン・リソースグループにAzure Backupを配置する必要があります。
バックアップ手順
-
現時点でプレビューなので、プレビュー使用条件に承諾します
-
バックアップ対象データベースを選択します
-
データベースのチェックができない場合は、一度ページを変えて、再度長期的なバックアップ保有期間を選択すると選べるようになります
リストア手順
番外編:長期保管に使用したBackupコンテナーが消せない?
SQL Databaseの長期保管を停止しただけではBackupコンテナーが消せませんでした。
バックアップデータが残ってるだけでもダメみたいです。
以下のPowerShellコマンドを実行するとBackupコンテナーが消せるようになったので、Cloud Shell(PowerShell)でサクッとやりましょう。
$vault = Get-AzureRmRecoveryServicesVault -Name [Container Name]
Set-AzureRmRecoveryServicesVaultContext -Vault $vault
$container = Get-AzureRmRecoveryServicesBackupContainer -ContainerType AzureSQL -FriendlyName $vault.Name
$item = Get-AzureRmRecoveryServicesBackupItem -container $container -WorkloadType AzureSQLDatabase
$item.Id = [System.Web.HttpUtility]::UrlDecode($item.Id)
Disable-AzureRmRecoveryServicesBackupProtection -item $item -RemoveRecoveryPoints -ea SilentlyContinue
Unregister-AzureRmRecoveryServicesBackupContainer -Container $container