在 RDS for SQL Server 中使用存储 - Amazon Relational Database Service

在 RDS for SQL Server 中使用存储

使用 RDS for SQL Server,您最多可以将三个附加卷连接到 RDS for SQL Server 实例,每个卷映射到一个唯一的 Windows 驱动器盘符。这支持您在默认 D: 驱动器之外的多个卷上分配数据库文件。添加存储卷后,可以提高数据库文件管理和存储优化的灵活性。

优势包括:

  • 灵活的文件分配:将数据库数据文件和日志文件分配到多个卷上,以提高 I/O 性能。

  • 存储优化:使用不同的存储类型和配置来满足不同的工作负载要求。

  • 可扩展性:无需修改现有卷,即可增加存储容量。

将附加存储卷与 RDS for SQL Server 结合使用的注意事项

将附加存储卷与 RDS for SQL Server 结合使用时,请注意以下功能和限制:

  • 您只能在 SQL Server 标准版(SE)和企业版(EE)上添加存储卷。

  • 您最多可以为每个实例添加 3 个附加存储卷。

  • 卷名称自动映射到 Windows 驱动器盘符,如下所示:

    • rdsdbdata2H: 驱动器

    • rdsdbdata3I: 驱动器

    • rdsdbdata4J: 驱动器

  • 使用 NVMe 实例存储时,TempDB 文件将继续使用 T: 驱动器。SQL Server 审计文件和 Microsoft 商业智能(MSBI)文件保留在 D: 驱动器上。

  • 您只能添加通用型 SSD(gp3)和预调配 IOPS SSD(io2)存储类型。

  • 附加存储卷没有最小大小限制。数据库实例在所有卷上的最大存储大小总计为 256 TiB。

  • 不支持向带有只读副本的实例或只读副本实例添加存储卷。

  • 不支持在创建卷后在卷之间移动文件。

  • 您无法删除 D: 卷,但只要其它存储卷为空,就可以将其删除。

  • 不支持在快照还原或时间点故障恢复(PITR)期间修改现有卷的大小。但是,您可以在还原操作期间添加新的存储卷。

使用 RDS for SQL Server 添加、移除或修改存储卷

您可以使用 AWS CLI或 AWS 管理控制台 添加、修改和移除附加存储卷。所有操作都使用带 additional-storage-volumes 参数的 modify-db-instance API 操作。

重要

添加或移除附加存储卷会触发一个备份待处理操作,并进入时间点恢复中断时段。备份工作流程完成后,此时段结束。

添加存储卷

您最多可以在默认 D: 驱动器之外添加三个存储卷。要向 RDS for SQL Server 实例添加新的存储卷,请使用带 additional-storage-volumes 参数的 modify-db-instance 命令。

以下示例添加一个名为 rdsdbdata4 的新的 4000 GiB 通用型 SSD(gp3)卷。

aws rds modify-db-instance \ --db-instance-identifier my-sql-server-instance \ --region us-east-1 \ --additional-storage-volumes '[{"VolumeName":"rdsdbdata4","StorageType":"gp3","AllocatedStorage":4000}]' \ --apply-immediately

扩展附加存储卷

除存储大小外,您可以修改附加存储卷的任何存储设置。以下示例修改 rdsdbdata2 卷的 IOPS 设置。

aws rds modify-db-instance \ --db-instance-identifier my-sql-server-instance \ --region us-east-1 \ --additional-storage-volumes '[{"VolumeName":"rdsdbdata2","IOPS":4000}]' \ --apply-immediately

移除附加存储卷

您无法删除 D: 卷,但可以在附加存储卷为空时将其删除。

警告

在移除附加存储卷之前,请确保该卷上未存储任何数据库文件。

以下示例移除 rdsdbdata4 卷。

aws rds modify-db-instance \ --db-instance-identifier my-sql-server-instance \ --region us-east-1 \ --additional-storage-volumes '[{"VolumeName":"rdsdbdata4","SetForDelete":true}]' \ --apply-immediately

适用于 RDS for SQL Server 的附加存储卷的还原操作

还原数据库时,可以添加存储卷。也可以修改现有卷的存储设置。

快照还原

从快照还原时,您可以添加新的附加存储卷,或修改现有卷的 IOPS、吞吐量和存储类型设置。

以下示例从快照还原数据库实例,并修改 rdsdbdata2 卷的 IOPS 设置:

aws rds restore-db-instance-from-db-snapshot \ --db-instance-identifier my-restored-instance \ --db-snapshot-identifier my-snapshot \ --region us-east-1 \ --additional-storage-volumes '[{"VolumeName":"rdsdbdata2","IOPS":5000}]'

时间点故障恢复

在时间点故障恢复(PITR)期间,您可以使用自定义配置添加新的附加存储卷。

以下示例执行 PITR 并添加一个新的 5000 GiB 通用型 SSD(gp3)卷:

aws rds restore-db-instance-to-point-in-time \ --source-db-instance-identifier my-source-instance \ --target-db-instance my-pitr-instance \ --use-latest-restorable-time \ --region us-east-1 \ --additional-storage-volumes '[{"VolumeName":"rdsdbdata4","StorageType":"gp3","AllocatedStorage":5000,"IOPS":5000,"StorageThroughput":200}]'

原生数据库还原

您可以使用 rds_restore_database 存储过程将数据库还原到特定的附加存储卷。两个新参数支持卷选择:

data_file_volume

指定数据库数据文件的驱动器盘符

log_file_volume

指定数据库日志文件的驱动器盘符

以下示例还原一个数据库,其数据文件位于 H: 驱动器上,而日志文件位于 I: 驱动器上:

EXEC msdb.dbo.rds_restore_database @restore_db_name='my_database', @s3_arn_to_restore_from='arn:aws:s3:::my-bucket/backup-file.bak', @data_file_volume='H:', @log_file_volume='I:';

如果您未指定卷参数,或者为这两个参数指定了 D: 驱动器,则数据库文件将还原到默认 D: 驱动器:

EXEC msdb.dbo.rds_restore_database @restore_db_name='my_database', @s3_arn_to_restore_from='arn:aws:s3:::my-bucket/backup-file.bak';

适用于 RDS for SQL Server 的附加存储卷的使用案例

附加存储卷支持各种数据库管理方案。以下各节介绍了常见的使用案例和实施方法。

在附加存储卷上创建数据库

您可以使用标准 SQL Server CREATE DATABASE 语句直接在附加存储卷上创建新的数据库。

以下示例创建一个数据库,其数据文件位于 H: 驱动器上,而日志文件位于 I: 驱动器上:

CREATE DATABASE MyDatabase ON ( NAME = 'MyDatabase_Data', FILENAME = 'H:\rdsdbdata\data\MyDatabase_Data.mdf', SIZE = 100MB, FILEGROWTH = 10MB ) LOG ON ( NAME = 'MyDatabase_Log', FILENAME = 'I:\rdsdbdata\data\MyDatabase_Log.ldf', SIZE = 10MB, FILEGROWTH = 10% );

扩展存储容量

当默认 D: 驱动器达到其最大容量时,您可以添加附加存储卷,扩展现有卷,并在新卷上创建新的数据文件或日志文件。

扩展存储容量
  1. 使用 modify-db-instance 命令向实例添加存储卷。

  2. 向附加存储卷中添加新的数据文件:

    ALTER DATABASE MyDatabase ADD FILE ( NAME = 'MyDatabase_Data2', FILENAME = 'H:\rdsdbdata\data\MyDatabase_Data2.ndf', SIZE = 500MB, FILEGROWTH = 50MB );

在卷之间移动数据库

要将数据库移动到其它卷,请将备份和还原方法与 rds_backup_databaserds_restore_database 存储过程结合使用。有关更多信息,请参阅 使用本机备份和还原

将数据库移至其它卷
  1. 使用 rds_backup_database 备份数据库:

    EXEC msdb.dbo.rds_backup_database @source_db_name='MyDatabase', @s3_arn_to_backup_to='arn:aws:s3:::my-bucket/database-backup.bak';
  2. 将数据库还原到目标卷:

    EXEC msdb.dbo.rds_restore_database @restore_db_name='MyDatabase_New', @s3_arn_to_restore_from='arn:aws:s3:::my-bucket/database-backup.bak', @data_file_volume='H:', @log_file_volume='I:';
  3. 从旧驱动器中删除数据库以释放空间。有关更多信息,请参阅 删除 Amazon RDS for Microsoft SQL Server 数据库实例中的数据库

将数据归档到经济高效的存储

对于分区表,您可以将较旧的数据归档到具有不同性能特征的附加存储卷。

归档分区数据
  1. 添加具有适当存储类型和容量的存储卷。

  2. 在附加存储卷上创建新的文件组:

    ALTER DATABASE MyDatabase ADD FILEGROUP ArchiveFileGroup; ALTER DATABASE MyDatabase ADD FILE ( NAME = 'Archive_Data', FILENAME = 'H:\rdsdbdata\data\Archive_Data.ndf', SIZE = 1GB, FILEGROWTH = 100MB ) TO FILEGROUP ArchiveFileGroup;
  3. 使用 SQL Server 分区管理命令将分区移动到新的文件组。