【发布时间】:2021-06-15 09:32:34
【问题描述】:
AFAIK 没有 REST API 直接提供此功能。因此,我通过Create request 使用还原(还有其他方法,但不能保证事务一致性并且更复杂)。
由于无法关闭短时间备份(保留时间必须至少为 1 天),因此它应该是可靠的。我在请求中使用“properties.restorePointInTime”属性的当前时间。这适用于大多数数据库。但是一个数据库向我返回了这个错误(来自异步操作请求):
"error": {
"code": "BackupSetNotFound",
"message": "No backups were found to restore the database to the point in time 6/14/2021 8:20:00 PM (UTC). Please contact support to restore the database."
}
我知道我没有超出范围,因为如果恢复时间早于“earliestRestorePoint”(这可以在托管数据库的 GET 请求中找到),或者将来我会收到“PitrPointInTimeInvalid”错误。尽管如此,我还是发现了一些信息,我不应该使用当前时间,而是使用当前时间 - 最多 6 分钟。如果通过不允许输入比当前时间更新的时间 - 6 分钟通过 Azure 门户(它失败并出现相同的错误顺便说一句)完成,这也是正确的。经过几次尝试,我发现当前时间 - 大约 40 分钟开始正常工作。但是 40 分钟太多了,在我尝试等待异步操作的结果之前,我没有找到任何方法来找出什么时间有效。
我的问题是:有没有办法找到最晚的恢复时间?
或者有没有更好的方法来“复制”托管数据库,以保证事务一致性并且相当快?
编辑:
我所描述的问题已报告给 MS。它发生在:
- 有自定义时区格式,例如UTC + 1 小时。
- 在所需时间点跳过源数据库的备份,因为数据库处于非活动状态(无活动事务)。
这应该从现在(2021 年 8 月 25 日)开始修复,我无法在当前时间 - 10 分钟内重现它。我还被告知应该有新的 API 允许在不使用 PITR 的情况下进行复制(不早于 1Q/22)。
【问题讨论】:
-
复制的目的是什么?您是否尝试过异地复制/故障转移组?
-
我需要确保 db 在后续操作期间不会更改(并且不介意它是几分钟的“旧”)。我想通过 sqlpackage 工具进行备份。但我不希望对原始数据库有任何额外负载,并希望保证事务一致性。
标签: azure copy database-restore azure-managed-database