使用本机备份和还原导入和导出 SQL Server 数据库 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用本机备份和还原导入和导出 SQL Server 数据库

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

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

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

下图说明了支持的方案。


			本机备份和还原架构

使用本机 .bak 文件备份和还原数据库通常是备份和还原数据库的最快方法。此外,使用本机备份和还原还提供了很多其他优势。例如,您可以执行以下操作:

  • 将数据库迁移到 Amazon RDS 或从后者迁移数据库。

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

  • 迁移 .bak 文件中的数据、架构、存储过程、触发器和其他数据库代码。

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

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

  • 通过 Amazon S3 传输备份文件,为您提供一层额外保护以进行灾难恢复。

  • 创建开启了透明数据加密 (TDE) 的数据库的本机备份,并将这些备份还原到本地数据库。有关更多信息,请参阅SQL Server 中的透明数据加密支持

  • 将开启了 TDE 的本地数据库的本机备份还原到 RDS for SQL Server 数据库实例。有关更多信息,请参阅SQL Server 中的透明数据加密支持

限制和建议

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

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

  • 如果存在同名的现有数据库,则无法还原数据库。数据库名称是唯一的。

  • 强烈建议您不要将备份从一个时区还原到另一个时区。如果您将备份从一个时区还原到另一个时区,则必须审核您的查询和应用程序以查看时区更改的影响。

  • Amazon S3 具有每个文件 5 TB 的大小限制。若要在本机备份更大的数据库,则可以使用多文件备份。

  • 可以备份到 S3 的最大数据库大小取决于数据库实例上的可用内存、CPU、I/O 和网络资源。数据库越大,备份代理占用的内存就越多。我们的测试表明,如果有足够的系统资源,您可以在最新一代实例类型上自 2xlarge 及更大实例大小生成 16 TB 数据库的压缩备份。

  • 不能同时对 10 个以上的备份文件执行备份或还原操作。

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

  • 其文件的 file_guid(唯一标识符)设置为 NULL 的数据库不支持差异还原和日志还原。

  • 您最多可以同时运行两个备份或还原任务。

  • 您无法在 Amazon RDS 上从 SQL Server 执行本机日志备份。

  • RDS 支持最大 16 TB 的数据库本机还原。SQL Server Express Edition 上的数据库的本机还原限制为 10 GB。

  • 您无法在维护时段内或在 Amazon RDS 处于创建数据库快照过程中的任何时间对数据库进行本机备份。如果本机备份任务与 RDS 每日备份时段重叠,则会取消本机备份任务。

  • 在多可用区数据库实例上,您只能在本机还原在完全恢复模式下备份的数据库。

  • 不支持从多可用区实例上的差异备份还原。

  • 不支持在事务内调用 RDS 过程进行本机备份和还原。

  • 请使用对称加密 Amazon KMS key 来加密您的备份。Amazon RDS 不支持非对称 KMS 密钥。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的创建对称 KMS 密钥

  • 本机备份文件使用“仅加密”加密模式通过指定的 KMS 密钥加密。当您还原加密的备份文件时,注意它们是使用“仅加密”加密模式加密的。

  • 您无法还原包含 FILESTREAM 文件组的数据库。

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

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

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

要设置本机备份和还原,您需要三个组件:

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

    您必须将 S3 存储桶用于备份文件,然后上传您要迁移到 RDS 的备份。如果您已有一个 Amazon S3 存储桶,则可以使用它。如果没有,则可以创建存储桶。或者,您可以选择在使用 SQLSERVER_BACKUP_RESTORE 添加 Amazon Web Services Management Console 选项时为自己创建新的存储桶。

    有关使用 S3 的信息,请参阅 Amazon Simple Storage Service 用户指南

  2. 用于访问存储桶的 Amazon Identity and Access Management (IAM) 角色。

    如果您已有一个 IAM 角色,则可以使用它。您可以选择在使用Amazon Web Services Management Console添加 SQLSERVER_BACKUP_RESTORE 选项时为自己创建新的 IAM 角色。或者,您可以手动创建一个新的角色。

    如果您想要手动创建新的 IAM 角色,请使用下一部分中介绍的方法。如果要将信任关系和权限策略附加到现有 IAM 角色,请执行相同操作。

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

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

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

如果要手动创建新的 IAM 角色以用于本机备份和还原,可以这样做。在这种情况下,您将创建一个角色,以将权限从 Amazon RDS 服务委派给 Amazon S3 存储桶。创建 IAM 角色时,您将附加信任关系和权限策略。信任关系允许 RDS 代入此角色。这些权限策略定义此角色可以执行的操作。有关创建角色的更多信息,请参阅创建将权限委派给 Amazon 服务的角色

对于本机备份和还原功能,可使用类似于本节中以下示例的信任关系和权限策略。在下面的示例中,我们使用服务委托人名称 rds.amazonaws.com 作为所有服务账户的别名。在其他示例中,我们指定 Amazon Resource Name (ARN) 以标识我们在信任策略中授予访问权限的其他账户、用户或角色。

我们建议在基于资源的信任关系中使用 aws:SourceArnaws:SourceAccount 全局条件上下文键,以此限制服务对特定资源的权限。这是防范混淆代理问题最有效的方法。

您可以使用这两个全局条件上下文键并让 aws:SourceArn 值包含账户 ID。在这种情况下,当 aws:SourceAccount 值和 aws:SourceArn 值中的账户使用相同策略语句时,确保二者使用相同的账户 ID。

  • 如果您想对单个资源进行跨服务访问,请使用 aws:SourceArn

  • 如果您想允许该账户中的任何资源与跨服务使用操作相关联,请使用 aws:SourceAccount

在信任关系中,请务必使用 aws:SourceArn 全局条件上下文键和访问角色资源的完整 ARN。对于本机备份和还原,请确保同时包含数据库选项组和数据库实例,如以下示例所示。

例 与本机备份和还原的全局条件上下文键的信任关系
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceArn": [ "arn:aws:rds:Region:my_account_ID:db:db_instance_identifier", "arn:aws:rds:Region:my_account_ID:og:option_group_name" ] } } } ] }

以下示例使用 ARN 指定资源。有关使用 ARN 的更多信息,请参阅 Amazon Resource Name (ARN)

例 不带加密支持的适用于本机备份和还原的权限策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::bucket_name" }, { "Effect": "Allow", "Action": [ "s3:GetObjectAttributes", "s3:GetObject", "s3:PutObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": "arn:aws:s3:::bucket_name/*" } ] }

使用本机备份和还原

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

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

如果您还提供可选 KMS 密钥,则密钥 ARN 的格式为 arn:aws:kms:region:account-id:key/key-id。有关更多信息,请参阅 Amazon Resource Name (ARN) 和 Amazon 服务命名空间。您必须使用对称加密 KMS 密钥来加密您的备份。Amazon RDS 不支持非对称 KMS 密钥。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的创建对称 KMS 密钥

注意

无论您是否使用 KMS 密钥,本机备份和还原任务都会对上传到 S3 的文件默认启用服务器端高级加密标准 (AES) 256 位加密。

有关如何调用每个存储过程的说明,请参阅以下主题:

备份数据库

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

注意

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

用量

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], [@type='DIFFERENTIAL|FULL'], [@number_of_files=n];

以下参数为必需参数:

  • @source_db_name – 要备份的数据库的名称。

  • @s3_arn_to_backup_to – 指示要用于备份的 Amazon S3 存储桶以及备份文件的名称的 ARN。

    此文件可以具有任何扩展名,但通常使用 .bak

以下参数为可选参数:

  • @kms_master_key_arn – 用于加密项目的对称加密 KMS 密钥的 ARN。

    • 您不能使用默认加密密钥。如果使用默认密钥,则不会备份数据库。

    • 如果未指定 KMS 密钥标识符,则不会对备份文件进行加密。有关更多信息,请参阅加密 Amazon RDS 资源

    • 指定 KMS 密钥时,将使用客户端加密。

    • Amazon RDS 不支持非对称 KMS 密钥。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的创建对称 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_name 部分中的任意位置。星号由所生成文件中的一系列字母数字字符串替换,从 1-of-number_of_files 开始。

    例如,如果 S3 ARN 中的文件名为 backup*.bak 并且您已设置 @number_of_files=4,则生成的备份文件为 backup1-of-4.bakbackup2-of-4.bakbackup3-of-4.bakbackup4-of-4.bak

    • 如果任意文件名已存在,并且 @overwrite_s3_backup_file 设置为 0,则会返回错误。

    • 在 S3 ARN 的 file_name 部分中,多文件备份只能有一个星号。

    • 单文件备份可以在 S3 ARN 的 file_name 部分中包含任意数量的星号。星号不会从所生成的文件名中删除。

示例

例 差异备份
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';
例 使用加密的完整备份
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';
例 多文件备份
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;
例 多文件差异备份
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;
例 使用加密的多文件备份
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;
例 使用 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;
例 使用 @number_of_files 参数的单文件备份

此示例生成一个名为 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;

还原数据库

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

用量

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, [@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'], [@type='DIFFERENTIAL|FULL'];

以下参数为必需参数:

  • @restore_db_name– 要还原的数据库的名称。数据库名称是唯一的。如果存在同名的现有数据库,则无法还原数据库。

  • @s3_arn_to_restore_from – 指示用于还原数据库的备份文件的 Amazon S3 前缀和名称的 ARN。

    • 对于单文件备份,请提供整个文件名。

    • 对于多文件备份,请提供文件拥有的通用前缀,然后使用星号 (*) 为其添加后缀。

    • 如果 @s3_arn_to_restore_from 为空,则返回以下错误消息:S3 ARN prefix cannot be empty (S3 ARN 前缀不能为空)

以下参数对于差异还原是必需的,但对于完整还原是可选的:

  • @with_norecovery – 用于还原操作的恢复子句。

    • 将它设置为 0 来使用 RECOVERY 进行还原。在这种情况下,在还原后,数据库将处于在线状态。

    • 将它设置为 1 来使用 NORECOVERY 进行还原。在这种情况下,在还原任务完成后,数据库将保持 RESTORING 状态。使用这种方法,您可以执行以后的差异还原。

    • 对于 DIFFERENTIAL 还原,请指定 01

    • 对于 FULL 还原,此值默认为 0

以下参数为可选参数:

  • @kms_master_key_arn - 如果您已对备份文件进行加密,则 KMS 密钥用于解密文件。

    指定 KMS 密钥时,将使用客户端加密。

  • @type – 还原的类型。有效类型为 DIFFERENTIALFULL。默认值为 FULL

注意

对于差异还原,数据库必须处于 RESTORING 状态,或者必须已存在使用 NORECOVERY 还原的任务。

在数据库处于在线状态时,您无法还原以后的差异备份。

您无法为已具有使用 RECOVERY 的挂起还原任务的数据库提交还原任务。

多可用区实例不支持使用 NORECOVERY 的完整还原和差异还原

在具有只读副本的多可用区实例上还原数据库类似于在多可用区实例上还原数据库。您无需执行任何其他操作,即可在副本上还原数据库。

示例

例 单文件还原
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/backup*';
例 使用 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;
例 使用加密的完整数据库还原
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';
例 使用 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;
例 使用 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;
例 使用 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;

还原日志

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

用量

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], [@stopat='datetime'];

以下参数为必需参数:

  • @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 前缀不能为空)

以下参数为可选参数:

  • @kms_master_key_arn - 如果您已对日志进行加密,则 KMS 密钥用于解密日志。

  • @with_norecovery – 用于还原操作的恢复子句。此值默认为 1

    • 将它设置为 0 来使用 RECOVERY 进行还原。在这种情况下,在还原后,数据库将处于在线状态。在数据库处于在线状态时,您无法还原其他日志备份。

    • 将它设置为 1 来使用 NORECOVERY 进行还原。在这种情况下,在还原任务完成后,数据库将保持 RESTORING 状态。使用这种方法,您可以执行以后的日志还原。

  • @stopat – 指定将数据库还原到其在指定的日期和时间的状态的值(采用日期时间格式)。仅将在指定日期和时间之前写入的事务日志记录应用于数据库。

    如果未指定此参数(它为 NULL),则会还原完整的日志。

注意

对于日志还原,数据库必须处于 restoring 状态,或者必须已存在使用 NORECOVERY 还原的任务。

在数据库处于在线状态时,您无法还原日志备份。

您无法在已具有使用 RECOVERY 的挂起还原任务的数据库上提交日志还原任务。

多可用区实例不支持日志还原。

示例

例 日志还原
exec msdb.dbo.rds_restore_log @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn';
例 使用加密的日志还原
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';
例 使用 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';
例 使用 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;
例 使用 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';

完成数据库还原

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

用量

exec msdb.dbo.rds_finish_restore @db_name='database_name';
注意

要使用此方法,数据库必须处于 RESTORING 状态,且没有任何挂起的还原任务。

多可用区实例不支持 rds_finish_restore 过程。

要完成数据库还原,请使用主登录名。或使用最近使用 NORECOVERY 还原数据库或日志的用户登录名。

处理部分还原的数据库

删除部分还原的数据库

要删除部分还原的数据库(保留为 RESTORING 状态),请使用 rds_drop_database 存储过程。

exec msdb.dbo.rds_drop_database @db_name='database_name';
注意

您无法为已具有挂起的还原或完成还原任务的数据库提交 DROP 数据库请求。

要删除数据库,请使用主登录名。或使用最近使用 NORECOVERY 还原数据库或日志的用户登录名。

部分还原的数据库的快照还原和时间点恢复行为

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

取消任务

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

注意

您无法取消 FINISH_RESTORE 任务。

用量

exec msdb.dbo.rds_cancel_task @task_id=ID_number;

以下参数是必需参数:

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

跟踪任务的状态

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

用量

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

以下参数为可选参数:

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

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

示例

例 列出特定任务的状态
exec msdb.dbo.rds_task_status @task_id=5;
例 列出特定数据库和任务的状态
exec msdb.dbo.rds_task_status @db_name='my_database', @task_id=5;
例 列出特定数据库上的所有任务及其状态
exec msdb.dbo.rds_task_status @db_name='my_database';
例 列出当前实例上的所有任务及其状态
exec msdb.dbo.rds_task_status;

响应

rds_task_status 存储过程返回以下列。

描述

task_id

任务的 ID。

task_type

任务类型取决于输入参数,如下所示:

  • 对于备份任务:

    • BACKUP_DB – 完整数据库备份

    • BACKUP_DB_DIFFERENTIAL – 差异数据库备份

  • 对于还原任务:

    • RESTORE_DB – 使用 RECOVERY 的完整数据库还原

    • RESTORE_DB_NORECOVERY – 使用 NORECOVERY 的完整数据库还原

    • RESTORE_DB_DIFFERENTIAL – 使用 RECOVERY 的差异数据库还原

    • RESTORE_DB_DIFFERENTIAL_NORECOVERY – 使用 NORECOVERY 的差异数据库还原

    • RESTORE_DB_LOG – 使用 RECOVERY 的日志还原

    • RESTORE_DB_LOG_NORECOVERY – 使用 NORECOVERY 的日志还原

  • 对于完成还原的任务:

    • FINISH_RESTORE – 完成还原并打开数据库

在完成以下还原任务时打开数据库后,Amazon RDS 创建数据库的初始快照:

  • RESTORE_DB

  • RESTORE_DB_DIFFERENTIAL

  • RESTORE_DB_LOG

  • FINISH_RESTORE

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

任务的创建日期和时间。

S3_object_arn 指示要备份或还原的文件的 Amazon S3 前缀和名称的 ARN。

overwrite_s3_backup_file

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

KMS_master_key_arn 用于加密 (对于备份) 和解密 (对于还原) 的 KMS 密钥的 ARN。
filepath 不适用于本机备份和还原任务。
overwrite_file 不适用于本机备份和还原任务。

压缩备份文件

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

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

  • Microsoft SQL Server 企业版

  • Microsoft SQL Server 标准版

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

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

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

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

问题排查

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

问题 故障排除建议

数据库备份/恢复选项尚未启用或启用中。请稍后重试。

请确保您已将 SQLSERVER_BACKUP_RESTORE 选项添加到与数据库实例关联的数据库选项组。有关更多信息,请参阅 添加本机备份和还原选项

拒绝访问

备份或还原进程无法访问备份文件。这通常由类似于以下的问题导致:

  • 引用不正确存储桶。使用不正确的格式引用存储桶。引用文件名但未使用 ARN。

  • 存储桶文件的权限不正确。例如,如果文件由正在尝试访问它的其他账户创建,请添加正确的权限。

  • IAM 策略不正确或不完整。您的 IAM 角色必须包含所有的必要元素,例如,包括正确的版本。使用本机备份和还原导入和导出 SQL Server 数据库中重点介绍了这些内容。

<edition_name> 版本不支持带压缩的备份数据库

仅 Microsoft SQL Server 企业版和标准版支持压缩备份文件。

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

请使用正确的类型重新发布任务并覆盖属性

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

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

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

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

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

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

请指定与 RDS 实例位于同一区域的存储桶

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

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

指定的存储桶不存在

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

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

还原”任务无法从 10 个以上的备份文件中恢复。请减少匹配的文件数量,然后重试。

减少您尝试从中还原的文件数。如有必要,您可以让每个文件变得更大。

数据库“database_name”已存在。不允许存在两个仅大小写或重音不同的数据库。选择其他数据库名称。

如果存在同名的现有数据库,则无法还原数据库。数据库名称是唯一的。