從 Oracle 資料庫串流資料

這個部分包含以下資訊:

  • Datastream 處理從來源 Oracle 資料庫擷取資料的行為
  • Datastream 支援的 Oracle 資料庫版本
  • 簡介如何設定來源 Oracle 資料庫,以便將資料從該資料庫串流至目的地
  • 使用 Oracle 資料庫做為來源時的已知限制

行為

Datastream 支援兩種方法,可從線上重做日誌檔擷取資料變更:Oracle 二進位記錄檔讀取器 (預先發布版) 和 Oracle LogMiner。

使用二進位記錄讀取器方法 (搶先體驗版) 時,會出現下列行為:

  • 如果從線上記錄檔擷取變更時發生讀取延遲,Datastream 會從封存的記錄檔擷取變更。

  • Datastream 只會將已提交的變更複製到目的地。未修訂或復原的交易不會複製。

  • 二進位讀取器支援複製長度超過 4000 個字元的 Oracle VARCHAR2 資料欄。

Datastream 也支援 Oracle LogMiner 功能,可顯示資料異動。這個方法的行為如下:

  • 您可以選取特定資料庫中的所有或特定結構定義,以及結構定義中的所有或特定資料表。
  • 所有歷來資料都會複製。
  • 系統會複製所有資料操縱語言 (DML) 變更,例如指定資料庫和資料表中的插入、更新和刪除作業。
  • Datastream 會將已提交的變更複製到目的地,有時也會複製未提交的變更。Datastream 會讀取未提交的變更。如果發生回溯,Datastream 輸出記錄也會包含相反的作業。舉例來說,如果 INSERT 作業已回溯,輸出記錄也會包含對應的 DELETE 作業。在此情況下,事件會顯示為只有 ROWIDDELETE 事件。

ROWID 基礎補充作業

在 Oracle 中,ROWID 是儲存資料表資料列專屬 ID 的虛擬資料欄。Datastream 會使用 ROWID 值執行回填作業。因此,我們建議您在回填作業完成前,不要執行任何可能變更來源 Oracle 資料庫中 ROWID 值的動作。

可變更 ROWID 值的動作包括:

  • 資料列的實際移動:

    • 匯出及匯入作業:匯出資料表後再匯入時,資料列的實際位置可能會變更,導致產生新的 ROWID 值。
    • ALTER TABLE (...) MOVE 指令:將資料表移至其他資料表空間可能會變更實體儲存空間,並導致 ROWID 變更。
    • ALTER TABLE (...) SHRINK SPACE 指令:這個指令會壓縮表格,可能會移動資料列並影響其 ROWID 值。
    • 分割區作業:分割、合併或移動分割區可能會變更資料列的實際位置及其 ROWID 值。
  • 回溯作業:

    • FLASHBACK TABLE 指令:將資料表還原至先前的狀態時,系統會刪除並重新插入資料列,因此會建立新的 ROWID 值。
    • FLASHBACK_TRANSACTION_QUERY:與 FLASHBACK TABLE 類似。如果交易中刪除或更新了資料列,回溯交易可能會導致 ROWID 變更。

排解 Oracle 11.2.0.4 分區資料表回填作業問題

如果 Oracle 11.2.0.4 上的分區資料表補充作業失敗,並發生預期外的擷取錯誤 (索引超出界限),這是因為 Oracle 中繼資料錯誤,導致對 ALL_OBJECTS 的查詢無法傳回子分區。

  • 解決方法:暫時撤銷 Datastream 使用者 (例如 REVOKE SELECT ON sys.dba_extents FROM USER_NAME;) 的 SELECT ON DBA_EXTENTS 權限。這會強制 Datastream 使用以索引為準的資料回填功能,略過中繼資料問題。

版本

Datastream 支援下列版本的 Oracle 資料庫:

  • Oracle 11g,版本 11.2.0.4 (僅支援 Logminer CDC 方法)
  • Oracle 12c,12.1.0.2 版
  • Oracle 12c,12.2.0.1 版
  • Oracle 18c
  • Oracle 19c
  • Oracle 21c

Datastream 支援下列類型的 Oracle 資料庫:

  • 自行代管於地端部署系統或任何雲端服務供應商
  • Amazon RDS for Oracle
  • Oracle Cloud
  • Oracle Exadata
  • Oracle RAC
  • Oracle Active Data Guard 待命資料庫

設定

如要設定來源 Oracle 資料庫,以便將資料串流至目的地,您必須設定資料庫來授予存取權、設定記錄,以及定義保留政策。

請參閱「設定來源 Oracle 資料庫」,瞭解如何設定這個資料庫,讓 Datastream 可以從中提取資料到目的地。

最佳做法

本節說明設定 Oracle 來源以搭配 Datastream 使用時,建議採取的最佳做法。

二進位讀取器是否區分大小寫

使用二進位讀取器 CDC 方法設定 Oracle 來源,並指定重做記錄和封存記錄的目錄名稱時,請注意名稱會區分大小寫。請確保您在 Datastream 連線設定檔中提供的目錄名稱,與 Oracle 資料庫中的目錄名稱大小寫完全一致。

CDC 並行作業

為盡量減少複製延遲,請確保 Datastream 能以 Oracle 來源建立重做記錄檔的速度處理這些記錄檔。使用二進位讀取器 CDC 方法時,Datastream 並行作業會在重做記錄檔層級執行:maxConcurrentCdcTasks 定義的每個工作一次處理一個檔案。

建議您採用下列方法:

  • 調整 Datastream 中的並行:找出業務尖峰時段的平均重做記錄切換次數,並據此設定 maxConcurrentCdcTasks 參數。詳情請參閱「CDC 工作數量上限」。
  • 設定 Oracle 記錄檔切換:設定 Oracle 頻繁切換記錄檔,例如每 10 到 20 分鐘切換一次。這會產生穩定的較小工作單元串流,讓 Datastream 並行工作有效率地平行運作。

建議您最佳化設定,確保 Datastream 中有足夠的並行工作,可處理 Oracle 頻繁建立的較小重做記錄。詳情請參閱