Amazon Relational Database Service
用户指南 (API Version 2014-10-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

导入和导出 SQL Server 数据库

Amazon Relational Database Service (Amazon RDS) 支持使用完整备份文件 (.bak 文件) 对 Microsoft SQL Server 数据库进行本机备份和还原。您可以在单个便携式文件中导入和导出 SQL Server 数据库。可以创建本地数据库的完整备份,将该备份存储在 Amazon Simple Storage Service (Amazon S3) 上,然后将该备份文件还原到运行 SQL Server 的现有 Amazon RDS 数据库实例上。可以对 Amazon RDS SQL Server 数据库进行备份,将该备份存储在 Amazon S3 上,然后将该备份文件还原到本地服务器或运行 SQL Server 的其他 Amazon RDS 数据库实例。

下图演示了支持的方案。

 本机备份和还原架构

使用 .bak 文件备份和还原数据库的过程已得到大幅优化,并且它通常是最快的备份和还原数据库的方法。此外,使用本机备份和还原还提供了许多其他优势。您可执行以下操作:

  • 将数据库迁移到 Amazon RDS。

  • 在 Amazon RDS SQL Server 数据库实例之间移动数据库。

  • 导入和导出数据。

  • 迁移架构、存储过程、触发器和其他数据库代码。

  • 更改您的存储类型或存储容量。

  • 备份和还原单个数据库,而不是整个数据库实例。

  • 创建用于测试、培训和演示的数据库副本。

  • 通过 Amazon S3 在 Amazon RDS 中存储和传入/传出备份文件将为您提供一层额外保护以进行灾难恢复。

本机备份和还原适用于所有区域以及单可用区数据库实例和多可用区数据库实例。本机备份和还原适用于 Amazon RDS 支持的所有版本的 Microsoft SQL Server 以及“附带许可”和“自带许可”模式。

以下是有关对本机备份和还原的使用的一些限制:

  • db.t1.micro 数据库实例类不支持适用于 SQL Server 的本机备份和还原。有关实例类的更多信息,请参阅所有可用数据库实例类的规范

  • 您不能备份到与您的 Amazon RDS 数据库实例不同的区域中的某个 Amazon S3 存储桶或从该存储通中进行还原。

  • 强烈建议您不要将备份文件从一个时区还原到另一个时区。如果您将备份文件从一个时区还原至为另一个时区,则必须审查您的查询和应用程序来查看时区更改的效果。

  • 您无法将一个备份文件还原到已用于创建该备份文件的同一数据库实例。而是应将该备份文件还原到新的数据库实例。对数据库进行重命名不是消除此限制的办法。

  • 您无法将同一备份文件多次还原到一个数据库实例。也就是说,您无法将备份文件还原到已包含您正在还原的数据库的数据库实例。对数据库进行重命名不是消除此限制的办法。

  • 您无法对大小超过 1 TB 的数据库进行备份。

  • 您无法还原大小超过 4 TB 的数据库。

  • 您无法在维护时段内或在 Amazon RDS 处于拍摄数据库快照的过程中的任何时间对数据库进行备份。

  • 在将备份文件还原至多可用区数据库实例时,将终止镜像,并在之后重新建立。将对数据库实例上的所有数据库终止并重新建立镜像,不仅限于您还原的数据库。RDS 重新建立镜像时,数据库实例无法执行故障转移。重新建立镜像可能需要 30 分钟或更长时间,具体取决于所还原数据库的大小。有关更多信息,请参阅 带数据库镜像的 Microsoft SQL Server 的多可用区部署

如果在创建、复制和还原备份文件时,您的数据库可处于脱机状态,建议您使用本机备份和还原将数据库迁移到 Amazon RDS。如果您的本地数据库不能处于脱机状态,建议您使用 AWS Database Migration Service 将您的数据库迁移到 Amazon RDS。有关更多信息,请参阅什么是 AWS Database Migration Service?

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

针对本机备份和还原进行设置

要针对本机备份和还原进行设置,您将需要以下三个组件:

  • 用于存储备份文件的 Amazon S3 存储桶。

  • 用于访问存储桶的 AWS Identity and Access Management (IAM) 角色。

  • 已添加到数据库实例上选项组的 SQLSERVER_BACKUP_RESTORE 选项。

如果您已有一个 Amazon S3 存储桶,则可以使用它。如果您没有 Amazon S3 存储桶,则可以手动创建一个新的 存储桶。或者,您可以选择在使用 AWS 管理控制台添加 SQLSERVER_BACKUP_RESTORE 选项时为自己创建新的存储桶。如果您要手动创建新的存储桶,请参阅创建存储桶

如果您已有一个 IAM 角色,则可以使用它。如果您没有 IAM 角色,则可以手动创建一个新的 角色。或者,您可以选择在使用 AWS 管理控制台添加 SQLSERVER_BACKUP_RESTORE 选项时为自己创建新的 IAM 角色。如果您要手动创建新的 IAM 角色,或者将信任和权限策略挂载到现有 IAM 角色,请使用下一部分中介绍的方法。

要在数据库实例上启用本机备份和还原,请将 SQLSERVER_BACKUP_RESTORE 选项添加到您的数据库实例上的选项组。有关更多信息和说明,请参阅 Microsoft SQL Server 本机备份和还原支持

为本机备份和还原手动创建 IAM 角色

如果您要手动创建新的 IAM 角色以使用本机备份和还原,请创建一个将来自 Amazon RDS 服务的权限委派给 Amazon S3 存储桶的角色。在创建 IAM 角色时,可挂载信任和权限策略。对于本机备份和还原功能,可使用类似于以下示例的信任和权限策略。有关创建角色的更多信息,请参阅创建将权限委派给 AWS 服务的角色

信任和权限策略要求您提供 Amazon 资源名称 (ARN)。有关 ARN 格式的更多信息,请参阅 Amazon 资源名称 (ARN) 和 AWS 服务命名空间

例 适用于本机备份和还原的信任策略

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "rds.amazonaws.com"}, "Action": "sts:AssumeRole" }] }

例 不带加密支持的适用于本机备份和还原的权限策略

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws-cn:s3:::bucket_name" }, { "Effect": "Allow", "Action": [ "s3:GetObjectMetaData", "s3:GetObject", "s3:PutObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": "arn:aws-cn:s3:::bucket_name/*" } ] }

使用本机备份和还原

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

某些存储过程要求您向 Amazon S3 存储桶和文件提供 Amazon 资源名称 (ARN)。您的 ARN 的格式为 arn:aws-cn:s3:::bucket_name/file_name。Amazon S3 不需要在 ARN 中使用账号或区域。有关更多信息,请参阅 Amazon 资源名称 (ARN) 和 AWS 服务命名空间

可以使用存储过程来备份数据库、还原数据库、取消正在进行中的任务以及跟踪备份和还原任务的状态。有关如何调用每个存储过程的说明,请参阅以下小节:

备份数据库

要备份数据库,请调用 rds_backup_database 存储过程。

注意

您无法在维护时段内或在 Amazon RDS 处于拍摄数据库快照的过程中的任何时间对数据库进行备份。

以下参数为必需参数:

  • @source_db_name – 要为其创建备份的数据库的名称。

  • @s3_arn_to_backup_to – 要将备份文件保存到的 Amazon S3 存储桶以及该文件的名称。该文件的扩展名可以是 .bak 或您选择的任何扩展名。

以下参数为可选参数:

  • @overwrite_S3_backup_file – 是否覆盖备份文件 (如果它存在于 Amazon S3 存储桶中)。指定 1 覆盖现有文件。这将覆盖存储桶中带指定名称的任何文件,无论该文件是备份文件还是其他类型的文件。指定 0 不覆盖现有文件,而是返回一个错误 (如果文件已存在)。默认值为 0

例 未加密

Copy
exec msdb.dbo.rds_backup_database @source_db_name='database_name', @s3_arn_to_backup_to='arn:aws-cn:s3:::bucket_name/file_name_and_extension', @overwrite_S3_backup_file=1;

还原数据库

要还原数据库,可调用 rds_restore_database 存储过程。

以下参数为必需参数:

  • @restore_db_name – 要还原的数据库的名称。

  • @s3_arn_to_restore_from – 包含备份文件的 Amazon S3 存储桶以及该文件的名称。

例 未加密

Copy
exec msdb.dbo.rds_restore_database @restore_db_name='database_name', @s3_arn_to_restore_from='arn:aws-cn:s3:::bucket_name/file_name_and_extension';

取消任务

要取消备份或还原任务,可调用 rds_cancel_task 存储过程。

以下参数为可选参数:

  • @db_name – 要取消其任务的数据库的名称。

  • @task_id – 要取消的任务的 ID。可以通过调用 rds_task_status 获取任务 ID。

Copy
exec msdb.dbo.rds_cancel_task @task_id=1234;

跟踪任务的状态

要跟踪备份和还原任务的状态,可调用 rds_task_status 存储过程。如果您未提供任何参数,则存储过程将返回所有任务的状态。任务的状态约每 2 分钟更新一次。

以下参数为可选参数:

  • @db_name – 要显示其任务状态的数据库的名称。

  • @task_id – 要显示其任务状态的任务的 ID。

Copy
exec msdb.dbo.rds_task_status @db_name='database_name';

rds_task_status 存储过程返回以下列。

说明

task_id

任务的 ID。

task_type

BACKUP_DB (对于备份任务) 或 RESTORE_DB (对于还原任务)。

database_name

与任务关联的数据库的名称。

% complete

用百分比表示的任务进度。

duration (mins)

在任务上花费的时间 (以分钟为单位)。

lifecycle

任务的状态。任务可能具有如下状态:

  • CREATED – 一旦您调用 rds_backup_databaserds_restore_database,就会创建任务并将状态设置为 CREATED

  • IN_PROGRESS – 备份或还原任务开始后,状态将设置为 IN_PROGRESS。要将状态从 CREATED 更改为 IN_PROGRESS 可能需要最多 5 分钟的时间。

  • SUCCESS – 备份或还原任务完成之后,状态将设置为 SUCCESS

  • ERROR – 如果备份或还原任务失败,则状态将设置为 ERROR。阅读 task_info 列以了解有关错误的更多信息。

  • CANCEL_REQUESTED – 一旦您调用 rds_cancel_task,任务的状态就会设置为 CANCEL_REQUESTED

  • CANCELLED – 在成功取消任务后,任务的状态将设置为 CANCELLED

task_info

有关任务的其他信息。

如果在备份或还原数据库时出错,则此列将包含有关错误的信息。有关可能的错误列表以及缓解策略,请参阅 故障排除

last_updated

上次更新任务状态的日期和时间。状态每隔 5% 的进度更新一次。

created_at

任务的创建日期和时间。

overwrite_S3_backup_file

调用备份任务时指定的 @overwrite_S3_backup_file 参数的值。有关更多信息,请参阅 备份数据库

压缩备份文件

要节省 Amazon S3 存储桶中的空间,您可以压缩备份文件。有关压缩备份文件的更多信息,请参阅 Microsoft 文档中的备份压缩

以下数据库版本支持压缩您的备份文件:

  • Microsoft SQL Server 企业版

  • Microsoft SQL Server 标准版

要为备份文件启用压缩,请运行以下代码:

Copy
exec rdsadmin..rds_set_configuration 'S3 backup compression', 'true';

要为备份文件禁用压缩,请运行以下代码:

Copy
exec rdsadmin..rds_set_configuration 'S3 backup compression', 'false';

使用本机备份和还原功能迁移到 Amazon RDS

要将数据库从企业数据中心迁移到 Amazon RDS,请遵循本主题中的过程。但是,您可以执行以下准备步骤:

  1. 创建 Amazon S3 存储桶。有关更多信息,请参阅创建存储桶

  2. 将数据库备份文件上传到 Amazon S3 存储桶。有关更多信息,请参阅将对象上传到 Amazon S3

故障排除

以下是您使用本地备份和还原时可能会遇到的问题。

问题 问题排查建议

Access Denied

验证您已使用正确的格式提供了正确的存储桶。ARN 必须包含文件名。

有关更多信息,请参阅 使用本机备份和还原

BACKUP DATABASE WITH COMPRESSION is not supported on <edition_name> Edition

仅 Microsoft SQL Server Enterprise Edition 和 Standard Edition 支持压缩备份文件。

有关更多信息,请参阅 压缩备份文件

Database <database_name> cannot be restored because there is already an existing database with the same family_guid on the instance

您无法将一个备份文件还原到已用于创建该备份文件的同一数据库实例。而是应将该备份文件还原到新的数据库实例。

您也无法将同一备份文件多次还原到一个数据库实例。也就是说,您无法将备份文件还原到已包含您正在还原的数据库的数据库实例。而是应将该备份文件还原到新的数据库实例。

Please reissue task with correct type and overwrite property

如果您尝试备份数据库并提供了已存在文件的名称,但将覆盖策略设置为 false,则保存操作会失败。要修复此错误,请提供不存在的文件名,或者将覆盖属性设置为 true。

有关更多信息,请参阅 备份数据库

还有可能是您希望还原数据库,但意外调用了 rds_backup_database 存储过程。在这种情况下,请改为调用 rds_restore_database 存储过程。

有关更多信息,请参阅 还原数据库

如果您希望还原数据库并调用 rds_restore_database 存储过程,请确保您提供了有效的备份文件名称。

有关更多信息,请参阅 使用本机备份和还原

Please specify a bucket that is in the same region as RDS instance

您不能备份到与您的 Amazon RDS 数据库实例不同的区域中的某个 Amazon S3 存储桶或从该存储通中进行还原。您可以使用 Amazon S3 复制将备份文件复制到正确的区域。

有关更多信息,请参阅 Amazon S3 文档中的跨区域复制

The specified bucket does not exist

验证您使用正确格式为存储桶和文件提供了正确的 ARN。

有关更多信息,请参阅 使用本机备份和还原

相关主题