【问题标题】:Restore Azure SQL DB over an existing DB to maintain backup history在现有数据库上还原 Azure SQL 数据库以维护备份历史记录
【发布时间】:2020-01-25 13:43:37
【问题描述】:

我正在为我们的 Web 应用程序设置 Azure SQL DB。我们启用了时间点保留 (PITR) 和长期保留 (LTR)。我们的流程是将备份保留 1 年。

定期,我们需要通过应用 SQL 脚本来升级数据库。有时升级脚本有问题,升级失败。我们需要将数据库回滚到以前的版本。

为了回滚数据库,我尝试了恢复功能。但是,恢复功能似乎只创建新数据库;这就是问题所在。恢复到新数据库并删除旧数据库效果很好,但我们丢失了所有备份历史记录。看来备份对数据库来说很累(可能是 ResourceId)。

那么,我怎样才能使用 Azure SQL DB 并定期恢复一个 DB 并仍然保留所有备份历史记录?

【问题讨论】:

  • 您是否找到任何好的解决方案来维护已恢复数据库实例的备份历史记录?
  • 我为此功能创建了一个社区请求:feedback.azure.com/forums/217321-sql-database/suggestions/…
  • 根据我的发现,LTR 备份将保留用于已删除的数据库。因此,如果您使用旧数据库名称重命名新数据库,您的 LTR 备份将继续由原始数据库名称创建和查询(尽管只能通过 powershell)。时间点恢复似乎仅限于数据库的生命周期,因为它们使用差异备份和事务日志来执行恢复。还值得注意的是,Azure 门户不会为您完成所有这些艰苦的工作,您必须使用 PowerShell 的 Az 模块。

标签: database azure azure-sql-database backup restore


【解决方案1】:

很遗憾,从 Azure SQL 数据库中的备份还原总是会创建一个新数据库。这里的秘诀可能是将新恢复的数据库重命名为原始数据库的名称。您甚至会看到恢复的数据库一旦重命名,就会显示所有安全建议,原始数据库的自动调整建议。

所以删除已有的数据库,恢复数据库,重命名为原来的数据库。

【讨论】:

  • 是的,这就是我实施的“关闭”解决方案。它留下了一个小的备份漏洞:如果客户升级,然后需要在最后一次 LTR 后恢复到数据库版本,他们不能:-(。谢谢。
  • 感谢您提供的信息。这绝对是一个有用的功能,可以将现有备份迁移到最近恢复的数据库中。维护已删除数据库的集合使得向我们的客户列出备份变得困难。
  • @Greg 只是为了确认。如果删除现有数据库“db”,将数据库从已删除恢复为“dbnew”并将“dbnew”重命名为“db”,备份历史记录将与现在的“db”相关联。对吗?
  • 感谢您提供的信息。这太疯狂了。
  • 我只需要完全按照描述执行此操作(恢复、删除原始文件、将备份重命名为原始文件)。奇怪的是:在 SQL Server > 备份 > 可用的 LTR 备份中,它没有列出任何可用的备份(“无”)。但是:当点击恢复时,我仍然可以看到我的 LTR 备份?‍♂️ 我还必须重新应用我的备份策略。让我知道是否有更好的解决方案来恢复备份。
【解决方案2】:

你可以参考这个文档Recover an Azure SQL database using automated database backups,它给出了所有recover都在创建新数据库的答案。

默认情况下,SQL 数据库备份存储在异地复制 Blob 存储 (RA-GRS) 中。以下选项可用于使用自动数据库备份进行数据库恢复: 在保留期内恢复到指定时间点的同一 SQL 数据库服务器上创建新数据库。

  • 在恢复到 已删除数据库的删除时间。
  • 在同一区域的任何 SQL 数据库服务器上创建新数据库 恢复到最近的备份点。
  • 在任何其他区域的任何 SQL 数据库服务器上创建新数据库 恢复到最近复制的备份点。

如果您配置了备份长期保留,您还可以从任何 SQL 数据库服务器上的任何 LTR 备份创建新数据库。

重要

您无法在还原期间覆盖现有数据库。

“那么,我怎样才能使用 Azure SQL DB 并定期恢复 DB 并仍然保留所有备份历史记录?”

您可以使用数据库替换

如果还原的数据库旨在替换原始数据库,则应指定原始数据库的计算大小和服务层。然后,您可以使用 T-SQL 中的ALTER DATABASE 命令重命名原始数据库并为恢复的数据库赋予原始名称。

希望这会有所帮助。

【讨论】:

  • 谢谢,我看了这个,但是备份历史与原始数据库相关联,所以它会随着旧数据库移动,所以新数据库不会有任何备份历史,即使它会具有原始数据库的名称。
  • 嗨@Greg,我知道新数据库仍然具有自动备份功能,它将具有新的备份历史记录。不要删除原始数据库,使用备份手动创建新数据库,然后使用新数据库与您的应用程序一起使用。所有备份历史仍然存在。但这不是一个好的解决方案。据我所知,Azure sql 数据库暂时不能帮你达到目的。
猜你喜欢
  • 1970-01-01
  • 2011-04-21
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2021-12-03
  • 1970-01-01
相关资源
最近更新 更多