web-dev-qa-db-ja.com

AWS DMSを使用したSQL Server RDSからの継続的なレプリケーションの失敗

DMSを使用してSQL Server RDSデータベースから複製しようとしていて、問題が発生しています。

1つのテーブルのすべてのデータを単一の「既存のデータの移行」タスクとして宛先(約100万行)にロードできます。 2番目の「データ変更のみを複製する」タスクを実行すると、数分間実行されて失敗します。

失敗する前に、2番目のタスクによって行が宛先にコピーされることはありません。

エラーログのこれらの行は関連しているようです:

[SOURCE_CAPTURE] W:キャプチャ機能を設定できませんでした。 RetCode:SQL_ERROR SqlState:42S02 NativeError:208メッセージ:[Microsoft] [ODBC Driver 13 for SQL Server] [SQL Server]無効なオブジェクト名 'sysarticles'。行:1列:-1(sqlserver_log_utils.c:1712)

[SOURCE_CAPTURE] E:封筒の不良:、Lsn = 00050649:000a3cb1:0166、operation = 5、TxnId = 0000:34915a92、Tablename = COMMIT、PageId =、slotId = 0、timeStamp = 2018-08-01T08:15:30.233、 dataLen = 0、LCX = 99 、、> TXNオペレーションで無効なデータコンテキスト/ LCXコードが検出されました。 [1020203](sqlserver_log_processor.c:401)

ソースデータベースはMicrosoft SQL Server 2016(SP1-CU2)(KB4013106)-13.0.4422.0(X64)です。

これをいくつかの宛先データベース(MySQL、PostgreSQL、SQL Server)に対してテストしましたが、常に同じ結果が得られました。

継続的なレプリケーションを機能させるにはどうすればよいですか?他にどこを見ればいいですか?

2
Greg Sansom

SQL Serverの変更の追跡を無効にし、RDSの変更の追跡を有効にする必要があります。

CDCが有効になっているテーブルを見つけます。

SELECT s.name as Schema_name, t.name AS Table_name, tr.* FROM sys.change_tracking_tables tr INNER JOIN sys.tables t on t.object_id = tr.object_id INNER JOIN sys.schemas s on s.schema_id = t.schema_id;

次に、それらの各テーブルについて、テーブルを実行します。

ALTER TABLE dbo.Products DISABLE CHANGE_TRACKING;

データベースでCDCを無効にします。

alter database AdventureWorks set change_tracking = off

データベースでRDS CDCを有効にします。

exec msdb.dbo.rds_cdc_enable_db 'AdventureWorks'

各テーブルのRDS CDCを有効にします。

exec sys.sp_cdc_enable_table   
   @source_schema           = N'dbo'
,  @source_name             = N'Products'
,  @role_name               = NULL;

最後にDMSタスクを再実行すると、タスクが機能するはずです。

1
Greg Sansom

元の投稿と同じ問題がありました。 SQL Serverの変更の追跡が有効になったことがなく、データベースとすべてのテーブルの両方が上記のように設定されています。

私の最後の解決策は、レプリケーションインスタンスを再起動することでした。

0
Nick Duckstein