

# 复制事务日志备份
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Copying"></a>

要将单个数据库的一组可用事务日志备份复制到您的 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` 存储过程之前，您应该手动确认未断开的日志链。有关进一步的解释，请参阅[验证事务日志备份日志链](#USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.LogChain)。

**Example `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];
```

以下输入参数可用：


****  

| 参数 | 说明 | 
| --- | --- | 
| `@db_name` | 要为其复制事务日志备份的数据库的名称 | 
| `@kms_key_arn` | 客户托管的 KMS 密钥。如果您使用 Amazon 托管的 KMS 密钥加密数据库实例，则必须创建客户托管的密钥。如果您使用客户托管的密钥加密数据库实例，则可以使用相同的 KMS 密钥 ARN。 | 
| `@backup_file_start_time` | `rds_fn_list_tlog_backup_metadata` 函数的 `[backup_file_time_utc]` 列中提供的 UTC 时间戳。 | 
| `@backup_file_end_time` | `rds_fn_list_tlog_backup_metadata` 函数的 `[backup_file_time_utc]` 列中提供的 UTC 时间戳。 | 
| `@starting_lsn` | `rds_fn_list_tlog_backup_metadata` 函数的 `[starting_lsn]` 列中提供的日志序列号（LSN） | 
| `@ending_lsn` | `rds_fn_list_tlog_backup_metadata` 函数的 `[ending_lsn]` 列中提供的日志序列号（LSN）。 | 
| `@rds_backup_starting_seq_id` | `rds_fn_list_tlog_backup_metadata` 函数的 `[rds_backup_seq_id]` 列中提供的序列 ID。 | 
| `@rds_backup_ending_seq_id` | `rds_fn_list_tlog_backup_metadata` 函数的 `[rds_backup_seq_id]` 列中提供的序列 ID。 | 

您可以指定一组时间、LSN 或序列 ID 参数。只需要一组参数。

您也可以在任何参数集中仅指定一个参数。例如，通过仅为 `backup_file_end_time` 参数提供值，则该时间之前在七天限制内的所有可用事务日志备份文件都将复制到您的 Amazon S3 桶中。

以下是 `rds_tlog_backup_copy_to_S3` 存储过程的有效输入参数组合。


****  

| 提供的参数 | 预期结果 | 
| --- | --- | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3  <br />	@db_name = 'testdb1',<br />            @backup_file_start_time='2022-08-23 00:00:00',<br />            @backup_file_end_time='2022-08-30 00:00:00';</pre>  | 复制最近七天且在提供的 `backup_file_start_time` 和 `backup_file_end_time` 范围之间存在的事务日志备份。在此示例中，存储过程将复制在“2022-08-23 00:00:00”与“2022-08-30 00:00:00”之间生成的事务日志备份。 | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />           @db_name = 'testdb1',<br />           @backup_file_start_time='2022-08-23 00:00:00';</pre>  | 复制最近七天的事务日志备份，并从提供的 `backup_file_start_time` 开始。在此示例中，存储过程将复制从“2022-08-23 00:00:00”开始的事务日志备份，直到最新的事务日志备份。 | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />          @db_name = 'testdb1',<br />          @backup_file_end_time='2022-08-30 00:00:00';</pre>  | 复制最近七天的事务日志备份，直至提供的 `backup_file_end_time`。在此示例中，存储过程将复制从“2022-08-23 00:00:00”到“2022-08-30 00:00:00”的事务日志备份。 | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />         @db_name='testdb1',<br />         @starting_lsn =1490000000040007,<br />         @ending_lsn =  1490000000050009;</pre>  | 复制最近七天内可用且介于提供的 `starting_lsn` 和 `ending_lsn` 范围之间的事务日志备份。在此示例中，存储过程将复制最近七天且 LSN 范围介于 1490000000040007 到 1490000000050009 之间的事务日志备份。 | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />        @db_name='testdb1',<br />        @starting_lsn =1490000000040007;</pre>  |  复制最近七天内可用的事务日志备份，从提供的 `starting_lsn` 开始。在此示例中，存储过程将复制从 LSN 1490000000040007 开始的事务日志备份，直至最新的事务日志备份。 | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />        @db_name='testdb1',<br />        @ending_lsn  =1490000000050009;</pre>  |  复制最近七天内可用的事务日志备份，直到提供的 `ending_lsn`。在本例中，存储过程将复制从最近七天开始直至 lsn 1490000000050009 的事务日志备份。 | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />       @db_name='testdb1',<br />       @rds_backup_starting_seq_id= 2000,<br />       @rds_backup_ending_seq_id= 5000;</pre>  |  复制最近七天内可用且在提供的范围 `rds_backup_starting_seq_id` 和 `rds_backup_ending_seq_id` 之间存在的事务日志备份。在本例中，存储过程将复制从最近七天开始且介于提供的 rds 备份序列 id 范围（从 seq\_id 2000 到 seq\_id5000）内的事务日志备份。 | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />       @db_name='testdb1',<br />       @rds_backup_starting_seq_id= 2000;</pre>  |  复制最近七天内可用的事务日志备份，从提供的 `rds_backup_starting_seq_id` 开始。在此示例中，存储过程将复制从 seq\_id 2000 开始的事务日志备份，直到最新的事务日志备份。 | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />      @db_name='testdb1',<br />      @rds_backup_ending_seq_id= 5000;</pre>  |  复制最近七天内可用的事务日志备份，直到提供的 `rds_backup_ending_seq_id`。在此示例中，存储过程将复制从最近七天开始的事务日志备份，直到 seq\_id 5000。 | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />      @db_name='testdb1',<br />      @rds_backup_starting_seq_id= 2000;<br />      @rds_backup_ending_seq_id= 2000;</pre>  |  使用提供的 `rds_backup_starting_seq_id` 复制单个事务日志备份（如果在过去七天内可用）。在此示例中，存储过程将复制 seq\_id 为 2000 的单个事务日志备份，前提是该备份在过去七天内存在。 | 

## 验证事务日志备份日志链
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.LogChain"></a>

 为访问事务日志备份而配置的数据库必须启用自动备份保留。自动备份保留将数据库实例上的数据库设置为 `FULL` 恢复模式。要支持数据库的时间点还原，请避免更改数据库恢复模式，因为这可能会导致日志链断开。我们建议将数据库设置为 `FULL` 恢复模式。

要在复制事务日志备份之前手动验证日志链，请调用 `rds_fn_list_tlog_backup_metadata` 函数并查看 `is_log_chain_broken` 列中的值。值为“1”表示当前日志备份和前一个日志备份之间的日志链已断开。

以下示例显示了 `rds_fn_list_tlog_backup_metadata` 存储过程的输出中存在中断的日志链。

![rds_fn_list_tlog_backup_metadata 中的输出显示断开的日志链。](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_logchain_error.png)


在正常日志链中，给定 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 文档中的[事务日志逻辑架构](https://learn.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide?view=sql-server-ver15#Logical_Arch)。