為什麼 AWS DMS 任務中的來源篩選條件不再適用?
我想要了解如何在來源篩選條件未在我的 AWS Database Migration Service (AWS DMS) 任務中正確運作時疑難排解並修復問題。
解決方法
檢查您的引擎是否支援來源篩選功能
大多數 AWS DMS 來源都支援來源篩選。不過,MongoDB 或 具有 MongoDB 相容性的 Amazon DocumentDB 不支援來源篩選功能。如需詳細資訊,請參閱資料遷移的來源。
下列限制可能會影響來源篩選:
- 篩選條件不會計算由右至左語言的資料欄。
- 您無法將篩選條件套用至大型物件 (LOB) 資料欄。
- 您只能將篩選條件套用至建立後無法更新的固定資料欄。如果您將來源篩選條件套用到建立後可以更新的固定資料欄,則來源篩選條件可能無法運作。
疑難排解在全負載期間未運作的篩選條件
確定來源篩選條件未運作的階段。
如果來源篩選條件在全負載期間未運作,請採取下列動作:
- 確認對應規則中的區分大小寫與來源引擎相符。
- 篩選日期資料類型時,請使用 AWS DMS 要求的格式。
- 在 SOURCE_UNLOAD 上執行偵錯記錄日誌層級,以重現問題。然後,擷取 AWS DMS 在來源上執行的查詢,以卸載資料。
在來源 Oracle 資料表上篩選問題的範例:
CREATE TABLE DMS.FILTERS ( ID NUMBER(10) NOT NULL, ENTRY_DATE DATE, CONSTRAINT FILTERS_PK PRIMARY KEY (ID) ); SQL> SELECT * FROM FILTERS; ID ENTRY_DATE ---------- --------- 1 01-JAN-22 2 01-JUN-22 3 01-JAN-21 4 01-JUN-21 5 01-JAN-20 6 01-JUN-20
使用以下對應規則來建立 AWS DMS 任務:設定僅複製大於或等於 01/01/2022 之 ENTRY_DATE 的資料列。
範例任務:
{ "rules": [ { "rule-type": "selection", "rule-id": "893662253", "rule-name": "893662253", "object-locator": { "schema-name": "DMS", "table-name": "FILTERS" }, "rule-action": "include", "filters": [ { "filter-type": "source", "column-name": "ENTRY_DATE", "filter-conditions": [ { "filter-operator": "gte", "value": "01/01/2022" } ] } ] } ] }
若要確定未複製任何記錄,且錯誤會出現在任務日誌中,請執行下列查詢:
01786264: 2022-06-22T10:36:53 [SOURCE_UNLOAD ]E: ORA-01843: not a valid month [1020417] (oracle_endpoint_unload.c:171)
由於 SOURCE_UNLOAD 已開啟偵錯日誌,因此任務日誌會顯示 AWS DMS 在來源資料庫上執行的確切查詢。
範例查詢:
1786264: 2022-06-22T10:36:53 [SOURCE_UNLOAD ]D: Select statement for UNLOAD is 'SELECT "ID","ENTRY_DATE" FROM "DMS"."FILTERS" WHERE ((("ENTRY_DATE" >= TO_DATE('0000-00-00','YYYY-MM-DD'))))' (oracle_endpoint_utils.c:1979)
在下列日誌輸出中,AWS DMS 會在來源資料庫上執行查詢:
SELECT "ID","ENTRY_DATE" FROM "DMS"."FILTERS" WHERE ((("ENTRY_DATE" >= TO_DATE('0000-00-00','YYYY-MM-DD'))));
AWS DMS 無法辨識對應規則中的日期。因此,日期與 AWS DMS 預期的日期格式不符。
若要修改對應規則以符合預期的日期格式,請執行下列查詢:
{ "filter-operator": "gte", "value": "2022-01-01" }
疑難排解在變更資料擷取 (CDC) 期間未運作的篩選條件
篩選固定資料欄時,篩選問題只會在 CDC 階段發生。問題可能只會在特定資料操作語言 (DML) 陳述式上發生,例如 UPDATES 或 DELETES。請確定您已在來源資料表上開啟足夠的記錄日誌。
若要配置其他記錄日誌,請使用 Oracle、PostgreSQL 或 Microsoft SQL Server。
Oracle
Oracle 使用補充記錄日誌在資料表資料欄上新增其他日誌。如果您篩選的資料欄不是主索引鍵資料欄,則請啟用資料欄和主索引鍵欄的補充記錄日誌。
下列範例會複製名為 TEST.LOGGING 的資料表,該資料表格具有主索引鍵 ID 和資料欄 NAME 上的篩選條件。若要建立日誌群組補充記錄日誌,請執行下列命令:
ALTER TABLE TEST.LOGGING ADD SUPPLEMENTAL LOG GROUP TEST_LOG_GROUP (ID, NAME) ALWAYS;
如果已在資料表中的所有資料欄新增補充記錄日誌,則請勿新增更多補充記錄日誌。
已新增補充記錄日誌的範例:
ALTER TABLE TableName ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
PostgreSQL
PostgreSQL 使用 REPLICA IDENTITY 屬性來設定資料表的記錄層級。將 REPLICA IDENTITY 設定為 DEFAULT 時,PostgreSQL 會記錄 write-ahead logs (WAL) 中主索引鍵資料欄的舊值。但是,當您使用非主索引鍵資料欄時,預設記錄日誌層級可能不足以刪除。
請確定 AWS DMS 任務使用設定為下列其中一個屬性的外掛程式:
如果您使用 test_decoding,則請將 REPLICA IDENTITY 設定為 FULL:
ALTER TABLE tablename REPLICA IDENTITY FULL;
注意: 如果您未將 REPLICA IDENTITY 設定為 FULL,則 AWS DMS 可能會將所有刪除傳送至目標資料表。
如果您使用 pglogical,則請在將資料表新增至複寫集之後,將 REPLICA IDENTITY 設定為 FULL:
ALTER TABLE tablename REPLICA IDENTITY FULL;
注意: 將 REPLICA IDENTITY 設定為 FULL 時,pglogical 包括一項限制,因此您無法將資料表新增至複寫集。您也可以增加在來源資料庫上產生的 WAL 日誌數目。WAL 日誌數目增加時,所有資料欄都會紀錄至 WAL。
Microsoft SQL Server
請檢查您是否符合下列所有 AWS DMS CDC 記錄日誌要求,以開啟 MS-CDC。
請對每個具有主索引鍵的資料表,請執行下列查詢:
exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @role_name = NULL, @supports_net_changes = 1 GO
注意: 雲端型來源需要執行事先查詢。
請對每個具有唯一索引鍵,但沒有主索引鍵的資料表,請執行下列查詢:
exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @index_name = N'unique_index_name', @role_name = NULL, @supports_net_changes = 1 GO
注意: 內部部署和雲端型來源都需要執行事先查詢。如果您對內部部署來源使用 MS-Replication,則不需要執行事先查詢。
請對每個沒有主要或唯一索引鍵的資料表,請執行下列查詢:
exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @role_name = NULL GO
注意: 內部部署和雲端型來源都需要執行事先查詢。
MySQL
在 MySQL 中,binlog_row_image 系統變數控制 binlog 中的資料行映像。如需詳細資訊,請參閱 MySQL 網站上的 binlog_row_image。AWS DMS 要求您將 binlog_row_image 設定為 FULL 並將 binlog_format 設定為 ROW。
MySQL 會記錄映像前和映像後中的所有資料欄。若要確認 binlog 中的最大記錄層級,您必須設定來源資料庫上的 binlog_row_image FULL。
相關資訊
相關內容
- 已提問 2 年前lg...
- 已提問 1 年前lg...
- 已提問 2 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前