AWS DMS を使用して、SQL Server を実行している Amazon RDS DB インスタンスから移行する方法を教えてください。

最終更新日: 2019 年 9 月 26 日

AWS Database Migration Service (AWS DMS) を使用して、SQL Server を実行している Amazon Relational Database Service (Amazon RDS) DB インスタンスから移行する方法を教えてください。

簡単な説明

AWS DMS を使用して 1 つ以上の SQL Server DB インスタンスから、サポートされている任意のターゲット DB エンジンにデータを移行できます。

まず、RDS SQL Server インスタンスのマスターユーザーを使用して、データベースとテーブルを設定します。次に、AWS DMS コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を使用して、ソースエンドポイントを作成します。

SQL Server が変更データキャプチャ (CDC) を使用する方法と、SQL Server DB インスタンスで継続的なレプリケーションを使用するための前提条件と要件の詳細については、 SQL Server ソースからの継続的なレプリケーション (CDC) の使用を参照してください。

解決方法

AWS DMS では、継続的な変更をキャプチャするために MS-Replication と MS-CDC の 2 つの方法が用意されています。

注意: Amazon RDS は Sysadmin 権限をサポートしていないため、ソースとして SQL Server を実行する Amazon RDS インスタンスでは MS-CDC を使用する必要があります。

マスターユーザーを使用して次のコマンドを実行し、データベースレベルで MS-CDC を有効にします。

EXEC msdb.dbo.rds_cdc_enable_db 'DBName';
GO

次に、テーブルごとに次のコマンドを実行して、テーブルレベルで CDC を有効にします。

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

さらに、次のコマンドを実行して T-Log のトランザクションの保持期間を延長します。

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

SQL Server インスタンスの継続的なレプリケーションを設定する場合、変更を 1 日 (86,400 秒) 保持するように pollinginterval を設定することをお勧めします。ただし、SQL Server の一部のバージョンには既知の問題があるため、pollinginterval の値が 3,599 秒を超えると、値はデフォルトの 5 秒にリセットされます。この場合、T-Log エントリは AWS DMS が読み取る前に消去されます。この問題の影響を受けるバージョンを確認するには、Microsoft のドキュメント「 SQL Server の sys.sp_cdc_scan で「pollinginterval」パラメータを秒から時間に変換すると正しくない結果が発生します」を参照してください。

AWS DMS タスクを作成したら、移行タスクのステータスをモニタリングできます。タスクを停止し、1 時間後にタスクを再開した場合、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;

この記事は役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合