

# 使用本机备份和还原
<a name="SQLServer.Procedural.Importing.Native.Using"></a>

在启用并配置本机备份和还原功能后，可以开始使用该功能。先连接到您的 Microsoft SQL Server 数据库，然后调用 Amazon RDS 存储过程来执行该操作。有关连接到数据库的说明，请参阅 [连接到 Microsoft SQL Server 数据库实例](USER_ConnectToMicrosoftSQLServerInstance.md)。

某些存储过程要求您向 Amazon S3 存储桶和文件提供 Amazon Resource Name (ARN)。您的 ARN 的格式为 `arn:aws:s3:::bucket_name/file_name.extension`。Amazon S3 不需要在 ARN 中使用账号或 AWS 区域。

如果您还提供可选 KMS 密钥，则密钥 ARN 的格式为 `arn:aws:kms:region:account-id:key/key-id`。有关更多信息，请参阅 [Amazon Resource Name (ARN) 和 AWS 服务命名空间](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。您必须使用对称加密 KMS 密钥来加密您的备份。Amazon RDS 不支持非对称 KMS 密钥。有关更多信息，请参阅 [AWS Key Management Service开发人员指南](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk) 中的*创建对称加密 KMS 密钥*。

**注意**  
无论您是否使用 KMS 密钥，本机备份和还原任务都会对上传到 S3 的文件默认通过 SSE-S3 启用服务器端高级加密标准（AES）256 位加密。将 `@enable_bucket_default_encryption=1` 传入备份存储过程时，使用 S3 存储桶配置的默认加密密钥。

有关如何调用每个存储过程的说明，请参阅以下主题：
+ [备份数据库](#SQLServer.Procedural.Importing.Native.Using.Backup)
+ [还原数据库](#SQLServer.Procedural.Importing.Native.Using.Restore)
+ [还原日志](#SQLServer.Procedural.Importing.Native.Restore.Log)
+ [完成数据库还原](#SQLServer.Procedural.Importing.Native.Finish.Restore)
+ [处理部分还原的数据库](#SQLServer.Procedural.Importing.Native.Partially.Restored)
+ [取消任务](#SQLServer.Procedural.Importing.Native.Using.Cancel)
+ [跟踪任务的状态](#SQLServer.Procedural.Importing.Native.Tracking)

## 备份数据库
<a name="SQLServer.Procedural.Importing.Native.Using.Backup"></a>

要备份数据库，请使用 `rds_backup_database` 存储过程。

**注意**  
您无法在维护时段内对数据库进行备份，也无法在 Amazon RDS 拍摄快照时对数据库进行备份。

### 用法
<a name="SQLServer.Procedural.Importing.Native.Backup.Syntax"></a>

```
exec msdb.dbo.rds_backup_database
	@source_db_name='database_name',
	@s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name.extension',
	[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],	
	[@overwrite_s3_backup_file=0|1],
	[@block_size=512|1024|2048|4096|8192|16384|32768|65536],
        [@max_transfer_size=n],
        [@buffer_count=n],
	[@type='DIFFERENTIAL|FULL'],
	[@number_of_files=n],
	[@enable_bucket_default_encryption=0|1];
```

以下参数为必需参数：
+ `@source_db_name` – 要备份的数据库的名称。
+ `@s3_arn_to_backup_to`：ARN，指示要用于备份的 Amazon S3 存储桶、接入点、目录存储桶或目录存储桶的接入点，以及备份文件的名称。

  此文件可以具有任何扩展名，但通常使用 `.bak`。请注意，接入点 ARN 的格式必须为 `arn:aws:s3:us-east-1:111122223333:access-point-name/object/key`。

以下参数可选：
+ `@kms_master_key_arn` – 用于加密项目的对称加密 KMS 密钥的 ARN。
  + 您不能使用默认加密密钥。如果使用默认密钥，则不会备份数据库。
  +  如果未指定 KMS 密钥标识符，则不会对备份文件进行加密。有关更多信息，请参阅[加密 Amazon RDS 资源](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html)。
  + 指定 KMS 密钥时，将使用客户端加密。
  + Amazon RDS 不支持非对称 KMS 密钥。有关更多信息，请参阅 [AWS Key Management Service开发人员指南](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk) 中的*创建对称加密 KMS 密钥*。
+ `@overwrite_s3_backup_file` – 指示是否覆盖现有备份文件的值。
  + `0` – 不覆盖现有文件。此值是默认值。

    如果文件已存在，则将 `@overwrite_s3_backup_file` 设置为 0 会返回错误。
  + `1` – 覆盖具有指定名称的现有文件，即使该文件不是备份文件也是如此。
+ `@type` – 备份的类型。
  + `DIFFERENTIAL` – 进行差异备份。
  + `FULL` – 进行完整备份。此值是默认值。

  差异备份基于上一个完整备份。要使差异备份起作用，您不能在上一个完整备份和差异备份之间拍摄快照。如果您需要差异备份，但快照存在，请先进行另一个完整备份，然后再继续进行差异备份。

  您可以使用以下示例 SQL 查询来查找上一个完整备份或快照：

  ```
  select top 1
  database_name
  , 	backup_start_date
  , 	backup_finish_date
  from    msdb.dbo.backupset
  where   database_name='mydatabase'
  and     type = 'D'
  order by backup_start_date desc;
  ```
+ `@number_of_files` – 备份将被划分（分块）成的文件数。最大文件数为 10。
  + 完整备份和差异备份都支持多文件备份。
  + 如果您输入值 1 或省略该参数，则会创建单个备份文件。

  请提供文件拥有的通用前缀，然后使用星号 (`*`) 为其添加后缀。星号可位于 S3 ARN 的 *file\$1name* 部分中的任意位置。星号由所生成文件中的一系列字母数字字符串替换，从 `1-of-number_of_files` 开始。

  例如，如果 S3 ARN 中的文件名为 `backup*.bak` 并且您已设置 `@number_of_files=4`，则生成的备份文件为 `backup1-of-4.bak`、`backup2-of-4.bak`、`backup3-of-4.bak` 和 `backup4-of-4.bak`。
  + 如果任意文件名已存在，并且 `@overwrite_s3_backup_file` 设置为 0，则会返回错误。
  + 在 S3 ARN 的 *file\$1name* 部分，多文件备份只能有一个星号。
  + 单文件备份可以在 S3 ARN 的 *file\$1name* 部分中包含任意数量的星号。星号不会从所生成的文件名中删除。
+ `@block_size` – 块大小（以字节为单位），指定备份操作的物理块大小。有效值为 512、1024、2048、4096、8192、16384、32768 和 65536
+ `@max_transfer_size` – 最大传输大小表示备份过程中每次 I/O 操作传输的数据量（以字节为单位）的上限。有效值是 65536 字节（64 KB）到 4194304 字节（4 MB）的倍数。
+ `@buffer_count` – 用于备份过程的 I/O 缓冲区总数。
+ `@enable_bucket_default_encryption`：一个值，指示是否使用 S3 存储桶的默认加密配置，在 S3 中进行服务器端加密。无论此设置如何，目录存储桶始终使用存储桶的默认加密配置。
  + `0` – 服务器端加密通过 SSE-S3 使用 256 位高级加密标准（AES）。
  + `1` – 服务器端加密使用 S3 存储桶配置的[默认加密](https://docs.aws.amazon.com//AmazonS3/latest/userguide/bucket-encryption.html)。

### 示例
<a name="SQLServer.Procedural.Importing.Native.Backup.Examples"></a>

**Example 差异备份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup1.bak',
@overwrite_s3_backup_file=1,
@type='DIFFERENTIAL';
```

**Example 使用客户端加密的完整备份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup1.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE',
@overwrite_s3_backup_file=1,
@type='FULL';
```

**Example 多文件备份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@number_of_files=4;
```

**Example 多文件差异备份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@type='DIFFERENTIAL',
@number_of_files=4;
```

**Example 使用加密的多文件备份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE',
@number_of_files=4;
```

**Example 使用 S3 覆盖进行多文件备份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@overwrite_s3_backup_file=1,
@number_of_files=4;
```

**Example 使用块大小进行备份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@block_size=512;
```

**Example 使用 `@max_transfer_size` 和 `@buffer_count` 进行多文件备份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@number_of_files=4,
@max_transfer_size=4194304,
@buffer_count=10;
```

**Example 使用 @number\$1of\$1files 参数进行单文件备份**  
此示例生成一个名为 `backup*.bak` 的备份文件。  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@number_of_files=1;
```

**Example 使用服务器端加密的完整备份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@overwrite_s3_backup_file=1,
@type='FULL',
@enable_bucket_default_encryption=1;
```

**Example 使用接入点进行完整备份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point/object/backup1.bak',
@overwrite_s3_backup_file=1,
@type='FULL';
```

**Example 使用目录存储桶的接入点进行完整备份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3express:us-east-1:123456789012:accesspoint/my-access-point--use1-az6--xa-s3/object/backup1.bak',
@overwrite_s3_backup_file=1,
@type='FULL';
```

## 还原数据库
<a name="SQLServer.Procedural.Importing.Native.Using.Restore"></a>

要还原数据库，请调用 `rds_restore_database` 存储过程。还原任务完成且数据库打开后，Amazon RDS 将创建数据库的初始快照。

### 用法
<a name="SQLServer.Procedural.Importing.Native.Restore.Syntax"></a>

```
exec msdb.dbo.rds_restore_database
	@restore_db_name='database_name',
	@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name.extension',
	@with_norecovery=0|1,
	[@keep_cdc=0|1],
	[@data_file_volume='D:|H:|I:|J:'],
	[@log_file_volume='D:|H:|I:|J:'],
	[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],
        [@block_size=512|1024|2048|4096|8192|16384|32768|65536],
        [@max_transfer_size=n],
        [@buffer_count=n],
	[@type='DIFFERENTIAL|FULL'];
```

以下参数为必需参数：
+ `@restore_db_name`– 要还原的数据库的名称。数据库名称是唯一的。如果存在同名的现有数据库，则无法还原数据库。
+ `@s3_arn_to_restore_from` – 指示用于还原数据库的备份文件的 Amazon S3 前缀和名称的 ARN。
  + 对于单文件备份，请提供整个文件名。
  + 对于多文件备份，请提供文件拥有的通用前缀，然后使用星号 (`*`) 为其添加后缀。
    + 如果使用目录存储桶，则由于[目录存储桶的差异](https://docs.aws.amazon.com//AmazonS3/latest/userguide/s3-express-differences.html)，ARN 必须以 `/*` 结尾。
  + 如果 `@s3_arn_to_restore_from` 为空，则返回以下错误消息：S3 ARN prefix cannot be empty (S3 ARN 前缀不能为空)。

以下参数对于差异还原是必需的，但对于完整还原是可选的：
+ `@with_norecovery` – 用于还原操作的恢复子句。
  + 将它设置为 `0` 来使用 RECOVERY 进行还原。在这种情况下，在还原后，数据库将处于在线状态。
  + 将它设置为 `1` 来使用 NORECOVERY 进行还原。在这种情况下，在还原任务完成后，数据库将保持 RESTORING 状态。使用这种方法，您可以执行以后的差异还原。
  + 对于 DIFFERENTIAL 还原，请指定 `0` 或 `1`。
  + 对于 `FULL` 还原，此值默认为 `0`。

以下参数可选：
+ `@keep_cdc` – 表示是否在还原的数据库上保留更改数据捕获（CDC）配置。设为 `1` 可启用 KEEP\$1CDC，设为 `0` 可禁用。默认值为 `0`。
+ `@data_file_volume`：指定数据库数据文件的驱动器盘符。默认值为 `D:`。
+ `@log_file_volume`：指定数据库日志文件的驱动器盘符。默认值为 `D:`。
+ `@kms_master_key_arn` - 如果您已对备份文件进行加密，则 KMS 密钥用于解密文件。

  指定 KMS 密钥时，将使用客户端加密。
+ `@type` – 还原的类型。有效类型为 `DIFFERENTIAL` 和 `FULL`。默认值为 `FULL`。
+ `@block_size` – 块大小（以字节为单位），指定备份操作的物理块大小。有效值为 512、1024、2048、4096、8192、16384、32768 和 65536
+ `@max_transfer_size` – 最大传输大小表示备份过程中每次 I/O 操作传输的数据量（以字节为单位）的上限。有效值是 65536 字节（64 KB）到 4194304 字节（4 MB）的倍数。
+ `@buffer_count` – 用于备份过程的 I/O 缓冲区总数。

**注意**  
对于差异还原，数据库必须处于 RESTORING 状态，或者必须已存在使用 NORECOVERY 还原的任务。  
在数据库处于在线状态时，您无法还原以后的差异备份。  
您无法为已具有使用 RECOVERY 的挂起还原任务的数据库提交还原任务。  
不支持同时使用 NORECOVERY 和 KEEP\$1CDC 的完整还原。  
具有跨区域只读副本的实例并不支持所有原生还原。  
对于支持的配置，在具有只读副本的多可用区实例上还原数据库类似于在多可用区实例上还原数据库。您无需执行任何其他操作，即可在副本上还原数据库。

### 示例
<a name="SQLServer.Procedural.Importing.Native.Restore.Examples"></a>

**Example 单文件还原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak';
```

**Example 多文件还原**  
为避免还原多个文件时出错，请确保所有备份文件有相同的前缀且没有任何其他文件使用该前缀。  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup*';
```

**Example 使用 RECOVERY 的完整数据库还原**  
以下三个示例执行相同的任务，即使用 RECOVERY 进行完整还原。  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak';
```

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
[@type='DIFFERENTIAL|FULL'];
```

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='FULL',
@with_norecovery=0;
```

**Example 使用加密进行完整数据库还原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE';
```

**Example 使用块大小进行还原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@block_size=512;
```

**Example 使用 @max\$1transfer\$1size 和 @buffer\$1count 进行多文件还原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup*',
@max_transfer_size=4194304,
@buffer_count=10;
```

**Example 使用 NORECOVERY 进行完整数据库还原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='FULL',
@with_norecovery=1;
```

**Example 使用 NORECOVERY 的差异还原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='DIFFERENTIAL',
@with_norecovery=1;
```

**Example 使用 RECOVERY 的差异还原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='DIFFERENTIAL',
@with_norecovery=0;
```

**Example 使用 RECOVERY 的完整数据库还原（使用接入点）**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point/object/backup1.bak',
@with_norecovery=0;
```

**Example 使用 KEEP\$1CDC 的完整数据库还原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@keep_cdc=1;
```

## 还原日志
<a name="SQLServer.Procedural.Importing.Native.Restore.Log"></a>

要还原日志，请调用 `rds_restore_log` 存储过程。

### 用法
<a name="SQLServer.Procedural.Importing.Native.Restore.Log.Syntax"></a>

```
exec msdb.dbo.rds_restore_log 
	@restore_db_name='database_name',
	@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/log_file_name.extension',
	[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],
	[@with_norecovery=0|1],
	[@keep_cdc=0|1],
	[@stopat='datetime'],
	[@block_size=512|1024|2048|4096|8192|16384|32768|65536],
        [@max_transfer_size=n],
        [@buffer_count=n];
```

以下参数为必需参数：
+ `@restore_db_name` – 要还原其日志的数据库的名称。
+ `@s3_arn_to_restore_from` – 指示用于还原日志的日志文件的 Amazon S3 前缀和名称的 ARN。此文件可以具有任何扩展名，但通常使用 `.trn`。

  如果 `@s3_arn_to_restore_from` 为空，则返回以下错误消息：S3 ARN prefix cannot be empty (S3 ARN 前缀不能为空)。

以下参数可选：
+ `@keep_cdc` – 表示是否在还原的数据库上保留更改数据捕获（CDC）配置。设为 1 可启用 KEEP\$1CDC，设为 0 可禁用。默认值是 0。
+ `@kms_master_key_arn` - 如果您已对日志进行加密，则 KMS 密钥用于解密日志。
+ `@with_norecovery` – 用于还原操作的恢复子句。此值默认为 `1`。
  + 将它设置为 `0` 来使用 RECOVERY 进行还原。在这种情况下，在还原后，数据库将处于在线状态。在数据库处于在线状态时，您无法还原其他日志备份。
  + 将它设置为 `1` 来使用 NORECOVERY 进行还原。在这种情况下，在还原任务完成后，数据库将保持 RESTORING 状态。使用这种方法，您可以执行以后的日志还原。
+ `@stopat` – 指定将数据库还原到其在指定的日期和时间的状态的值（采用日期时间格式）。仅将在指定日期和时间之前写入的事务日志记录应用于数据库。

  如果未指定此参数（它为 NULL），则会还原完整的日志。
+ `@block_size` – 块大小（以字节为单位），指定备份操作的物理块大小。有效值为 512、1024、2048、4096、8192、16384、32768 和 65536
+ `@max_transfer_size` – 最大传输大小表示备份过程中每次 I/O 操作传输的数据量（以字节为单位）的上限。有效值是 65536 字节（64 KB）到 4194304 字节（4 MB）的倍数。
+ `@buffer_count` – 用于备份过程的 I/O 缓冲区总数。

**注意**  
对于日志还原，数据库必须处于 restoring 状态，或者必须已存在使用 NORECOVERY 还原的任务。  
在数据库处于在线状态时，您无法还原日志备份。  
您无法在已具有使用 RECOVERY 的挂起还原任务的数据库上提交日志还原任务。

### 示例
<a name="SQLServer.Procedural.Importing.Native.Restore.Log.Examples"></a>

**Example 日志还原**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn';
```

**Example 使用加密的日志还原**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE';
```

**Example 使用 NORECOVERY 的日志还原**  
以下两个示例执行相同的任务，即使用 NORECOVERY 进行日志还原。  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@with_norecovery=1;
```

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn';
```

**Example 使用块大小进行还原**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@block_size=512;
```

**Example 使用 RECOVERY 的日志还原**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@with_norecovery=0;
```

**Example 使用 STOPAT 子句的日志还原**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@with_norecovery=0,
@stopat='2019-12-01 03:57:09';
```

**Example 使用 KEEP\$1CDC 的日志还原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@keep_cdc=1;
```

## 完成数据库还原
<a name="SQLServer.Procedural.Importing.Native.Finish.Restore"></a>

如果数据库上的上一个还原任务是使用 `@with_norecovery=1` 执行的，则数据库现在处于 RESTORING 状态。使用 `rds_finish_restore` 存储过程打开此数据库以执行常规操作。

### 用法
<a name="SQLServer.Procedural.Importing.Native.Finish.Restore.Syntax"></a>

```
exec msdb.dbo.rds_finish_restore @db_name='database_name';
```

**注意**  
要使用此方法，数据库必须处于 RESTORING 状态，且没有任何挂起的还原任务。  
要完成数据库还原，请使用主登录名。或使用最近使用 NORECOVERY 还原数据库或日志的用户登录名。

## 处理部分还原的数据库
<a name="SQLServer.Procedural.Importing.Native.Partially.Restored"></a>

### 删除部分还原的数据库
<a name="SQLServer.Procedural.Importing.Native.Drop.Partially.Restored"></a>

要删除部分还原的数据库（保留为 RESTORING 状态），请使用 `rds_drop_database` 存储过程。

```
exec msdb.dbo.rds_drop_database @db_name='database_name';
```

**注意**  
您无法为已具有挂起的还原或完成还原任务的数据库提交 DROP 数据库请求。  
要删除数据库，请使用主登录名。或使用最近使用 NORECOVERY 还原数据库或日志的用户登录名。

### 部分还原的数据库的快照还原和时间点恢复行为
<a name="SQLServer.Procedural.Importing.Native.Snapshot.Restore"></a>

在快照还原和时间点恢复期间，将从目标实例中删除源实例中的部分还原的数据库（保留为 RESTORING 状态）。

## 取消任务
<a name="SQLServer.Procedural.Importing.Native.Using.Cancel"></a>

要取消备份或还原任务，请调用 `rds_cancel_task` 存储过程。

**注意**  
您无法取消 FINISH\$1RESTORE 任务。

### 用法
<a name="SQLServer.Procedural.Importing.Native.Cancel.Syntax"></a>

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

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

## 跟踪任务的状态
<a name="SQLServer.Procedural.Importing.Native.Tracking"></a>

要跟踪备份和还原任务的状态，请调用 `rds_task_status` 存储过程。如果您未提供任何参数，则存储过程将返回所有任务的状态。任务的状态约每 2 分钟更新一次。任务历史记录保留 36 天。

### 用法
<a name="SQLServer.Procedural.Importing.Native.Tracking.Syntax"></a>

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

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

### 示例
<a name="SQLServer.Procedural.Importing.Native.Tracking.Examples"></a>

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

```
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="SQLServer.Procedural.Importing.Native.Tracking.Response"></a>

`rds_task_status` 存储过程返回以下列。


****  

| 列 | 描述 | 
| --- | --- | 
| `task_id` |  任务的 ID。  | 
| `task_type` |  任务类型取决于输入参数，如下所示： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Using.html) 在完成以下还原任务时打开数据库后，Amazon RDS 创建数据库的初始快照： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Using.html)  | 
| `database_name` |  与任务关联的数据库的名称。  | 
| `% complete` |  用百分比值表示的任务进度。  | 
| `duration (mins)` |  在任务上花费的时间 (以分钟为单位)。  | 
| `lifecycle` |  任务的状态。有以下可能状态： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Using.html)  | 
| `task_info` |  有关任务的其他信息。 如果在备份或还原数据库时出错，则此列将包含有关错误的信息。有关可能的错误列表以及缓解策略，请参阅 [故障排除](SQLServer.Procedural.Importing.Native.Troubleshooting.md)。  | 
| `last_updated` |  上次更新任务状态的日期和时间。状态每隔 5% 的进度更新一次。  | 
| `created_at` | 任务的创建日期和时间。 | 
| S3\$1object\$1arn | 指示要备份或还原的文件的 Amazon S3 前缀和名称的 ARN。 | 
| `overwrite_s3_backup_file` |  调用备份任务时指定的 `@overwrite_s3_backup_file` 参数的值。有关更多信息，请参阅 [备份数据库](#SQLServer.Procedural.Importing.Native.Using.Backup)。  | 
| KMS\$1master\$1key\$1arn | 用于加密 (对于备份) 和解密 (对于还原) 的 KMS 密钥的 ARN。 | 
| filepath | 不适用于本机备份和还原任务。 | 
| overwrite\$1file | 不适用于本机备份和还原任务。 | 