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

最終更新日: 2020 年 12 月 4 日

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 インスタンスで継続的なレプリケーションを使用するための前提条件と要件の詳細については、「Microsoft SQL Server データベースの AWS DMS のソースとしての使用」を参照してください。

解決方法

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

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;


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


請求または技術面でのサポートが必要ですか?