使用自動綱要演進支援的作業
Oracle、MySQL、PostgreSQL、SQL Server、Db2 LUW、DB2400、Teradata 和 Oracle TimesTen 目標均支援「自動綱要發展」。
Oracle、MySQL、PostgreSQL、SQL Server、Db2 LUW、Db2 zOS、DB2400、Sybase、Teradata、Oracle TimesTen 和 Snowflake 等來源均支援自動執行綱要。
支援下列作業:
- 您可以使用
AUTOSCHEMAOPTIONS來覆寫預設的「自動綱要發展」回應。支援的選項如下:-
TYPEMAP:使用此選項來覆寫預設資料類型對應 -
IGNORE_DATA_TRUNCATION:如果預設資料類型對應預見任何可能的資料截斷,Replicat 預設會出現適當的錯誤。若要忽略這些資料截斷錯誤,並允許 Replicat 繼續而不異常中止,您可以在 Replicat 參數檔中指定AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION。 -
IGNORE_MODIFY_KEY_COLUMN:依照預設,「自動綱要發展」不允許修改主索引鍵資料欄,且在發生適當錯誤的情況下 Replicat 異常中止。您可以指定AUTOSCHEMAOPTIONS IGNORE_MODIFY_KEY_COLUMN來略過索引鍵資料欄的任何修改。 -
ALLOW_MODIFY_KEY_COLUMN:依照預設,「自動綱要發展」不允許修改主索引鍵資料欄,而 Replicat 在這類情況下會異常中止。您可以指定AUTOSCHEMAOPTIONS ALLOW_MODIFY_KEY_COLUMN以允許對索引鍵資料欄進行任何修改。 -
MODIFY_COLUMN_NULLABILITY_ONLY:如果AUTOSCHEMAOPTIONS MODIFY_COLUMN_NULLABILITY_ONLY只想要修改資料欄的可為空值,而不想要修改類型,您可以指定它們。
-
「自動綱要發展」會根據綱要變更支援下列作業,從歷程檔中的描述資料記錄偵測到這些變更,讓來源和目標表格的綱要保持同步:
-
在目標資料庫上建立遺失的表格
-
執行
ADD/MODIFY/DROP資料欄來更改目標表格
根據每個來源資料欄描述資料,預設會為對應的目標資料欄選擇最適合的資料類型。
附註:請先從資料類型對應複查適用於特定來源資料庫與目標資料庫複製案例的預設資料類型對應,再導入「自動結構進化」。
在所有情況下,目標資料類型可能與來源資料類型不完全相同。如果可能的話,會選擇目標資料類型,讓目標類型永遠相容且夠大 (大小與來源資料欄相同或更寬),以容納對應的來源資料欄資料。在某些情況下,目標資料庫上沒有對應來源資料欄資料類型可用的適當類型 (例如目標資料庫上的可用類型可能會導致資料截斷),系統會傳回錯誤給使用者,並提供適當的建議。
建立缺少的表格
AutoSchema 支援下列使用案例:
-
套用「CDC 擷取」產生的歷程檔資料時,在目標上建立遺漏的表格。
-
在套用初始載入 Extract 所產生的歷程檔資料時,在目標上建立遺漏的表格。
-
僅套用 initialLoad Extract 所產生的歷程檔時,您可以選擇刪除現有的目標表格,並透過指定
OPTYPE RECREATE作為DDL AUTOSCHEMA包含條件的一部分來建立另一個 Extract。 -
如果歷程檔描述資料中的所有對應來源索引鍵資料欄都不可為空值,則「自動綱要」會使用含有所有對應資料欄的
PRIMARY KEY子句建立目標表格。 -
如果任何對應的來源索引鍵資料欄 (來自歷程檔描述資料) 都可為空值,則「自動綱要」會使用含有所有對應資料欄的
UNIQUE KEY子句建立目標表格。
更改現有表格
如果在來源上新增 / 刪除 / 修改任何資料欄,就會產生對應的 ALTER TABLE DDL,然後在對應的對應目標表格上執行。「自動綱要」只支援與類型相關的修改 (包括資料類型名稱、長度、精確度、比例 (如果適用) 以及空值限制條件。不過,它不會對任何其他資料欄屬性進行任何修改。如果在來源資料欄上偵測到任何類型 / 空值相關綱要變更,就會將它們傳輸到目標資料欄。
來源表格的一或多個綱要變更,可能會導致對應目標表格上的單一或多個 ALTER TABLE DDL (如特定目標資料庫所支援)。目標的 DDL 數目取決於特定目標資料庫所支援的語法,例如在下列情況下:
-
少數資料庫不允許在單一
ALTER TABLE DDL中新增 / 刪除 / 修改多個資料欄。 -
少數資料庫不允許修改單一
ALTER TABLE DDL敘述句中資料欄的類型和空值性。
在這種情況下,會根據目標資料庫需求,在目標表格上執行所需的 ALTER TABLE DDL 敘述句數目。
「自動綱要」可能會影響需要進一步動作的目標資料庫。例如,如果 ALTER TABLE MODIFY COLUMN 可能導致某些資料截斷,則不同的資料庫可能會以不同的方式處理。當 MySQL 以啟用嚴格模式執行時,資料庫可能會偵測到某些現有資料可能會被作業截斷,並導致 Replicat 停止 (通常發生在 Oracle 與 MySQL 之間)。不過,如果以非嚴格模式設定 MySQL,則可能會發生牽引,而不會出現警告。
對於 IBM i 而言,視系統的設定方式而定,Replicat 似乎會當機。對於 Db2 (前身為 Db2 LUW) 和 Db2 z/OS 的某些動作,某些動作可能需要進行表格重組。在 Db2 z/OS 上,除非執行重組,否則無法辨識刪除資料欄;對於 Db2,表格可能會在重組擱置中狀態結束,並停止允許對表格進行進一步的作業。
附註:如有需要,您可以選擇性地將 OPTYPE ADDCOLUMN、OPTYPE DROPCOLUMN 及 OPTYPE MODIFYCOLUMN 新增至 DDL AUTOSCHEMA 包含 / 排除準則。