精简版:
我正在尝试将备份从一个 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
有什么建议、想法吗?如有必要,我愿意使用各种 Azure PowerShell 的预览版,尽管我没有发现任何东西表明它在那里有所不同。
可能的解决方法
我确实从我们的一位 Microsoft 联系人那里获得了一个链接,该链接似乎表明您可以在同一个订阅中建立一个托管实例,恢复到它,然后将托管实例移动到另一个订阅。我没有尝试过,所以我不知道。他们提供的链接在这里,尽管我怀疑它的有效性。
目前(2020 年 4 月),同一地区和同一租户 ID(仅限同一客户/公司)的交叉订阅 PITR 恢复仅作为 EA、CSP 或 PayGo 订阅的有限预览版提供。您需要登录到打算使用它的 Azure 门户(通过 EA/CSP/PayGo 订阅)并创建支持票证,选择支持选项“自动备份或时间点恢复”。几天后,您可以获得有限预览的批准。此解决方案还支持 Azure 托管密钥的 TDE 加密备份。对于 BYOK 密钥,这仅在客户在源 MI 和目标 MI 上具有相同密钥时才有效。希望这可以帮助。
仅复制备份是目前唯一的解决方案。跨订阅pitr 和geo restore 不起作用,因为目前我们无法验证发起者是否拥有源订阅和目标订阅的所有必需权限。
要添加到Jovanpop 的答案,如果您使用 AKV 集成,即 BYOK TDE,您仍然应该能够在 TDE 开启的情况下进行 copy_only 备份,只要您在其他订阅中的目标实例可以访问源实例上使用的相同加密密钥。
Bradley Ball在 Microsoft 数据架构博客上使用 TDE 和 Azure Key Vault 在SQL 托管实例上使用 TDE 和 Azure Key Vault在2 个订阅之间恢复托管实例数据库所需的步骤非常好。
这篇文章很长,有很多细节和截图,但大纲是: