從表格和 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 有機會擷取資料之前,表格可能已經重新命名。

若要避免擷取相關的不一致 (例如這些不一致),請在修改資料欄時採取下列預防措施。

  1. 將所有 DML 暫停至表格。

  2. 等待 Extract 完成擷取所有剩餘的重做,並等待 Replicat 完成從歷程檔擷取的資料處理。若要判斷 Replicat 是否已完成,請發出下列命令,直到看到沒有其他可處理資料的訊息為止。

    INFO REPLICAT *group*
  3. 在來源執行 DDL。

  4. 繼續來源 DML 作業。