备份 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.
这可能有助于您获得满足要求所需的配置。
我目前使用以下脚本备份 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.
这可能有助于您获得满足要求所需的配置。