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)に対してテストしましたが、常に同じ結果が得られました。
継続的なレプリケーションを機能させるにはどうすればよいですか?他にどこを見ればいいですか?
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タスクを再実行すると、タスクが機能するはずです。
元の投稿と同じ問題がありました。 SQL Serverの変更の追跡が有効になったことがなく、データベースとすべてのテーブルの両方が上記のように設定されています。
私の最後の解決策は、レプリケーションインスタンスを再起動することでした。