SQL 托管实例 - 跨订阅还原/迁移

Jon*_*ite 5 migration restore azure-sql-managed-instance

精简版:

我正在尝试将备份从一个 SQL 托管实例恢复到另一个 SQL 托管实例。这些在不同的订阅中。使用此处的示例 3,我至少可以看到恢复从 sys.dm_operation_status 开始,但错误消息是“订阅 [目标] 不包含 [源 SQL MI]”。

问题: 如何将数据库从一个 SQL 托管实例迁移到另一个(在不同订阅中)?我目前的解决方法是对 blob 存储执行 copy_only 并以这种方式恢复。

一旦我们启用 TDE(进行中),我们将无法对 blob 执行 copy_only 备份。然后怎样呢?

长版:

最近,我们公司开始在 SQL 托管实例(和其他 PaaS/IaaS)上运行 Azure 中的生产工作负载,并且进展顺利。尽管我确实熟悉数据库迁移服务 (DMS),但我们有一个足够大的窗口,表明我们能够使用完整备份执行初始加载。

但是现在我们正在扩展我们的 dev/test/qa 环境,当然我们现在希望从生产环境恢复到这些环境。出于隔离目的,每个人都获得了自己的订阅。

这些命令有效,因为我至少可以在 sys.dm_operation_status 中看到恢复操作开始,但它失败并出现错误。错误是“订阅 [目标] 不包含 [源 SQL MI]”并让我相信交叉订阅还原对我们不起作用(尽管跨区域可以)。

DMS 似乎不支持使用数据库迁移服务作为源的方案。

Select-AzSubscription -Subscription $SourceSubscriptionID

$GeoBackup = Get-AzSqlInstanceDatabaseGeoBackup -ResourceGroupName $SourceResourceGroupName `
     -InstanceName $SourceSQLMI `
     -Name $SourceDatabaseName

Select-AzSubscription -Subscription $TargetSubscriptionID

Restore-AzSqlInstanceDatabase -FromGeoBackup `
    -GeoBackupObject $GeoBackup `
    -TargetInstanceDatabaseName $TargetDatabaseName `
    -TargetInstanceName $TargetSQLMI `
    -TargetResourceGroupName $TargetResourceGroupName
Run Code Online (Sandbox Code Playgroud)

任何建议,想法?如有必要,我愿意使用各种 Azure PowerShell 的预览版本,尽管我没有发现任何表明它有所不同的地方。

可能的解决方法

我确实从我们的一位 Microsoft 联系人那里获得了一个链接,该链接似乎表明您可以在同一订阅中建立托管实例,还原到该实例,然后将托管实例移动到另一个订阅。我没有尝试过,所以我不知道。他们提供的链接在这里,尽管我怀疑它的有效性。

小智 5

仅复制备份是目前唯一的解决方案。交叉订阅 pitr 和地理恢复不起作用,因为目前我们无法验证发起者是否对源订阅和目标订阅都具有所有必需的权限。


小智 5

要添加到Jovanpop 的答案中,如果您使用 AKV 集成(即 BYOK TDE),只要其他订阅中的目标实例有权访问源实例上使用的相同加密密钥,您仍然应该能够在打开 TDE 的情况下进行 copy_only 备份。


Dan*_*ava 5

目前(2020 年 4 月),同一地区和同一租户 ID(例如仅同一客户/公司)的交叉订阅 PITR 还原仅作为 EA、CSP 或 PayGo 订阅的有限预览提供。您需要登录到打算使用它的 Azure 门户(通过 EA/CSP/PayGo 订阅)并创建支持票,选择支持选项“自动备份或时间点还原”。几天后,您就可以获得有限预览版的批准。此解决方案还支持 Azure 托管密钥的 TDE 加密备份。对于 BYOK 密钥,这仅在客户在源和目标 MI 上具有相同密钥时才有效。希望这可以帮助。