從表格和 DDL 擷取之間的互動
Oracle GoldenGate 支援部分資料類型,方法為從重做串流識別修改的資料列,然後查詢基礎表格以擷取變更的資料欄。例如,透過識別重做日誌中修改的資料列與 LOB 資料欄,然後查詢基本表格中資料列的 LOB 資料欄值,即可支援對 LOB 進行局部更新。我們採用了類似的技術來支援 UDT。
備註:當未使用原生物件支援時,擷取僅需要擷取 UDT。
這類擷取式支援是透過根據確認交易的 SCN (系統變更編號) 向資料庫發出倒溯查詢來實行。倒溯查詢功能有一定的限制。某些 DDL 作業會成為阻礙,讓倒溯查詢能夠取得這些 DDL 之前的資料不會成功。此類 DDL 的範例包括 ALTER TABLE MODIFY COLUMN 和 ALTER TABLE DROP COLUMN。
因此,如果有 Extract 擷取延遲,介入的 DDL 可能會導致 DDL 失敗之前的資料擷取要求。在此情況下,「擷取」會倒回並擷取已修改資料欄之資料的目前快照。此方法有數種限制:首先,DDL 可以修改 Extract 需要擷取的資料欄 (例如,假設介入的 DDL 新增屬性至正在擷取的 UDT)。其次,DDL 可以修改 Extract 作為邏輯資料列 ID 的其中一個資料欄。第三,在 Extract 有機會擷取資料之前,表格可能已經重新命名。
若要避免擷取相關的不一致 (例如這些不一致),請在修改資料欄時採取下列預防措施。
-
將所有 DML 暫停至表格。
-
等待 Extract 完成擷取所有剩餘的重做,並等待 Replicat 完成從歷程檔擷取的資料處理。若要判斷 Replicat 是否已完成,請發出下列命令,直到看到沒有其他可處理資料的訊息為止。
INFO REPLICAT *group* -
在來源執行 DDL。
-
繼續來源 DML 作業。