使用 AWS DMS 從 SQL Server RDS 進行持續複製失敗
我正在嘗試使用 DMS 從 SQL Server RDS 數據庫進行複制,但遇到了問題。
我能夠將一個表中的所有數據作為單個“遷移現有數據”任務載入到目標(約 1M 行)。當我執行第二個“僅複製數據更改”任務時,它會執行幾分鐘然後失敗。
第二個任務在失敗之前不會將任何行複製到目標中。
錯誤日誌中的這些行似乎相關:
$$ 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 任務,它們應該可以工作。