Azure SQL Managed Instance のデータベースを以前の時点に復元します
- [アーティクル]
-
-
適用対象: Azure SQL Managed Instance
ポイントインタイム リストアを使うと、特定の以前の時点におけるデータベースのコピーであるデータベースを作成できます。 この記事では、Azure SQL Managed Instance 内のデータベースについて、ポイントインタイム リストアを実行する方法について説明します。
概要
ポイントインタイム リストアは、エラーや障害が原因のインシデントが発生した場合、データが正しく読み込まれない場合、重要なデータが削除された場合などの復旧シナリオで役立ちます。 また、単純にデータベースのデプロイをテストし、監査する目的で使うこともできます。 データベースの設定によって異なりますが、Azure のバックアップ ファイルは 7 日から 35 日間保持されます。
以下のシナリオでは、ポイントインタイム リストアを使ってデータベースを復元できます。
- 既存のデータベースから
- 削除されたデータベースから
- 同じマネージド インスタンス、または別のマネージインスタンスに対して
- 同じサブスクリプション内のマネージド インスタンスに対して、または異なるサブスクリプション内のマネージド インスタンスに対して
次の表に、SQL Managed Instance におけるポイントインタイム リストアのシナリオを示します。
シナリオ |
Azure portal |
Azure CLI |
PowerShell |
既存のデータベースを同じマネージド インスタンスに復元する |
はい |
イエス |
はい |
既存のデータベースを異なるマネージド インスタンスに復元する |
はい |
イエス |
はい |
削除されたデータベースを同じマネージド インスタンスに復元する |
はい |
イエス |
はい |
削除されたデータベースを異なるマネージド インスタンスに復元する |
はい |
イエス |
はい |
既存のデータベースを別のサブスクリプション内のマネージド インスタンスに復元する |
はい |
イエス |
はい |
削除されたデータベースを別のサブスクリプション内のマネージド インスタンスに復元する |
はい |
イエス |
はい |
アクセス許可
データベースを復旧するには、次のいずれかである必要があります。
データベースを別のターゲット サブスクリプションに復元するには、SQL Managed Instance 共同作成者ロールでない場合は次のアクセス許可も必要です。
- ソース SQL マネージド インスタンスの Microsoft.Sql/managedInstances/databases/readBackups/action。
- ターゲット SQL マネージド インスタンスの Microsoft.Sql/managedInstances/crossSubscriptionPITR/action。
詳細については、Azure RBAC: 組み込みのロールに関するページをご覧ください。
制限事項
これらの制限は、SQL Managed Instance でのポイントインタイム リストアに適用されます。
ポイントインタイム リストアを使って SQL Managed Instance のデプロイ全体を復元することはできません。 ポイントインタイム リストアは、SQL Managed Instance でホストされているデータベースのコピーを作成するためにのみ使います。
ポイントインタイム リストアの制限は、データベースを同じサブスクリプション内のマネージド インスタンスに復元するか、別のサブスクリプション内のマネージド インスタンスに復元するかによって異なります。
Azure SQL Managed Instance でサービス エンドポイント ポリシーが有効になっている場合、サブネットにサービス エンドポイント ポリシーを配置すると、異なるサブネット内のインスタンスからのポイントインタイム リストアが妨げられます。
警告
マネージド インスタンスのストレージ サイズに注意してください。 復元するデータのサイズによっては、マネージド インスタンスのストレージを使い果たす可能性があります。 復元するデータに対して十分なストレージ容量がマネージド インスタンスにない場合は、別の方法を使ってください。
同じサブスクリプションに復元する
あるマネージド インスタンスから同じ Azure サブスクリプション内の別のマネージド インスタンスに復元する場合、両方のマネージド インスタンスが同じリージョン内に存在する必要があります。 現在、リージョン間の復元はサポートされていません。
別のサブスクリプションに復元する
サブスクリプション間でのポイントインタイム リストア バックアップの復元には、次の制限があります。
- 両方のサブスクリプションが同じリージョンにある必要があります。
- 両方のサブスクリプションが同じテナントにある必要があります。
- サブスクリプションの種類は、Enterprise Agreement、Cloud Solution Provider、Microsoft Certified Partner、または従量課金制のいずれかである必要があります。
- プライマリ インスタンスでのみ復元アクションを使用できます。
- バックアップはプライマリ リージョンからのみ復元できます。 geo レプリケートされたセカンダリ リージョンからのデータベースの復元は、サブスクリプション間のポイントインタイム リストアではサポートされていません。
- 復元アクションを実行するユーザーは、SQL Managed Instance 共同作成者ロールが割り当てられているか、次の明示的なアクセス許可を持っている必要があります。
- ソース SQL マネージド インスタンスの Microsoft.Sql/managedInstances/databases/readBackups/action。
- ターゲット SQL マネージド インスタンスの Microsoft.Sql/managedInstances/crossSubscriptionPITR/action。
- 自分のキーを持ち込む (BYOK) 場合は、キーが両方のサブスクリプションに存在する必要があります。
既存のデータベースを復元する
Azure portal、PowerShell、または Azure CLI を使うことで、既存のデータベースを同じサブスクリプションに復元できます。 PowerShell または Azure CLI を使って同じサブスクリプション内の別のインスタンスに復元する場合は、必ずターゲットの SQL Managed Instance リソースのプロパティを指定します。 既定では、データベースは同じインスタンスに復元されます。
別のサブスクリプションに復元する場合は、復元アクションの基になる Create または Update v5.0.2022 API 呼び出しに、restorePointInTime
、crossSubscriptionTargetManagedInstanceId
、および crossSubscriptionSourceDatabaseId
または crossSubscriptionRestorableDroppedDatabaseId
が含まれている必要があります。
既存のデータベースを復元するには、Azure portal でデータベース ページに移動して、[復元] を選びます。
または、データベースを復元するには、次の手順のようにします。
Azure portal にサインインします。
データベースの復元先のターゲット SQL Managed Instance に移動します。
[概要] ページで、[+ 新しいデータベース] を選んで、[Azure SQL マネージド データベースを作成する] ページを開きます。
[Azure SQL マネージド データベースを作成する] ページの [基本] タブの [プロジェクトの詳細] で、サブスクリプションとリソース グループの詳細を指定します。 次に、[データベースの詳細] で、復元するデータベースの新しい名前を指定します。 ドロップダウンに正しいマネージド インスタンスが表示されていることを確認します。 次に、[次へ: データ ソース >] を選びます
[データ ソース] タブで、[既存のデータを使用する] の [特定の時点に復元] を選びます。 ソース データベースが含まれるサブスクリプション、リソース グループ、マネージド インスタンスを指定します。 [マネージド データベース] ドロップダウンから復元するデータベースを選んで、データベースを復元する特定の時点を選びます。 ソースとターゲットのインスタンスは、同じでも、2 つの異なるインスタンスでもかまいません。 [次へ: 追加の設定 >] を選びます
[追加の設定] タブでは、ボックスをオンにしてソース データベースからアイテム保持ポリシーを継承するか、[データ保持の構成] を選んで [ポリシーの構成] ページを開き、復元されたデータベースの保持ポリシーを設定することができます。 終わったら、 [確認と作成] を選択します。
[確認および作成] で検証が成功したら、[作成] を選んでデータベースを復元します。
このアクションにより、復元プロセスが開始されます。このプロセスでは、新しいデータベースが作成され、指定した時点における元のデータベースのデータが入力されます。 復旧プロセスの詳細については、「復旧時間」を参照してください。
Azure PowerShell を使ってデータベースを復元します。 詳細については、Azure PowerShell モジュールのインストールに関する記事を参照してください。 詳細については、「Restore-AzSqlInstanceDatabase」を参照してください
次のコード オプションのいずれかを実行します。その際にパラメーターは実際の値に置き換えてください。
同じマネージド インスタンスにデータベースを復元するには:
$subscriptionId = "<subscription ID>"
$resourceGroupName = "<resource group name>"
$managedInstanceName = "<managed instance name>"
$databaseName = "<source database>"
$pointInTime = "2018-06-27T08:51:39.3882806Z"
$targetDatabase = "<name of the new database to create>"
Get-AzSubscription -SubscriptionId $subscriptionId
Select-AzSubscription -SubscriptionId $subscriptionId
Restore-AzSqlInstanceDatabase -FromPointInTimeBackup `
-ResourceGroupName $resourceGroupName `
-InstanceName $managedInstanceName `
-Name $databaseName `
-PointInTime $pointInTime `
-TargetInstanceDatabaseName $targetDatabase `
データベースを別のマネージド インスタンスに復元するには、ターゲット リソース グループとターゲット マネージド インスタンスの名前も指定します。
$targetResourceGroupName = "<resource group of the target managed instance>"
$targetInstanceName = "<name of the target managed instance>"
Restore-AzSqlInstanceDatabase -FromPointInTimeBackup `
-ResourceGroupName $resourceGroupName `
-InstanceName $managedInstanceName `
-Name $databaseName `
-PointInTime $pointInTime `
-TargetInstanceDatabaseName $targetDatabase `
-TargetResourceGroupName $targetResourceGroupName `
-TargetInstanceName $targetInstanceName
データベースを別のサブスクリプションに復元するには、コンテキストをターゲット サブスクリプションに設定し (Set-AzContext
)、必ず必須パラメーター -TargetSubscriptionID
の値を指定してください。
Set-AzContext -SubscriptionID "targetSubscriptionID"
Restore-AzSqlInstanceDatabase -FromPointInTimeBackup `
-SubscriptionId "sourceSubscriptionID" `
-ResourceGroupName "sourceRGName" `
-InstanceName "sourceManagedInstanceName" `
-Name "sourceDatabaseName" `
-PointInTime $pointInTime `
-TargetInstanceDatabaseName "targetDatabaseName" `
-TargetInstanceName "targetManagedInstanceName" `
-TargetResourceGroupName "targetResourceGroupName" `
-TargetSubscriptionId "targetSubscriptionId"
Azure CLI を使ってデータベースを特定の時点に復元します。 詳細については、「 Azure CLI のインストール」を参照してください。 使用できるパラメーターの詳細については、SQL Managed Instance でのデータベースの復元に関する CLI のドキュメントを参照してください。
次のコード オプションのいずれかを実行します。その際にパラメーターは実際の値に置き換えてください。
同じマネージド インスタンスにデータベースを復元するには:
az sql midb restore -g mygroupname --mi myinstancename |
-n mymanageddbname --dest-name targetmidbname --time "2018-05-20T05:34:22"
データベースを別のマネージド インスタンスに復元するには、ターゲットのリソース グループとマネージド インスタンスの名前も指定します。
az sql midb restore -g mygroupname --mi myinstancename -n mymanageddbname |
--dest-name targetmidbname --time "2018-05-20T05:34:22" |
--dest-resource-group mytargetinstancegroupname |
--dest-mi mytargetinstancename
別のサブスクリプションに復元するには、必ずコンテキストをターゲット サブスクリプションに設定してください (az account set
)。
az account set -s "targetSubscriptionId" `
az sql midb restore -s sourcesubscriptionid -g sourcegroup
--mi sourceinstance -n sourcemanageddb --dest-name targetDbName
--dest-mi targetMI --dest-resource-group targetRG --time "2022-05-20T05:34:22"
削除されたデータベースを復元する
削除されたデータベースの復元は、Azure portal、Azure PowerShell、または Azure CLI を使って行うことができます。
削除されたマネージド データベースを Azure portal を使って復元するには:
Azure portal で、ソース マネージド インスタンスに移動します。
左側のメニューの [データ管理] で [バックアップ] を選びます。
[データベースの表示] で [削除済み] を選びます。
復元するデータベースの [復元] を選びます。
[Create Azure SQL Managed database] (Azure SQL マネージド データベースの作成) で、データベースを復元する先のターゲット マネージド インスタンスの詳細を入力または選択します。 [データ ソース] タブを選びます。
[データ ソース] に、ソース データベースの詳細を入力または選択します。 [追加設定] タブを選択します。
[追加の設定] で、データ保有設定を構成します。 [確認および作成] タブを選択します。
[確認および作成] で [作成] を選び、削除されたデータベースを復元します。
削除されたマネージド データベースを復元するには、次の PowerShell コード オプションのいずれかを実行します。その際にパラメーターは実際の値に置き換えてください。
同じマネージド インスタンスに削除されたデータベースを復元するには:
$subscriptionId = "<subscription ID>"
Get-AzSubscription -SubscriptionId $subscriptionId
Select-AzSubscription -SubscriptionId $subscriptionId
$resourceGroupName = "<resource group name>"
$managedInstanceName = "<managed instance name>"
$deletedDatabaseName = "<source database name>"
$targetDatabaseName = "<target database name>"
$deletedDatabase = Get-AzSqlDeletedInstanceDatabaseBackup -ResourceGroupName $resourceGroupName `
-InstanceName $managedInstanceName -DatabaseName $deletedDatabaseName
Restore-AzSqlinstanceDatabase -FromPointInTimeBackup -Name $deletedDatabase.Name `
-InstanceName $deletedDatabase.ManagedInstanceName `
-ResourceGroupName $deletedDatabase.ResourceGroupName `
-DeletionDate $deletedDatabase.DeletionDate `
-PointInTime UTCDateTime `
-TargetInstanceDatabaseName $targetDatabaseName
データベースを別のマネージド インスタンスに復元するには、ターゲット リソース グループとターゲット マネージド インスタンスの名前も指定します。
$targetResourceGroupName = "<resource group of target managed instance>"
$targetInstanceName = "<target managed instance name>"
Restore-AzSqlinstanceDatabase -FromPointInTimeBackup -Name $deletedDatabase.Name `
-InstanceName $deletedDatabase.ManagedInstanceName `
-ResourceGroupName $deletedDatabase.ResourceGroupName `
-DeletionDate $deletedDatabase.DeletionDate `
-PointInTime UTCDateTime `
-TargetInstanceDatabaseName $targetDatabaseName `
-TargetResourceGroupName $targetResourceGroupName `
-TargetInstanceName $targetInstanceName
データベースを別のサブスクリプションに復元するには、コンテキストをターゲット サブスクリプションに設定し (Set-AzContext
)、必須のパラメーター -TargetSubscriptionID
と -DeleteDate
の値を指定します。
Set-AzContext -SubscriptionID "targetSubscriptionID"
Restore-AzSqlInstanceDatabase -FromPointInTimeBackup `
-SubscriptionId "sourceSubscriptionID" `
-ResourceGroupName "sourceRGName" `
-InstanceName "sourceManagedInstanceName" `
-Name "sourceDatabaseName" `
-PointInTime $pointInTime `
-TargetInstanceDatabaseName "targetDatabaseName" `
-TargetInstanceName "targetManagedInstanceName" `
-TargetResourceGroupName "targetResourceGroupName" `
-TargetSubscriptionId "targetSubscriptionId" `
-DeletionDate "deletion_date"
削除されたデータベースを同じサブスクリプションに復元するには:
az sql midb restore -g resourcegroup --mi instancename
-n databasename --dest-name databasename --dest-mi instancename
--dest-resource-group resourcegroup --time "2023-02-23T11:54:00" --deleted-time "deletion_date"
削除されたデータベースを別のサブスクリプションに復元するには、必ずコンテキストをターゲット サブスクリプションに設定し (az account set
)、az sql midb restore
コマンドの -s パラメーターを指定してソース サブスクリプションを特定してください。
az account set -s "targetSubscriptionId"
az sql midb restore -s sourcesubscriptionid -g sourcegroup
--mi sourceinstance -n sourcemanageddb --dest-name targetDbName
--dest-mi targetMI --dest-resource-group targetRG
--time "2022-05-20T05:34:22" --deleted-time "deletion_date"
既存のデータベースを上書きする
既存のデータベースを上書きするには、次の手順を実行する必要があります。
- 上書きする元のデータベースをドロップします。
- ポイントインタイムから復元されたデータベースの名前を、ドロップしたデータベースの名前に変更します。
元のデータベースを削除する
Azure portal、PowerShell、または Azure CLI を使って、データベースを削除できます。
データベースをドロップするもう 1 つのオプションは、SQL Server Management Studio (SSMS) でマネージド インスタンスに直接接続してから、DROP
Transact-SQL (T-SQL) を使う方法です。
DROP DATABASE WorldWideImporters;
マネージド インスタンス内のデータベースに接続するには、次のいずれかの方法を使います。
Azure portal でマネージド インスタンス内のデータベースを選びます。
コマンド バーの [削除] を選びます。
マネージド インスタンスから既存のデータベースを削除するには、次の PowerShell コードを実行します。その際にパラメーターは実際の値に置き換えてください。
$resourceGroupName = "<resource group name>"
$managedInstanceName = "<managed instance name>"
$databaseName = "<source database name>"
Remove-AzSqlInstanceDatabase -Name $databaseName -InstanceName $managedInstanceName -ResourceGroupName $resourceGroupName
マネージド インスタンスから既存のデータベースを削除するには、次の Azure CLI コードを実行します。その際にパラメーターは実際の値に置き換えてください。
az sql midb delete -g mygroupname --mi myinstancename -n mymanageddbname
元のデータベース名と一致するように新しいデータベース名を変更する
SQL Server Management Studio (SSMS) を使って、マネージド インスタンスに直接接続します。 次に、以下の T-SQL クエリを実行します。 このクエリを実行すると、復元されたデータベースの名前を、上書きする予定のドロップされたデータベースの名前に変更することができます。
ALTER DATABASE WorldWideImportersPITR MODIFY NAME = WorldWideImporters;
マネージド インスタンス内のデータベースに接続するには、次のいずれかの方法を使います。
次のステップ
自動化されたバックアップについて確認します。