如何使用 AWS DMS 从运行 SQL Server 的 Amazon RDS 数据库实例迁移?

2 分钟阅读
0

我想使用 AWS Database Migration Service(AWS DMS)从 Amazon Relational Database Service(Amazon RDS)数据库实例迁移。数据库实例正在运行 SQL Server。

简短描述

首先,使用 RDS for SQL Server 实例的主用户来配置数据库和表。然后,使用 AWS DMS 控制台AWS 命令行界面(AWS CLI)创建您的源端点。有关更多信息,请参阅捕获自行管理 SQL Server 本地或 Amazon EC2 上的数据更改

**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

解决方法

配置数据库和表

AWS DMS 提供了两种方法来捕获正在进行的更改: MS-Replication 和 MS-CDC。

**注意:**Amazon RDS 不支持 Sysadmin 权限。这意味着运行 SQL Server 作为源的 Amazon RDS 实例必须使用 MS-CDC。

1.    要在数据库级别启用 MS-CDC,请以主用户身份运行以下命令:

EXEC msdb.dbo.rds_cdc_enable_db 'DBName';
GO

2.    要在表级别启用 CDC,请对每个表运行以下命令:

EXECUTE sys.sp_cdc_enable_table @source_schema = N'SchemaName', @source_name =N'TableName', @role_name = NULL;
GO

3.    要延长 T-Log 中事务的保留期,请运行以下命令:

EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@pollinginterval = 3599;
GO

为 SQL Server 实例配置持续复制时,最佳实践是将 pollinginterval 设置为保留 1 天(86,400 秒)的更改。确保在指定的保留期内有足够的存储空间存放 T-Log。例如,如果您的保留期为 24 小时,请在捕获作业中调整 maxscansmaxtrans 的值。maxtrans x maxscans 必须等于 AWS DMS 每天从源数据库复制的、生成的表事件的平均数量。将计算出的 24 小时总计 T-log 大小与您的可用存储空间进行比较,并确定是否有足够的存储空间用于事务处理。

某些版本的 SQL Server 存在已知问题。如果 pollinginterval 的值设置为超过 3599 秒,则该值将重置为默认值,即五秒。发生这种情况时,会在 AWS DMS 读取之前清除 T-Log 条目。有关此问题的信息,请参阅 Microsoft 网站上的 KB4459220 - 修复: 在 SQL Server 的 sys.sp_cdc_scan 中将“pollinginterval”参数从秒转换为小时时发生错误结果

创建 AWS DMS 任务后,监控迁移任务的状态。如果您停止任务并在一小时后恢复任务,则任务可能会失败。由于前面提到的问题,T-Log 已被截断,AWS DMS 没有所需的日志序列号(LSN)。要防止出现此问题,请完成以下步骤:

1.    要停止捕获作业,请运行以下命令:

use [DBName]
exec sys.sp_cdc_stop_job;

2.    停止 AWS DMS 任务,等待所有剩余活动停止。

3.    恢复 DMS 任务并监控 AWS DMS 任务的源延迟以等待其同步。

4.    要重新启动捕获作业,请运行以下命令:

use [DBName]
exec sys.sp_cdc_start_job;

创建您的源端点

要创建您的源端点,请按照如何使用 AWS DMS 创建源或目标终端节点?中的步骤操作

相关信息

对 Microsoft SQL Server 的问题进行故障排除

将 Microsoft SQL Server 数据库迁移到 AWS Cloud

使用 Amazon RDS for SQL Server 作为 AWS DMS 源时的推荐设置

如何在为 AWS DMS 任务启用 CDC 时对 Amazon RDS for SQL Server 源上的 T-Log 已满问题进行故障排除?

AWS 官方
AWS 官方已更新 8 个月前