適用対象:
Azure SQL Managed Instance
この記事では、Azure SQL Managed Instance 内のデータベースについて、ポイントインタイム リストアを実行する方法について説明します。 ポイントインタイム リストアを使うと、特定の以前の時点におけるデータベースのコピーであるデータベースを作成できます。
概要
ポイントインタイム リストアは、復旧シナリオで役立ちます。 たとえば、エラーやエラーが原因で発生したインシデントや、データが正しく読み込まれない場合、重要なデータが削除された場合などです。 また、単純にデータベースのデプロイをテストし、監査する目的で使うこともできます。 データベースの設定によって異なりますが、Azure のバックアップ ファイルは 7 日から 35 日間保持されます。
以下のシナリオでは、ポイントインタイム リストアを使ってデータベースを復元できます。
- 既存のデータベースから
- 削除されたデータベースから
- 同じ SQL マネージド インスタンスまたは別の SQL マネージド インスタンスへ
- 同じサブスクリプション内の SQL マネージド インスタンス、または別のサブスクリプション内の SQL マネージド インスタンスに対して
次の表に、SQL Managed Instance におけるポイントインタイム リストアのシナリオを示します。
シナリオ |
Azure portal |
Azure CLI |
PowerShell |
既存のデータベースを同じ SQL マネージド インスタンスに復元する |
はい |
はい |
はい |
既存のデータベースを別の SQL マネージド インスタンスに復元する |
はい |
はい |
はい |
削除されたデータベースを同じ SQL マネージド インスタンスに復元する |
はい |
はい |
はい |
削除されたデータベースを別の SQL マネージド インスタンスに復元する |
はい |
はい |
はい |
既存のデータベースを別のサブスクリプションの SQL マネージド インスタンスに復元する |
はい |
はい |
はい |
削除されたデータベースを別のサブスクリプションの SQL マネージド インスタンスに復元する |
はい |
はい |
はい |
アクセス許可
データベースを復旧するには、次のいずれかである必要があります。
データベースを別のターゲット サブスクリプションに復元するには、 SQL Managed Instance 共同作成者 ロールにいない場合は、次のアクセス許可も必要です。
- ソース SQL マネージド インスタンスの Microsoft.Sql/managedInstances/databases/readBackups/action。
- ターゲット SQL マネージド インスタンスの Microsoft.Sql/managedInstances/crossSubscriptionPITR/action。
詳細については、Azure の組み込みロールに関するページを参照してください。
制限事項
これらの制限は、SQL Managed Instance でのポイントインタイム リストアに適用されます。
ポイントインタイム リストアを使って SQL Managed Instance のデプロイ全体を復元することはできません。 ポイントインタイム リストアを使用して、SQL Managed Instance でホストされているデータベースのコピーを作成するだけです。
ポイントインタイム リストアの制限は、データベースを同じサブスクリプション内の SQL マネージド インスタンスに復元するか、別のサブスクリプションの SQL マネージド インスタンスに復元するかによって異なります。
Azure SQL Managed Instance で サービス エンドポイント ポリシー が有効になっている場合、サブネットにサービス エンドポイント ポリシーを配置すると、異なるサブネット内のインスタンスからのポイントインタイム リストアが防止されます。
警告
SQL マネージド インスタンスのストレージ サイズに注意してください。 復元するデータのサイズによっては、SQL マネージド インスタンスのストレージが不足する可能性があります。 復元されたデータに対して SQL マネージド インスタンスに十分なストレージ領域がない場合は、別の方法を使用します。
同じサブスクリプションに復元する
ある SQL マネージド インスタンスから同じ Azure サブスクリプション内の別の SQL マネージド インスタンスに復元する場合、両方の SQL マネージド インスタンスが同じリージョンに存在する必要があります。 現在、リージョン間の復元はサポートされていません。
別のサブスクリプションに復元する
サブスクリプション間で特定の時点のバックアップを復元するには、次の制限があります。
両方のサブスクリプションが同じリージョンにある必要があります。
両方のサブスクリプションが同じテナントにある必要があります。
サブスクリプションの種類は、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 Managed Database の作成] ページの [基本] タブで、[プロジェクトの詳細] でサブスクリプションとリソース グループの詳細を指定します。 次に、[データベースの詳細] で、復元するデータベースの新しい名前を指定します。 適切な SQL マネージド インスタンスがドロップダウンリストに表示されていることを確認します。 次に、[次へ: データ ソース >] を選びます
[データ ソース] タブで、[既存のデータを使用する] の [特定の時点に復元] を選びます。 ソース データベースを含むサブスクリプション、リソース グループ、および SQL マネージド インスタンスを指定します。
[マネージド データベース] ドロップダウンから、復元するデータベースを選択し、データベースを復元する時点を選択します。 ソースとターゲットのインスタンスは、同じでも、2 つの異なるインスタンスでもかまいません。
[次へ: 追加の設定 >] を選びます
[追加の設定] タブでは、ボックスをオンにしてソース データベースからアイテム保持ポリシーを継承するか、[データ保持の構成] を選んで [ポリシーの構成] ページを開き、復元されたデータベースの保持ポリシーを設定することができます。 終わったら、 [確認と作成] を選択します。
[確認および作成] で検証が成功したら、[作成] を選んでデータベースを復元します。
このアクションにより、復元プロセスが開始されます。このプロセスでは、新しいデータベースが作成され、指定した時点における元のデータベースのデータが入力されます。 復旧プロセスの詳細については、「復旧時間」を参照してください。
Azure PowerShell を使ってデータベースを復元します。 詳細については、Azure PowerShell モジュールのインストールに関する記事を参照してください。 詳細については、「Restore-AzSqlInstanceDatabase」を参照してください
次のコード オプションのいずれかを実行します。その際にパラメーターは実際の値に置き換えてください。
データベースを同じ SQL マネージド インスタンスに復元するには:
$subscriptionId = "<subscription ID>"
$resourceGroupName = "<resource group name>"
$managedInstanceName = "<SQL 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 `
データベースを別の SQL マネージド インスタンスに復元するには、ターゲット リソース グループとターゲット SQL マネージド インスタンスの名前も指定します。
$targetResourceGroupName = "<resource group of the target SQL managed instance>"
$targetInstanceName = "<name of the target SQL 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 のドキュメントを参照してください。
次のコード オプションのいずれかを実行します。その際にパラメーターは実際の値に置き換えてください。
データベースを同じ SQL マネージド インスタンスに復元するには:
az sql midb restore -g mygroupname --mi myinstancename |
-n mymanageddbname --dest-name targetmidbname --time "2018-05-20T05:34:22"
データベースを別の SQL マネージド インスタンスに復元するには、ターゲット リソース グループと SQL マネージド インスタンスの名前も指定します。
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 を使用して削除された SQL マネージド データベースを復元するには:
Azure portal で、ソース SQL マネージド インスタンスに移動します。
左側のメニューの [データ管理] で [バックアップ] を選びます。
[データベースの表示] で [削除済み] を選びます。
復元するデータベースの [復元] を選びます。
[Azure SQL Managed Database の作成] で、データベースを復元するターゲット SQL マネージド インスタンスの詳細を入力または選択します。
[データ ソース] タブを選びます。
[データ ソース] に、ソース データベースの詳細を入力または選択します。
[追加設定] タブを選択します。
[追加の設定] で、データ保有設定を構成します。
[確認および作成] タブを選択します。
[確認および作成] で [作成] を選び、削除されたデータベースを復元します。
削除されたマネージド データベースを復元するには、次の PowerShell コード オプションのいずれかを実行します。その際にパラメーターは実際の値に置き換えてください。
削除されたデータベースを同じ SQL マネージド インスタンスに復元するには:
$subscriptionId = "<subscription ID>"
Get-AzSubscription -SubscriptionId $subscriptionId
Select-AzSubscription -SubscriptionId $subscriptionId
$resourceGroupName = "<resource group name>"
$managedInstanceName = "<SQL 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
データベースを別の SQL マネージド インスタンスに復元するには、ターゲット リソース グループとターゲット SQL マネージド インスタンスの名前も指定します。
$targetResourceGroupName = "<resource group of target SQL managed instance>"
$targetInstanceName = "<target SQL 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) で SQL マネージド インスタンスに直接接続し、 DROP Transact-SQL (T-SQL) コマンドを使用することです。
DROP DATABASE WorldWideImporters;
SQL マネージド インスタンス内のデータベースに接続するには、次のいずれかの方法を使用します。
Azure portal で、SQL マネージド インスタンス内のデータベースを選択します。
コマンド バーの [削除] を選びます。
SQL マネージド インスタンスから既存のデータベースを削除するには、パラメーターの代わりに値を使用して次の PowerShell コードを実行します。
$resourceGroupName = "<resource group name>"
$managedInstanceName = "<SQL managed instance name>"
$databaseName = "<source database name>"
Remove-AzSqlInstanceDatabase -Name $databaseName -InstanceName $managedInstanceName -ResourceGroupName $resourceGroupName
SQL マネージド インスタンスから既存のデータベースを削除するには、パラメーターに置き換えた値を使用して、次の Azure CLI コードを実行します。
az sql midb delete -g mygroupname --mi myinstancename -n mymanageddbname
元のデータベース名と一致するように新しいデータベース名を変更する
SQL Server Management Studio (SSMS) を使用して、SQL マネージド インスタンスに直接接続します。 次に、以下の T-SQL クエリを実行します。 このクエリを実行すると、復元されたデータベースの名前を、上書きする予定のドロップされたデータベースの名前に変更することができます。
ALTER DATABASE WorldWideImportersPITR MODIFY NAME = WorldWideImporters;
SQL マネージド インスタンス内のデータベースに接続するには、次のいずれかの方法を使用します。
次のステップ