

# 使用 RDS for SQL Server 访问事务日志备份
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess"></a>

通过访问 RDS for SQL Server 的事务日志备份，您可以列出数据库的事务日志备份文件并将它们复制到目标 Amazon S3 桶。通过在 Amazon S3 桶中复制事务日志备份，您可以将它们与完整和差异数据库备份结合使用，以执行时间点数据库还原。您可以使用 RDS 存储过程设置对事务日志备份的访问权限，列出可用的事务日志备份，并将它们复制到您的 Amazon S3 桶。

访问事务日志备份可提供以下功能和好处：
+ 列出并查看 RDS for SQL Server 数据库实例上数据库的可用事务日志备份的元数据。
+ 将可用事务日志备份从 RDS for SQL Server 复制到目标 Amazon S3 桶。
+ 无需还原整个数据库实例，即可执行数据库的时间点还原。有关将数据库实例还原到某个时间点的更多信息，请参阅[将 Amazon RDS 的数据库实例还原到指定时间](USER_PIT.md)。

## 可用性和支持
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Availability"></a>

所有 AWS 区域都支持访问事务日志备份。访问事务日志备份适用于 Amazon RDS 支持的所有 Microsoft SQL Server 版本。

## 要求
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements"></a>

在启用访问事务日志备份之前，必须满足以下要求：
+  必须在数据库实例上启用自动备份，并且备份保留期必须设置为一天或多天的值。有关启用自动备份和配置保留策略的更多信息，请参阅[启用自动备份](USER_WorkingWithAutomatedBackups.Enabling.md)。
+ Amazon S3 桶必须与源数据库实例存在于同一账户和区域中。在启用访问事务日志备份之前，请选择现有的 Amazon S3 桶或[创建新桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingaBucket.html)，用于存储事务日志备份文件。
+ 必须按如下方式配置 Amazon S3 桶权限策略，以允许 Amazon RDS 将事务日志文件复制到其中：

  1. 将桶的对象账户拥有权属性设置为 **Bucket Owner Preferred**（首选桶拥有者）。

  1. 添加以下策略。原定设置情况下没有策略，因此，请使用桶访问控制列表（ACL）编辑并添加桶策略。

  

  以下示例使用 ARN 指定资源。我们建议在基于资源的信任关系中使用 `SourceArn` 和 `SourceAccount` 全局条件上下文键，以此限制服务对特定资源的权限。有关使用 ARN 的更多信息，请参阅 [Amazon 资源名称（ARN）](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)和[Amazon RDS 中的 Amazon 资源名称（ARN）](USER_Tagging.ARN.md)。

    
**Example 用于访问事务日志备份的 Amazon S3 权限策略**  

------
#### [ JSON ]

****  

  ```
      {
      "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:::amzn-s3-demo-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 管理控制台添加 `SQLSERVER_BACKUP_RESTORE` 选项时为自己创建新的 IAM 角色。或者，您可以手动创建一个新的角色。有关使用 `SQLSERVER_BACKUP_RESTORE` 创建和配置 IAM 角色的更多信息，请参阅[为本机备份和还原手动创建 IAM 角色](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)。
+ 必须将 `SQLSERVER_BACKUP_RESTORE` 选项添加到数据库实例上的选项组。有关添加 `SQLSERVER_BACKUP_RESTORE` 选项的更多信息，请参阅[SQL Server 中对本机备份和还原的支持](Appendix.SQLServer.Options.BackupRestore.md)。
**注意**  
如果您的数据库实例启用了存储加密，则必须以原生备份和还原选项组中提供的 IAM 角色提供 AWS KMS（KMS）操作和密钥。

  （可选）如果您打算使用 `rds_restore_log` 存储过程执行时间点数据库还原，我们建议将相同的 Amazon S3 路径用于原生备份和还原选项组以及访问事务日志备份。此方法可确保当 Amazon RDS 代入选项组中的角色以执行还原日志功能时，它有权从相同的 Amazon S3 路径检索事务日志备份。
+ 如果数据库实例已加密，则无论加密类型如何（AWS 托管密钥或客户托管密钥），您都必须在 IAM 角色和 `rds_tlog_backup_copy_to_S3` 存储过程中提供客户托管的 KMS 密钥。

## 限制和建议
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Limitations"></a>

访问事务日志备份有以下限制和建议：
+  对于任何配置了 1 到 35 天备份保留期的数据库实例，您最多可以列出并复制最近七天的事务日志备份。
+  用于访问事务日志备份的 Amazon S3 桶必须与源数据库实例位于相同的账户和区域中。不支持跨账户和跨区域复制。
+  只能将一个 Amazon S3 桶配置为将事务日志备份复制到的目标。您可以使用 `rds_tlog_copy_setup` 存储过程选择新的目标 Amazon S3 桶。有关选择新目标 Amazon S3 桶的更多信息，请参阅[设置访问事务日志备份](USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling.md)。
+  如果您的 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 加密的桶。

# 设置访问事务日志备份
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling"></a>

要设置访问事务日志备份，请完成[要求](USER.SQLServer.AddlFeat.TransactionLogAccess.md#USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements)部分中的要求列表，然后运行 `rds_tlog_copy_setup` 存储过程。该过程将在数据库实例级别启用访问事务日志备份功能。您无需为数据库实例上的每个单独数据库运行该过程。

**重要**  
必须在 SQL Server 中向数据库用户授予对于每个数据库的 `db_owner` 角色，才能配置和使用访问事务日志备份功能。

**Example 用法：**  

```
exec msdb.dbo.rds_tlog_copy_setup
@target_s3_arn='arn:aws:s3:::amzn-s3-demo-bucket/myfolder';
```

以下参数是必需参数：
+ `@target_s3_arn` – 要将事务日志备份文件复制到的目标 Amazon S3 桶的 ARN。

**Example 设置 Amazon S3 目标桶：**  

```
exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn='arn:aws:s3:::amzn-s3-demo-logging-bucket/mytestdb1';
```

要验证配置，请调用 `rds_show_configuration` 存储过程。

**Example 验证配置：**  

```
exec rdsadmin.dbo.rds_show_configuration @name='target_s3_arn_for_tlog_copy';
```

要修改对事务日志备份的访问权限以指向其他 Amazon S3 桶，您可以查看当前 Amazon S3 桶值，并使用 `@target_s3_arn` 的新值重新运行 `rds_tlog_copy_setup` 存储过程。

**Example 查看为访问事务日志备份而配置的现有 Amazon S3 桶**  

```
exec rdsadmin.dbo.rds_show_configuration @name='target_s3_arn_for_tlog_copy';
```

**Example 更新到新的目标 Amazon S3 桶**  

```
exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn='arn:aws:s3:::amzn-s3-demo-logging-bucket1/mynewfolder';
```

# 列出可用的事务日志备份
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Listing"></a>

在 RDS for SQL Server 中，配置为使用完整恢复模式并将数据库实例备份保留期设置为一天或多天的数据库实例备份会自动启用事务日志备份。通过启用访问事务日志备份，您可以将多达七天的这些事务日志备份复制到 Amazon S3 桶中。

启用访问事务日志备份后，就可以开始使用它来列出和复制可用的事务日志备份文件。

**列出事务日志备份**

要列出可用于单个数据库的所有事务日志备份，请调用 `rds_fn_list_tlog_backup_metadata` 函数。调用函数时可以使用 `ORDER BY` 或 `WHERE` 子句。

**Example 列出和筛选可用的事务日志备份文件**  

```
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 的输出\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_func.png)


`rds_fn_list_tlog_backup_metadata` 函数返回以下输出：


****  

| 列名称 | 数据类型 | 说明 | 
| --- | --- | --- | 
| `db_name` | sysname | 为列出其事务日志备份而提供的数据库名称。 | 
| `db_id` | int | 输入参数 `db_name` 的内部数据库标识符。 | 
| `family_guid` | uniqueidentifier | 创建时原始数据库的唯一 ID。还原数据库时，该值保持不变，即使还原到不同的数据库名称也是如此。 | 
| `rds_backup_seq_id` | int | RDS 在内部用于维护每个事务日志备份文件的序列号的 ID。 | 
| `backup_file_epoch` | bigint | 生成事务备份文件的纪元时间。 | 
| `backup_file_time_utc` | datetime | `backup_file_epoch` 值的 UTC 时间转换值。 | 
| `starting_lsn` | numeric(25,0) | 事务日志备份文件的第一条或最早的日志记录的日志序列号。 | 
| `ending_lsn` | numeric(25,0) | 事务日志备份文件的上一条或下一条日志记录的日志序列号。 | 
| `is_log_chain_broken` | bit | 一个布尔值，表示当前事务日志备份文件和先前的事务日志备份文件之间的日志链是否断开。 | 
| `file_size_bytes` | bigint | 事务备份集的大小（以字节为单位）。 | 
| `Error` | varchar(4000) | 如果 `rds_fn_list_tlog_backup_metadata` 函数引发异常，则显示错误消息。如果没有异常，则为 NULL。 | 

# 复制事务日志备份
<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 密钥。如果您使用 AWS 托管的 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\$1id 2000 到 seq\$1id5000）内的事务日志备份。  | 
|  <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\$1id 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\$1id 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\$1id 为 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.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_logchain_error.png)


在正常日志链中，给定 rds\$1sequence\$1id 的 first\$1lsn 的日志序列号（LSN）值应与前一个 rds\$1sequence\$1id 中的 last\$1lsn 值相匹配。在图中，rds\$1sequence\$1id 为 45 的 first\$1lsn 值为 90987，这与前一个 rds\$1seque\$1id 为 44 的 last\$1lsn 值 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)。

# Amazon S3 桶文件夹和文件结构
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.S3namingConvention"></a>

在 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 桶内一组事务日志备份的文件夹和文件结构。

![\[可访问事务日志的 Amazon S3 桶结构\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_s3.png)


# 跟踪任务的状态
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus"></a>

 要跟踪复制任务的状态，请调用 `rds_task_status` 存储过程。如果您未提供任何参数，则存储过程将返回所有任务的状态。

**Example 用法：**  

```
exec msdb.dbo.rds_task_status
  @db_name='database_name',
  @task_id=ID_number;
```

以下参数可选：
+ `@db_name`– 要显示其任务状态的数据库的名称。
+ `@task_id`– 要显示其任务状态的任务的 ID。

**Example 列出特定任务 ID 的状态：**  

```
exec msdb.dbo.rds_task_status @task_id=5;
```

**Example 列出特定数据库和任务的状态：**  

```
exec msdb.dbo.rds_task_status@db_name='my_database',@task_id=5;
```

**Example 列出特定数据库的所有任务及其状态：**  

```
exec msdb.dbo.rds_task_status @db_name='my_database';
```

**Example 列出当前数据库实例上的所有任务及其状态：**  

```
exec msdb.dbo.rds_task_status;
```

# 取消任务
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.CancelTask"></a>

要取消正在运行的任务，请调用 `rds_cancel_task` 存储过程。

**Example 用法：**  

```
exec msdb.dbo.rds_cancel_task @task_id=ID_number;
```

以下参数是必需参数：
+ `@task_id`– 要取消的任务的 ID。可以通过调用 `rds_task_status` 存储过程查看任务 ID。

有关查看和取消正在运行的任务的更多信息，请参阅[使用本机备份和还原导入和导出 SQL Server 数据库](SQLServer.Procedural.Importing.md)。

# 访问事务日志备份故障排除
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Troubleshooting"></a>

以下是您使用存储过程访问事务日志备份时可能遇到的问题。


****  

| 存储过程 | 错误消息 | 问题 | 故障排除建议 | 
| --- | --- | --- | --- | 
| rds\$1tlog\$1copy\$1setup | 此数据库实例上已禁用备份。启用保留期至少为“1”的数据库实例备份，然后重试。 | 未为数据库实例启用自动备份。 |  必须启用数据库实例备份保留，保留期至少为一天。有关启用自动备份和配置备份保留期的更多信息，请参阅[备份保留期](USER_WorkingWithAutomatedBackups.BackupRetention.md)。 | 
| rds\$1tlog\$1copy\$1setup | 运行 rds\$1tlog\$1copy\$1setup 存储过程时出错。重新连接到 RDS 端点并重试。 | 出现内部错误。 | 重新连接到 RDS 端点并再次运行 `rds_tlog_copy_setup` 存储过程。 | 
| rds\$1tlog\$1copy\$1setup | 不支持在事务内运行 rds\$1tlog\$1backup\$1copy\$1setup 存储过程。请验证会话没有未完成的事务，然后重试。 | 在事务中使用 `BEGIN` 和 `END` 尝试执行了此存储过程。 | 运行 `rds_tlog_copy_setup` 存储过程时避免使用 `BEGIN` 和 `END`。 | 
| rds\$1tlog\$1copy\$1setup | 输入参数 `@target_s3_arn` 的 S3 桶名称应包含除空格外的至少一个字符。 | 为输入参数 `@target_s3_arn` 提供的值不正确。 | 确保输入参数 `@target_s3_arn` 指定了完整的 Amazon S3 桶 ARN。 | 
| rds\$1tlog\$1copy\$1setup | `SQLSERVER_BACKUP_RESTORE` 选项未启用或处于启用过程中。启用该选项或稍后重试。 | `SQLSERVER_BACKUP_RESTORE` 选项未在数据库实例上启用，或者刚刚启用并等待内部激活。 | 按照“要求”部分指定的方式启用 `SQLSERVER_BACKUP_RESTORE` 选项。等待几分钟，然后再次运行 `rds_tlog_copy_setup` 存储过程。 | 
| rds\$1tlog\$1copy\$1setup | 输入参数 `@target_s3_arn` 的目标 S3 arn 不能为空或 null。 | 为输入参数 `@target_s3_arn` 提供了 `NULL` 值，或者没有提供值。 | 确保输入参数 `@target_s3_arn` 指定了完整的 Amazon S3 桶 ARN。 | 
| rds\$1tlog\$1copy\$1setup | 输入参数 `@target_s3_arn` 的目标 S3 arn 必须以 arn:aws 开头。 | 提供的输入参数 `@target_s3_arn` 前面没有 `arn:aws`。 | 确保输入参数 `@target_s3_arn` 指定了完整的 Amazon S3 桶 ARN。 | 
| rds\$1tlog\$1copy\$1setup | 目标 S3 ARN 桶已设置为所提供的值。 | `rds_tlog_copy_setup` 存储过程之前已运行并使用 Amazon S3 桶 ARN 进行配置。 | 要修改访问事务日志备份的 Amazon S3 桶值，请提供不同的 `target S3 ARN`。 | 
| rds\$1tlog\$1copy\$1setup | 无法生成用于启用“访问事务日志备份”的凭证。确认通过 `rds_tlog_copy_setup` 提供了 S3 路径 ARN，稍后重试。 | 生成凭证以启用访问事务日志备份时出现未指定的错误。 | 检查您的设置配置，然后重试。 | 
| rds\$1tlog\$1copy\$1setup | 存在待处理任务时，您无法运行 rds\$1tlog\$1copy\$1setup 存储过程。等待待处理任务完成，然后重试。 | 任何时候只能运行两个任务。有待处理任务等待完成。 | 查看待处理任务并等待其完成。有关监控任务状态的更多信息，请参阅[跟踪任务的状态](USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus.md)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 已为数据库发出 T-log 备份文件复制任务：%s，任务 ID：%d，请稍后重试。 | 给定数据库在任何时候只能运行一个复制任务。有待处理的复制任务等待完成。 | 查看待处理任务并等待其完成。有关监控任务状态的更多信息，请参阅[跟踪任务的状态](USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus.md)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 必须提供这三个参数集中的至少一个。SET-1:(@backup\$1file\$1start\$1time, @backup\$1file\$1end\$1time) \$1 SET-2:(@starting\$1lsn, @ending\$1lsn) \$1 SET-3:(@rds\$1backup\$1starting\$1seq\$1id, @rds\$1backup\$1ending\$1seq\$1id)  | 三个参数集均未提供，或者提供的参数集缺少必需的参数。 | 您可以指定时间、lsn 或序列 ID 参数。这三组参数中的一组是必需的。有关所需参数的更多信息，请参阅[复制事务日志备份](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 您的实例上已禁用备份。请启用备份，稍后重试。 | 未为数据库实例启用自动备份。 |  有关启用自动备份和配置备份保留期的更多信息，请参阅[备份保留期](USER_WorkingWithAutomatedBackups.BackupRetention.md)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 找不到给定的数据库 %s。 | 为输入参数 `@db_name` 提供的值与数据库实例上的数据库名称不匹配。 | 使用正确的数据库名称。要按名称列出所有数据库，请运行 `SELECT * from sys.databases` | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 无法对于 SQL Server 系统数据库或 rdsadmin 数据库运行 rds\$1tlog\$1backup\$1copy\$1to\$1S3 存储过程。 | 为输入参数 `@db_name` 提供的值与 SQL Server 系统数据库名称或 RDSAdmin 数据库相匹配。 | 不允许使用以下数据库来访问事务日志备份：`master, model, msdb, tempdb, RDSAdmin.` | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 输入参数 @db\$1name 的数据库名称不能为空或为 Null。 | 为输入参数 `@db_name` 提供的值为空或 `NULL`。 | 使用正确的数据库名称。要按名称列出所有数据库，请运行 `SELECT * from sys.databases` | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 数据库实例备份保留期必须设置为至少 1 才能运行 rds\$1tlog\$1backup\$1copy\$1setup 存储过程。 | 未为数据库实例启用自动备份。 | 有关启用自动备份和配置备份保留期的更多信息，请参阅[备份保留期](USER_WorkingWithAutomatedBackups.BackupRetention.md)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 运行存储过程 rds\$1tlog\$1backup\$1copy\$1to\$1S3 时出错。重新连接到 RDS 端点并重试。 | 出现内部错误。 | 重新连接到 RDS 端点并再次运行 `rds_tlog_backup_copy_to_S3` 存储过程。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 只能提供这三个参数集中的一个。SET-1:(@backup\$1file\$1start\$1time, @backup\$1file\$1end\$1time) \$1 SET-2:(@starting\$1lsn, @ending\$1lsn) \$1 SET-3:(@rds\$1backup\$1starting\$1seq\$1id, @rds\$1backup\$1ending\$1seq\$1id)  | 提供了多个参数集。 | 您可以指定时间、lsn 或序列 ID 参数。这三组参数中的一组是必需的。有关所需参数的更多信息，请参阅[复制事务日志备份](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 不支持在事务内运行 rds\$1tlog\$1backup\$1copy\$1to\$1S3 存储过程。请验证会话没有未完成的事务，然后重试。 | 在事务中使用 `BEGIN` 和 `END` 尝试执行了此存储过程。 | 运行 `rds_tlog_backup_copy_to_S3` 存储过程时避免使用 `BEGIN` 和 `END`。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 提供的参数超出了事务备份日志保留期。要列出可用的事务日志备份文件，请运行 rds\$1fn\$1list\$1tlog\$1backup\$1metadata 函数。  | 对于提供的输入参数，没有适合副本保留期限的可用事务日志备份。 | 使用一组有效的参数重试。有关所需参数的更多信息，请参阅[复制事务日志备份](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 处理请求时出现权限错误。确保桶与数据库实例位于相同的账户和区域中，并根据公有文档中的模板确认 S3 桶策略权限。  | 检测到所提供的 S3 桶或其策略权限存在问题。 | 确认访问事务日志备份的设置正确无误。有关 S3 桶的设置要求的更多信息，请参阅[要求](USER.SQLServer.AddlFeat.TransactionLogAccess.md#USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 不允许在 RDS 只读副本实例上运行 `rds_tlog_backup_copy_to_S3` 存储过程。 | 已尝试在 RDS 只读副本实例上执行存储过程。 | 连接到 RDS 主数据库实例以运行 `rds_tlog_backup_copy_to_S3` 存储过程。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 输入参数 `@starting_lsn` 的 LSN 必须小于 `@ending_lsn`。 | 为输入参数 `@starting_lsn` 提供的值大于为输入参数 `@ending_lsn` 提供的值。 | 确保为输入参数 `@starting_lsn` 提供的值小于为输入参数 `@ending_lsn` 提供的值。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | `rds_tlog_backup_copy_to_S3` 存储过程只能由源数据库中 `db_owner` 角色的成员执行。 | 尚未为尝试在提供的 `db_name` 上运行 `rds_tlog_backup_copy_to_S3` 存储过程的账户授予 `db_owner` 角色 | 确保运行存储过程的账户对于所提供的 `db_name` 获得 `db_owner` 角色的权限。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 输入参数 `@rds_backup_starting_seq_id` 的序列 ID 必须小于或等于 `@rds_backup_ending_seq_id`。 | 为输入参数 `@rds_backup_starting_seq_id` 提供的值大于为输入参数 `@rds_backup_ending_seq_id` 提供的值。 | 确保为输入参数 `@rds_backup_starting_seq_id` 提供的值小于为输入参数 `@rds_backup_ending_seq_id` 提供的值。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | SQLSERVER\$1BACKUP\$1RESTORE 选项未启用或处于启用过程中。启用该选项或稍后重试。 | `SQLSERVER_BACKUP_RESTORE` 选项未在数据库实例上启用，或者刚刚启用并等待内部激活。 | 按照“要求”部分指定的方式启用 `SQLSERVER_BACKUP_RESTORE` 选项。等待几分钟，然后再次运行 `rds_tlog_backup_copy_to_S3` 存储过程。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 输入参数 `@backup_file_start_time` 的开始时间必须小于 `@backup_file_end_time`。 | 为输入参数 `@backup_file_start_time` 提供的值大于为输入参数 `@backup_file_end_time` 提供的值。 | 确保为输入参数 `@backup_file_start_time` 提供的值小于为输入参数 `@backup_file_end_time` 提供的值。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 由于缺乏访问权限，我们无法处理该请求。请检查您对该功能的设置和权限。 | Amazon S3 桶权限可能存在问题，或者提供的 Amazon S3 桶位于其他账户或区域中。 | 确保 Amazon S3 桶策略权限允许 RDS 访问。确保 Amazon S3 桶与数据库实例位于同一账户和区域中。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 对于未经过存储加密的实例，您不能将 KMS 密钥 ARN 作为输入参数提供给存储过程。 | 如果未在数据库实例上启用存储加密，则不应提供输入参数 `@kms_key_arn`。 | 请勿为 `@kms_key_arn` 提供输入参数。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 您必须向存储加密实例的存储过程提供 KMS 密钥 ARN 作为输入参数。 | 在数据库实例上启用存储加密时，必须提供输入参数 `@kms_key_arn`。 | 为 `@kms_key_arn` 提供一个输入参数，其值与 Amazon S3 桶的 ARN 相匹配，用于事务日志备份。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 在运行 `rds_tlog_backup_copy_to_S3` 存储过程之前，必须先运行 `rds_tlog_copy_setup` 存储过程并设置 `@target_s3_arn`。 | 在尝试运行 `rds_tlog_backup_copy_to_S3` 存储过程之前，尚未完成对事务日志备份设置过程的访问。 | 在运行 `rds_tlog_copy_setup` 存储过程之前运行 `rds_tlog_backup_copy_to_S3` 存储过程。有关运行设置过程以访问事务日志备份的更多信息，请参阅[设置访问事务日志备份](USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling.md)。 | 