

# 使用本机备份和还原导入和导出 SQL Server 数据库
<a name="SQLServer.Procedural.Importing"></a>

Amazon RDS 支持使用完整备份文件 (.bak 文件) 对 Microsoft SQL Server 数据库进行本机备份和还原。当您使用 RDS 时，您将访问存储在 Amazon S3 中的文件，而不是使用数据库服务器上的本地文件系统。

例如，您可以从本地服务器创建完整备份，将该备份存储到 S3 上，然后将其还原到现有 Amazon RDS 数据库实例。您还可以从 RDS 进行备份，将其存储在 S3 上，然后在需要的任何位置还原它们。

本机备份和还原适用于所有 Amazon 区域中的单可用区和多可用区数据库实例，包括具有只读副本的多可用区数据库实例。本机备份和还原适用于 Amazon RDS 支持的所有 Microsoft SQL Server 版本。

下图说明了支持的方案。

![\[本机备份和还原架构\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/SQL-bak-file.png)


使用本机 .bak 文件备份和还原数据库通常是备份和还原数据库的最快方法。此外，使用本机备份和还原还提供了很多其他优势。例如，您可以执行以下操作：
+ 将数据库迁移到 Amazon RDS 或从后者迁移数据库。
+ 在 RDS for SQL Server 数据库实例之间移动数据库。
+ 迁移 .bak 文件中的数据、架构、存储过程、触发器和其他数据库代码。
+ 备份和还原单个数据库，而不是整个数据库实例。
+ 创建用于开发、测试、培训和演示的数据库副本。
+ 通过 Amazon S3 传输备份文件，为您提供一层额外保护以进行灾难恢复。
+ 创建开启了透明数据加密 (TDE) 的数据库的本机备份，并将这些备份还原到本地数据库。有关更多信息，请参阅 [SQL Server 中的透明数据加密支持](Appendix.SQLServer.Options.TDE.md)。
+ 将开启了 TDE 的本地数据库的本机备份还原到 RDS for SQL Server 数据库实例。有关更多信息，请参阅 [SQL Server 中的透明数据加密支持](Appendix.SQLServer.Options.TDE.md)。

**Contents**
+ [限制和建议](#SQLServer.Procedural.Importing.Native.Limitations)
+ [针对本机备份和还原进行设置](SQLServer.Procedural.Importing.Native.Enabling.md)
  + [为本机备份和还原手动创建 IAM 角色](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)
+ [使用本机备份和还原](SQLServer.Procedural.Importing.Native.Using.md)
  + [备份数据库](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Backup)
    + [用法](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Backup.Syntax)
    + [示例](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Backup.Examples)
  + [还原数据库](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Restore)
    + [用法](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Syntax)
    + [示例](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Examples)
  + [还原日志](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Log)
    + [用法](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Log.Syntax)
    + [示例](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Log.Examples)
  + [完成数据库还原](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Finish.Restore)
    + [用法](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Finish.Restore.Syntax)
  + [处理部分还原的数据库](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Partially.Restored)
    + [删除部分还原的数据库](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Drop.Partially.Restored)
    + [部分还原的数据库的快照还原和时间点恢复行为](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Snapshot.Restore)
  + [取消任务](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Cancel)
    + [用法](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Cancel.Syntax)
  + [跟踪任务的状态](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking)
    + [用法](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking.Syntax)
    + [示例](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking.Examples)
    + [响应](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking.Response)
+ [压缩备份文件](SQLServer.Procedural.Importing.Native.Compression.md)
+ [故障排除](SQLServer.Procedural.Importing.Native.Troubleshooting.md)
+ [使用其他方法导入和导出 SQL Server 数据](SQLServer.Procedural.Importing.Snapshots.md)
  + [使用快照将数据导入 RDS for SQL Server](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Importing.Procedure)
    + [导入数据](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.Import)
      + [生成和发布脚本向导](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.MgmtStudio.ScriptWizard)
      + [导入和导出向导](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.MgmtStudio.ImportExportWizard)
      + [批量复制](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.MgmtStudio.BulkCopy)
  + [从 RDS for SQL Server 中导出数据](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Exporting)
    + [SQL Server 导入和导出向导](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Exporting.SSIEW)
    + [SQL Server 生成和发布脚本向导与 bcp 实用工具](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Exporting.SSGPSW)
+ [从 Linux 中使用 BCP 实用程序导入和导出数据](SQLServer.Procedural.Importing.BCP.Linux.md)
  + [先决条件](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Prerequisites)
  + [在 Linux 上安装 SQL Server 命令行工具](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Installing)
  + [从 RDS for SQL Server 中导出数据](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Exporting)
    + [基本导出语法](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Exporting.Basic)
    + [导出示例](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Exporting.Example)
  + [将数据导入到 RDS for SQL Server](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Importing)
    + [基本导入语法](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Importing.Basic)
    + [导入示例](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Importing.Example)
  + [常用 BCP 选项](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Options)
  + [最佳实践和注意事项](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.BestPractices)
  + [排查常见 问题](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Troubleshooting)

## 限制和建议
<a name="SQLServer.Procedural.Importing.Native.Limitations"></a>

以下是有关对本机备份和还原的使用的一些限制：
+ 您不能备份到与您的 Amazon RDS 数据库实例不同的Amazon区域中的某个 Amazon S3 存储桶或从该存储桶中进行还原。
+ 如果存在同名的现有数据库，则无法还原数据库。数据库名称是唯一的。
+ 强烈建议您不要将备份从一个时区还原到另一个时区。如果您将备份从一个时区还原到另一个时区，则必须审核您的查询和应用程序以查看时区更改的影响。
+ RDS for Microsoft SQL Server 具有每个文件 5TB 的大小限制。若要在本机备份更大的数据库，则可以使用多文件备份。
+ 可以备份到 S3 的最大数据库大小取决于数据库实例上的可用内存、CPU、I/O 和网络资源。数据库越大，备份代理占用的内存就越多。
+ 不能同时对 10 个以上的备份文件执行备份或还原操作。
+ 差异备份基于上一个完整备份。要使差异备份起作用，您不能在上一个完整备份和差异备份之间拍摄快照。如果您需要差异备份，但存在手动或自动快照，请先进行另一个完整备份，然后再继续进行差异备份。
+ 其文件的 file\$1guid（唯一标识符）设置为 `NULL` 的数据库不支持差异还原和日志还原。
+ 您最多可以同时运行两个备份或还原任务。
+ 您无法在 Amazon RDS 上从 SQL Server 执行本机日志备份。
+ RDS 支持最大 64 TiB 的数据库本机还原。SQL Server Express Edition 上的数据库的本机还原限制为 10 GB。
+ 您无法在维护时段内或在 Amazon RDS 处于创建数据库快照过程中的任何时间对数据库进行本机备份。如果本机备份任务与 RDS 每日备份时段重叠，则会取消本机备份任务。
+ 在多可用区数据库实例上，您只能在本机还原在完全恢复模式下备份的数据库。
+ 不支持在事务内调用 RDS 过程进行本机备份和还原。
+ 请使用对称加密 Amazon KMS key 来加密您的备份。Amazon RDS 不支持非对称 KMS 密钥。有关更多信息，请参阅 [Amazon Key Management Service开发人员指南](https://docs.amazonaws.cn/kms/latest/developerguide/create-keys.html#create-symmetric-cmk) 中的*创建对称加密 KMS 密钥*。
+ 本机备份文件使用“仅加密”加密模式通过指定的 KMS 密钥加密。当您还原加密的备份文件时，注意它们是使用“仅加密”加密模式加密的。
+ 您无法还原包含 FILESTREAM 文件组的数据库。
+ 当您将 `@enable_bucket_default_encryption=1` 传入备份存储过程时，Amazon S3 使用 Amazon KMS（SSE-KMS）的服务器端加密可通过 S3 存储桶的默认加密配置进行支持。默认情况下，还原支持 S3 对象的服务器端加密。

  当您向存储过程提供 KMS 密钥时，任何原生备份和还原都将使用该 KMS 密钥在客户端上进行加密和解密。如果 `@enable_bucket_default_encryption=0`，Amazon 使用 SSE-S3 将备份存储在 S3 存储桶中；如果 `@enable_bucket_default_encryption=1`，则使用 S3 存储桶配置的默认加密密钥。
+ 使用 S3 接入点时，无法将接入点配置为使用 RDS 内部 VPC。
+ 为了获得最高性能，我们建议您使用目录存储桶或目录存储桶的接入点（如果您所在的地区提供接入点）。

如果在创建、复制和还原备份文件时，您的数据库可处于脱机状态，建议您使用本机备份和还原将其迁移到 RDS。如果您的本地数据库不能处于脱机状态，建议您使用 Amazon Database Migration Service 将您的数据库迁移到 Amazon RDS。有关更多信息，请参阅[什么是 Amazon Database Migration Service？](https://docs.amazonaws.cn/dms/latest/userguide/Welcome.html) 

本机备份和还原不是为了替换跨区域快照复制功能的数据恢复功能。建议您使用快照复制为 Amazon RDS 中的跨区域灾难恢复将数据库快照复制到另一Amazon区域。有关更多信息，请参阅 [复制 Amazon RDS 的数据库快照](USER_CopySnapshot.md)。