azure - 备份 Azure 数据库时如何备份事务日志?

标签 azure powershell azure-sql-database database-backups

我目前使用以下脚本备份 Azure 数据库:

 param([string]$ConnectionString = 
 “Server=tcp:….database.windows.net,1433;Database=testdatabase;User 
   ID=something@server;Password=pwd;Trusted_Connection=False;Encrypt=True;Connection 
      Timeout=30;” 
  [string]$DatabaseName = "testdatabase",
  [string]$OutputFile = "c:\backups\testbackup.bacpac",
  [string]$SqlInstallationFolder = "C:\Program Files (x86)\Microsoft SQL Server")
 
   Add-Type -Path "$SqlInstallationFolder\110\DAC\bin\Microsoft.SqlServer.Dac.dll"
   $Services = new-object Microsoft.SqlServer.Dac.DacServices $ConnectionString
  if ($Services -eq $null)
  {
     exit
  }
  $Services.ExportBacpac($OutputFile, $DatabaseName)

该部分工作并创建文件。 但是我如何知道事务日志是否也被备份,以便当我进行恢复时它们在那里? 我想执行类似于事务日志备份和完整备份的操作。 上面的脚本可以做到这一点吗?

最佳答案

您使用的 BACPAC 文件和方法不适合您的目的。

BACPAC 是数据的快照,不包含任何允许您恢复到创建 BACPAC 之前的信息。 BACPAC 对于将副本传输到本地服务器、开发人员用于错误分析/开发或在 SQL 版本之间轻松移动数据库非常有用,但不是备份解决方案。

See here for more information about, and common uses for BACPAC/DACPAC files.

在 Azure SQL 数据库(单个数据库或池数据库)的上下文中,事务日志的概念如您所知已经发生了变化。在现代环境中,Azure 门户中的 PiTR 和 LTR 备份功能满足了恢复到之前时刻的需求。

PiTR(或时间点Restore 中的点)使您能够将数据库恢复到过去 31 天以内的任意毫秒时间(取决于每个数据库的配置设置)。我已经使用过很多次了,最难的部分是将 UTC(Azure 门户使用的时间)转换为您需要将数据库恢复到的本地时间。

LTR(或长期长期保留保留)备份为您提供每周、每月或每年保存备份的选项。 Here is a good MS Doc article on the subject其中指出:

When you restore a database from an LTR, the service determines which full, differential, and transaction log backups need to be restored.

我们在 Azure SQL 上拥有超过 100 个客户端数据库大约 3 年了(单一数据库和弹性池的混合),而且我们从未遇到过无法满足的恢复请求。 31 天的 PiTR 确实是一个 killer 级功能。

更新 您可以在此处查看可用于特定数据库的 LTR 备份:

转到 Azure 门户中的相关数据库,转到“数据管理 -> 备份”边栏选项卡,然后单击要查看的数据库旁边的“管理”。您将看到类似这样的内容,它应该反射(reflect)您对该数据库的 LTR 备份配置。

enter image description here

我也发现了this link to an MS Docs article that states :

Note

You can use SQL Agent jobs to schedule copy-only database backups as an alternative to LTR beyond 35 days.

这可能有助于帮助您获得满足要求所需的配置。

关于azure - 备份 Azure 数据库时如何备份事务日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68326417/