Sql-Server

使用 AWS DMS 從 SQL Server RDS 進行持續複製失敗

  • October 2, 2018

我正在嘗試使用 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 任務,它們應該可以工作。

引用自:https://dba.stackexchange.com/questions/213733