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

How can I backup the transaction logs when i backup an Azure database?

我目前使用以下脚本备份 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 "$SqlInstallationFolder0\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 对于将副本传输到本地服务器、开发人员以解决错误 analysis/development 或在 SQL 版本之间轻松移动数据库很有用,但不是备份解决方案。

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

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

PiTR(或 Point in Time Restore)给你能力将数据库恢复到任何毫秒过去最多 31 天(取决于每个数据库的配置设置)。我已经使用了很多次,最难的部分是将 UTC(Azure 门户工作所在的时间)转换为您需要将数据库恢复到的本地时间。

LTR(或 Long Term Retention)每周给你备份,用于保存备份的每月或每年选项。 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 年了(单一数据库和弹性池的混合),我们从未遇到过我们无法处理的恢复请求迎合。 PiTR 的 31 天真的是一个杀手级的功能。

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

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

我也发现了 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.

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