從 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 作業。在此情況下,事件會顯示為 DELETE 事件,且只包含 ROWID

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 變更。

版本

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 資料庫:

  • 自行代管於地端部署系統或任何雲端服務供應商
  • Oracle 適用的 Amazon RDS
  • 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 頻繁建立的較小重做記錄。詳情請參閱串流並行控制項

已知限制

使用 Oracle 資料庫做為來源時,您必須遵守下列已知限制:

  • 串流最多只能有 10,000 個資料表。如果資料串流包含超過 10,000 個資料表,可能會發生錯誤。
  • Datastream 支援 Oracle 多租戶架構 (CDB/PDB),但您只能在串流中複製單一可插式資料庫。
  • 不支援 Oracle Autonomous Database。
  • 如果資料表沒有主鍵,Datastream 會使用資料列的 ROWID 在取用端執行合併作業。請注意,ROWID 可能不是唯一值。舉例來說,如果您使用 Oracle 的匯出/匯入公用程式刪除並重新插入資料列,該資料列的 ROWID 可能會變更。如果您刪除資料列,Oracle 可以將其 ROWID 重新指派給稍後插入的新資料列。
  • 系統不支援索引組織表 (IOT)。
  • 不支援暫時資料表。
  • 系統不支援 ANYDATABFILEINTERVAL DAY TO SECONDINTERVAL YEAR TO MONTHLONG/LONG RAWSDO_GEOMETRYUDTUROWIDXMLTYPE 資料類型的資料欄,並會以 NULL 值取代。
  • 如要串流大型物件資料類型 (例如二進位大型物件 (BLOB)、字元大型物件 (CLOB) 和國家字元大型物件 (NCLOB)) 的資料欄,您需要在串流設定中加入 streamLargeObjects 旗標。如果未加入這個旗標,Datastream 就不會串流這類資料欄,並在目的地中以 NULL 值取代。詳情請參閱「為 Oracle 來源啟用大型物件串流」。
  • 如果是 Oracle 11g,系統不支援資料欄含有 ANYDATAUDT 資料類型的資料表,因此無法複製整個資料表。
  • Oracle Label Security (OLS) 不會複製。
  • Datastream 會在處理事件時,定期從來源擷取最新結構定義。如果結構定義有所變更,系統可能仍會套用舊結構定義,但會讀取新結構定義中的部分事件。在這種情況下,Datastream 會偵測到結構定義變更、觸發結構定義擷取作業,並重新處理失敗的事件。
  • 系統無法自動偵測來源結構定義的所有變更,因此可能會發生資料損毀。下列結構定義變更可能會導致資料損毀,或無法處理下游事件:
    • 捨棄資料欄
    • 在表格中間新增欄
    • 變更資料欄的資料類型
    • 重新排序資料欄
    • 捨棄資料表 (如果之後重新建立資料表並新增資料,這項操作就相當實用)
    • 截斷資料表
  • Datastream 不支援複製檢視表。
  • Datastream 支援具體化檢視表。不過,在串流期間建立的新檢視區塊不會自動回填。
  • 使用 Oracle LogMiner 方法時,系統不支援 SAVEPOINT 陳述式,如果發生回溯,可能會導致資料差異。
  • 使用 Oracle LogMiner 方法時,Datastream 不支援複製名稱超過 30 個字元的資料表和資料欄。
  • Datastream 支援 Oracle 資料庫的下列字元集編碼:
    • AL16UTF16
    • AL32UTF8
    • IN8ISCII
    • IW8ISO8859P8
    • JA16SJIS
    • JA16SJISTILDE
    • KO16MSWIN949
    • US7ASCII
    • UTF8
    • WE8ISO8859P1
    • WE8ISO8859P9
    • WE8ISO8859P15
    • WE8MSWIN1252
    • ZHT16BIG5
  • Datastream 不支援複製零日期值。這類日期會替換為 NULL 值。
  • Datastream 不支援使用 Oracle Real Application Clusters (RAC) 環境中的單一用戶端存取名稱 (SCAN) 功能,直接連線至資料庫。如要瞭解可能的解決方案,請參閱「Oracle 來源行為和限制」。
  • 如果來源是 Oracle Active Data Guard 待機資料庫,Datastream 不支援複製加密資料。

使用二進位讀取器時的其他限制

  • 二進位讀取器不支援下列功能:

    • 資料庫透明加密 (TDE)
    • 混合分欄壓縮
    • 安全檔案
    • Amazon RDS 來源不支援 ASM。
    • 二進位讀取器 CDC 方法不支援 Oracle 11g 和更早版本。

後續步驟