使用 RDS for SQL Server 访问事务日志备份
通过访问 RDS for SQL Server 的事务日志备份,您可以列出数据库的事务日志备份文件并将它们复制到目标 Amazon S3 桶。通过在 Amazon S3 桶中复制事务日志备份,您可以将它们与完整和差异数据库备份结合使用,以执行时间点数据库还原。您可以使用 RDS 存储过程设置对事务日志备份的访问权限,列出可用的事务日志备份,并将它们复制到您的 Amazon S3 桶。
访问事务日志备份可提供以下功能和好处:
列出并查看 RDS for SQL Server 数据库实例上数据库的可用事务日志备份的元数据。
将可用事务日志备份从 RDS for SQL Server 复制到目标 Amazon S3 桶。
无需还原整个数据库实例,即可执行数据库的时间点还原。有关将数据库实例还原到某个时间点的更多信息,请参阅将数据库实例还原到指定时间。
可用性和支持
所有 AWS 区域都支持访问事务日志备份。访问事务日志备份适用于 Amazon RDS 支持的所有 Microsoft SQL Server 版本。
要求
在启用访问事务日志备份之前,必须满足以下要求:
-
必须在数据库实例上启用自动备份,并且备份保留期必须设置为一天或多天的值。有关启用自动备份和配置保留策略的更多信息,请参阅启用自动备份。
-
Amazon S3 桶必须与源数据库实例存在于同一账户和区域中。在启用访问事务日志备份之前,请选择现有的 Amazon S3 桶或创建新桶,用于存储事务日志备份文件。
-
必须按如下方式配置 Amazon S3 桶权限策略,以允许 Amazon RDS 将事务日志文件复制到其中:
将桶的对象账户拥有权属性设置为 Bucket Owner Preferred(首选桶拥有者)。
添加以下策略。原定设置情况下没有策略,因此,请使用桶访问控制列表(ACL)编辑并添加桶策略。
以下示例使用 ARN 指定资源。我们建议在基于资源的信任关系中使用
SourceArn
和SourceAccount
全局条件上下文键,以此限制服务对特定资源的权限。有关使用 ARN 的更多信息,请参阅 Amazon 资源名称(ARN)和在 Amazon RDS 中使用 Amazon Resource Name (ARN)。例 用于访问事务日志备份的 Amazon S3 权限策略
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Only allow writes to my bucket with bucket owner full control", "Effect": "Allow", "Principal": { "Service": "backups.rds.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::
{customer_bucket}/{customer_path}
/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:sourceAccount": "{customer_account}", "aws:sourceArn": "{db_instance_arn}" } } } ] } -
用于访问 Amazon S3 桶的 AWS Identity and Access Management(IAM)角色。如果您已有一个 IAM 角色,则可以使用它。您可以选择在使用AWS Management Console添加
SQLSERVER_BACKUP_RESTORE
选项时为自己创建新的 IAM 角色。或者,您可以手动创建一个新的角色。有关使用SQLSERVER_BACKUP_RESTORE
创建和配置 IAM 角色的更多信息,请参阅为本机备份和还原手动创建 IAM 角色。 -
必须将
SQLSERVER_BACKUP_RESTORE
选项添加到数据库实例上的选项组。有关添加SQLSERVER_BACKUP_RESTORE
选项的更多信息,请参阅SQL Server 中对本机备份和还原的支持。注意
如果您的数据库实例启用了存储加密,则必须以原生备份和还原选项组中提供的 IAM 角色提供 AWS KMS(KMS)操作和密钥。
(可选)如果您打算使用
rds_restore_log
存储过程执行时间点数据库还原,我们建议将相同的 Amazon S3 路径用于原生备份和还原选项组以及访问事务日志备份。此方法可确保当 Amazon RDS 代入选项组中的角色以执行还原日志功能时,它有权从相同的 Amazon S3 路径检索事务日志备份。 -
如果数据库实例已加密,则无论加密类型如何(AWS 托管式密钥或客户自主管理型密钥),您都必须在 IAM 角色和
rds_tlog_backup_copy_to_S3
存储过程中提供客户自主管理型 KMS 密钥。
限制和建议
访问事务日志备份有以下限制和建议:
-
对于任何配置了 1 到 35 天备份保留期的数据库实例,您最多可以列出并复制最近七天的事务日志备份。
-
用于访问事务日志备份的 Amazon S3 桶必须与源数据库实例位于相同的账户和区域中。不支持跨账户和跨区域复制。
-
只能将一个 Amazon S3 桶配置为将事务日志备份复制到的目标。您可以使用
rds_tlog_copy_setup
存储过程选择新的目标 Amazon S3 桶。有关选择新目标 Amazon S3 桶的更多信息,请参阅设置访问事务日志备份。 -
如果您的 RDS 实例未启用存储加密,则在使用
rds_tlog_backup_copy_to_S3
存储过程时无法指定 KMS 密钥。 -
不支持多账户复制。用于复制的 IAM 角色仅允许对数据库实例的拥有者账户中的 Amazon S3 桶拥有写入权限。
-
在 RDS for SQL Server 数据库实例上只能运行任何类型的两个并发任务。
-
在给定时间只能为单个数据库运行一个复制任务。如果要复制数据库实例上多个数据库的事务日志备份,请对每个数据库使用单独的复制任务。
-
如果您复制 Amazon S3 桶中已存在的同名事务日志备份,则现有的事务日志备份将被覆盖。
-
您只能在主数据库实例上运行可访问事务日志备份的存储过程。您无法在 RDS for SQL Server 只读副本或多可用区数据库集群的辅助实例上运行这些存储过程。
-
如果在
rds_tlog_backup_copy_to_S3
存储过程运行时重启 RDS for SQL Server 数据库实例,则当数据库实例恢复联机时,任务将自动从头开始重新启动。重启前任务运行时已复制到 Amazon S3 桶的任何事务日志备份都将被覆盖。 -
无法将 Microsoft SQL Server 系统数据库和
RDSAdmin
数据库配置为访问事务日志备份。 -
不支持复制到由 SSE-KMS 加密的桶。
设置访问事务日志备份
要设置访问事务日志备份,请完成要求部分中的要求列表,然后运行 rds_tlog_copy_setup
存储过程。该过程将在数据库实例级别启用访问事务日志备份功能。您无需为数据库实例上的每个单独数据库运行该过程。
重要
必须在 SQL Server 中向数据库用户授予对于每个数据库的 db_owner
角色,才能配置和使用访问事务日志备份功能。
例 用法:
exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn='arn:aws:s3:::
mybucket
/myfolder
';
以下参数是必需参数:
-
@target_s3_arn
– 要将事务日志备份文件复制到的目标 Amazon S3 桶的 ARN。
例 设置 Amazon S3 目标桶:
exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn='arn:aws:s3:::
accesstlogs-testbucket
/mytestdb1
';
要验证配置,请调用 rds_show_configuration
存储过程。
例 验证配置:
exec rdsadmin.dbo.rds_show_configuration @name='target_s3_arn_for_tlog_copy';
要修改对事务日志备份的访问权限以指向其他 Amazon S3 桶,您可以查看当前 Amazon S3 桶值,并使用 @target_s3_arn
的新值重新运行 rds_tlog_copy_setup
存储过程。
例 查看为访问事务日志备份而配置的现有 Amazon S3 桶
exec rdsadmin.dbo.rds_show_configuration @name='target_s3_arn_for_tlog_copy';
例 更新到新的目标 Amazon S3 桶
exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn='arn:aws:s3:::
mynewbucket
/mynewfolder
';
列出可用的事务日志备份
在 RDS for SQL Server 中,配置为使用完整恢复模式并将数据库实例备份保留期设置为一天或多天的数据库实例备份会自动启用事务日志备份。通过启用访问事务日志备份,您可以将多达七天的这些事务日志备份复制到 Amazon S3 桶中。
启用访问事务日志备份后,就可以开始使用它来列出和复制可用的事务日志备份文件。
列出事务日志备份
要列出可用于单个数据库的所有事务日志备份,请调用 rds_fn_list_tlog_backup_metadata
函数。调用函数时可以使用 ORDER BY
或 WHERE
子句。
例 列出和筛选可用的事务日志备份文件
SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename'); SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename') WHERE rds_backup_seq_id = 3507; SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename') WHERE backup_file_time_utc > '2022-09-15 20:44:01' ORDER BY backup_file_time_utc DESC;

rds_fn_list_tlog_backup_metadata
函数返回以下输出:
列名称 | 数据类型 | 描述 |
---|---|---|
|
sysname |
为列出其事务日志备份而提供的数据库名称。 |
|
int |
输入参数 |
|
uniqueidentifier |
创建时原始数据库的唯一 ID。还原数据库时,该值保持不变,即使还原到不同的数据库名称也是如此。 |
|
int |
RDS 在内部用于维护每个事务日志备份文件的序列号的 ID。 |
|
bigint |
生成事务备份文件的纪元时间。 |
|
datetime |
|
|
numeric(25,0) |
事务日志备份文件的第一条或最早的日志记录的日志序列号。 |
|
numeric(25,0) |
事务日志备份文件的上一条或下一条日志记录的日志序列号。 |
|
bit |
一个布尔值,表示当前事务日志备份文件和先前的事务日志备份文件之间的日志链是否断开。 |
|
bigint |
事务备份集的大小(以字节为单位)。 |
|
varchar(4000) |
如果 |
复制事务日志备份
要将单个数据库的一组可用事务日志备份复制到您的 Amazon S3 桶,请调用 rds_tlog_backup_copy_to_S3
存储过程。rds_tlog_backup_copy_to_S3
存储过程将启动一项新任务以复制事务日志备份。
注意
rds_tlog_backup_copy_to_S3
存储过程将在不对 is_log_chain_broken
属性进行验证的情况下复制事务日志备份。因此,在运行 rds_tlog_backup_copy_to_S3
存储过程之前,您应该手动确认未断开的日志链。有关进一步的解释,请参阅验证事务日志备份日志链。
例 rds_tlog_backup_copy_to_S3
存储过程的使用
exec msdb.dbo.rds_tlog_backup_copy_to_S3 @db_name='
mydatabasename
', [@kms_key_arn='arn:aws:kms:region
:account-id
:key/key-id
'], [@backup_file_start_time='2022-09-01 01:00:15'
], [@backup_file_end_time='2022-09-01 21:30:45'
], [@starting_lsn=149000000112100001], [@ending_lsn=149000000120400001], [@rds_backup_starting_seq_id=5], [@rds_backup_ending_seq_id=10];
以下输入参数可用:
参数 | 描述 |
---|---|
|
要为其复制事务日志备份的数据库的名称 |
|
用于加密存储加密的数据库实例的 KMS 密钥的 ARN。 |
|
|
|
|
|
|
|
|
|
|
|
|
您可以指定一组时间、LSN 或序列 ID 参数。只需要一组参数。
您也可以在任何参数集中仅指定一个参数。例如,通过仅为 backup_file_end_time
参数提供值,则该时间之前在七天限制内的所有可用事务日志备份文件都将复制到您的 Amazon S3 桶中。
以下是 rds_tlog_backup_copy_to_S3
存储过程的有效输入参数组合。
提供的参数 | 预期结果 |
---|---|
|
复制最近七天且在提供的 |
|
复制最近七天的事务日志备份,并从提供的 |
|
复制最近七天的事务日志备份,直至提供的 |
|
复制最近七天内可用且介于提供的 |
|
复制最近七天内可用的事务日志备份,从提供的 |
|
复制最近七天内可用的事务日志备份,直到提供的 |
|
复制最近七天内可用且在提供的范围 |
|
复制最近七天内可用的事务日志备份,从提供的 |
|
复制最近七天内可用的事务日志备份,直到提供的 |
|
使用提供的 |
验证事务日志备份日志链
为访问事务日志备份而配置的数据库必须启用自动备份保留。自动备份保留将数据库实例上的数据库设置为 FULL
恢复模式。要支持数据库的时间点还原,请避免更改数据库恢复模式,因为这可能会导致日志链断开。我们建议将数据库设置为 FULL
恢复模式。
要在复制事务日志备份之前手动验证日志链,请调用 rds_fn_list_tlog_backup_metadata
函数并查看 is_log_chain_broken
列中的值。值为“1”表示当前日志备份和前一个日志备份之间的日志链已断开。
以下示例显示了 rds_fn_list_tlog_backup_metadata
存储过程的输出中存在中断的日志链。

在正常日志链中,给定 rds_sequence_id 的 first_lsn 的日志序列号(LSN)值应与前一个 rds_sequence_id 中的 last_lsn 值相匹配。在图中,rds_sequence_id 为 45 的 first_lsn 值为 90987,这与前一个 rds_seque_id 为 44 的 last_lsn 值 90985 不匹配。
有关 SQL Server 事务日志架构和日志序列号的更多信息,请参阅 Microsoft SQL Server 文档中的事务日志逻辑架构
Amazon S3 桶文件夹和文件结构
在 Amazon S3 桶中,事务日志备份具有以下标准结构和命名约定:
在每个数据库的
target_s3_arn
路径下创建一个新文件夹,其命名结构为{db_id}.{family_guid}
。在该文件夹中,事务日志备份的文件名结构为
{db_id}.{family_guid}.{rds_backup_seq_id}.{backup_file_epoch}
。您可以使用
rds_fn_list_tlog_backup_metadata
函数查看family_guid,db_id,rds_backup_seq_id and backup_file_epoch
的详细信息。
以下示例显示 Amazon S3 桶内一组事务日志备份的文件夹和文件结构。

跟踪任务的状态
要跟踪复制任务的状态,请调用 rds_task_status
存储过程。如果您未提供任何参数,则存储过程将返回所有任务的状态。
例 用法:
exec msdb.dbo.rds_task_status @db_name='database_name', @task_id=ID_number;
以下参数为可选参数:
-
@db_name
– 要显示其任务状态的数据库的名称。 -
@task_id
– 要显示其任务状态的任务的 ID。
例 列出特定任务 ID 的状态:
exec msdb.dbo.rds_task_status @task_id=5;
例 列出特定数据库和任务的状态:
exec msdb.dbo.rds_task_status@db_name='my_database',@task_id=5;
例 列出特定数据库的所有任务及其状态:
exec msdb.dbo.rds_task_status @db_name='my_database';
例 列出当前数据库实例上的所有任务及其状态:
exec msdb.dbo.rds_task_status;
取消任务
要取消正在运行的任务,请调用 rds_cancel_task
存储过程。
例 用法:
exec msdb.dbo.rds_cancel_task @task_id=ID_number;
以下参数是必需参数:
-
@task_id
– 要取消的任务的 ID。可以通过调用rds_task_status
存储过程查看任务 ID。
有关查看和取消正在运行的任务的更多信息,请参阅使用本机备份和还原导入和导出 SQL Server 数据库。
访问事务日志备份故障排除
以下是您使用存储过程访问事务日志备份时可能遇到的问题。
存储过程 | 错误消息 | 问题 | 故障排除建议 |
---|---|---|---|
rds_tlog_copy_setup |
|
未为数据库实例启用自动备份。 |
必须启用数据库实例备份保留,保留期至少为一天。有关启用自动备份和配置备份保留期的更多信息,请参阅备份保留期。 |
rds_tlog_copy_setup |
|
出现内部错误。 |
重新连接到 RDS 端点并再次运行 |
rds_tlog_copy_setup |
|
在事务中使用 |
运行 |
rds_tlog_copy_setup |
|
为输入参数 |
确保输入参数 |
rds_tlog_copy_setup |
|
|
按照“要求”部分指定的方式启用 |
rds_tlog_copy_setup |
|
为输入参数 |
确保输入参数 |
rds_tlog_copy_setup |
|
提供的输入参数 |
确保输入参数 |
rds_tlog_copy_setup |
|
|
要修改访问事务日志备份的 Amazon S3 桶值,请提供不同的 |
rds_tlog_copy_setup |
|
生成凭证以启用访问事务日志备份时出现未指定的错误。 |
检查您的设置配置,然后重试。 |
rds_tlog_copy_setup |
|
任何时候只能运行两个任务。有待处理任务等待完成。 |
查看待处理任务并等待其完成。有关监控任务状态的更多信息,请参阅跟踪任务的状态。 |
rds_tlog_backup_copy_to_S3 |
|
给定数据库在任何时候只能运行一个复制任务。有待处理的复制任务等待完成。 |
查看待处理任务并等待其完成。有关监控任务状态的更多信息,请参阅跟踪任务的状态。 |
rds_tlog_backup_copy_to_S3 |
|
三个参数集均未提供,或者提供的参数集缺少必需的参数。 |
您可以指定时间、lsn 或序列 ID 参数。这三组参数中的一组是必需的。有关所需参数的更多信息,请参阅复制事务日志备份。 |
rds_tlog_backup_copy_to_S3 |
|
未为数据库实例启用自动备份。 |
有关启用自动备份和配置备份保留期的更多信息,请参阅备份保留期。 |
rds_tlog_backup_copy_to_S3 |
|
为输入参数 |
使用正确的数据库名称。要按名称列出所有数据库,请运行 |
rds_tlog_backup_copy_to_S3 |
|
为输入参数 |
不允许使用以下数据库来访问事务日志备份: |
rds_tlog_backup_copy_to_S3 |
|
为输入参数 |
使用正确的数据库名称。要按名称列出所有数据库,请运行 |
rds_tlog_backup_copy_to_S3 |
|
未为数据库实例启用自动备份。 |
有关启用自动备份和配置备份保留期的更多信息,请参阅备份保留期。 |
rds_tlog_backup_copy_to_S3 |
|
出现内部错误。 |
重新连接到 RDS 端点并再次运行 |
rds_tlog_backup_copy_to_S3 |
|
提供了多个参数集。 |
您可以指定时间、lsn 或序列 ID 参数。这三组参数中的一组是必需的。有关所需参数的更多信息,请参阅复制事务日志备份。 |
rds_tlog_backup_copy_to_S3 |
|
在事务中使用 |
运行 |
rds_tlog_backup_copy_to_S3 |
|
对于提供的输入参数,没有适合副本保留期限的可用事务日志备份。 |
使用一组有效的参数重试。有关所需参数的更多信息,请参阅复制事务日志备份。 |
rds_tlog_backup_copy_to_S3 |
|
检测到所提供的 S3 桶或其策略权限存在问题。 |
确认访问事务日志备份的设置正确无误。有关 S3 桶的设置要求的更多信息,请参阅要求。 |
rds_tlog_backup_copy_to_S3 |
|
已尝试在 RDS 只读副本实例上执行存储过程。 |
连接到 RDS 主数据库实例以运行 |
rds_tlog_backup_copy_to_S3 |
|
为输入参数 |
确保为输入参数 |
rds_tlog_backup_copy_to_S3 |
|
尚未为尝试在提供的 |
确保运行存储过程的账户对于所提供的 |
rds_tlog_backup_copy_to_S3 |
|
为输入参数 |
确保为输入参数 |
rds_tlog_backup_copy_to_S3 |
|
|
按照“要求”部分指定的方式启用 |
rds_tlog_backup_copy_to_S3 |
|
为输入参数 |
确保为输入参数 |
rds_tlog_backup_copy_to_S3 |
|
Amazon S3 桶权限可能存在问题,或者提供的 Amazon S3 桶位于其他账户或区域中。 |
确保 Amazon S3 桶策略权限允许 RDS 访问。确保 Amazon S3 桶与数据库实例位于同一账户和区域中。 |
rds_tlog_backup_copy_to_S3 |
|
如果未在数据库实例上启用存储加密,则不应提供输入参数 |
请勿为 |
rds_tlog_backup_copy_to_S3 |
|
在数据库实例上启用存储加密时,必须提供输入参数 |
为 |
rds_tlog_backup_copy_to_S3 |
|
在尝试运行 |
在运行 |