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

版本

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 資料庫做為來源的已知限制包括:

  • 資料流上限為 10,000 個資料表。如果資料流包含超過 10,000 個資料表,可能會發生錯誤。
  • Datastream 支援 Oracle 多租戶架構 (CDB/PDB),但您只能在串流中複製單一可插式資料庫。
  • 不支援 Oracle Autonomous Database。
  • 如果資料表沒有主鍵,Datastream 會使用資料列的 ROWID 在消費者端執行合併作業。請注意,ROWID 可能不是唯一值。舉例來說,如果您使用 Oracle 的 Export/Import 公用程式刪除並重新插入資料列,則資料列的 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 標籤安全性 (OLS)。
  • 在處理事件時,Datastream 會定期從來源擷取最新的結構定義。如果結構定義有所變更,系統可能會在套用舊結構定義的同時讀取新結構定義中的部分事件。在這種情況下,Datastream 會偵測結構定義變更、觸發結構定義擷取作業,並重新處理失敗的事件。
  • 系統無法自動偵測所有來源結構定義的變更,因此可能會發生資料毀損的情況。下列結構定義變更可能導致資料損毀,或無法在下游處理事件:
    • 捨棄資料欄
    • 在表格中間新增欄
    • 變更資料欄的資料類型
    • 重新排序資料欄
    • 刪除資料表 (如果之後要使用相同的資料表重新建立並新增新資料,則相關)
    • 截斷資料表
  • Datastream 不支援複製檢視畫面。
  • Datastream 支援具體化檢視表。不過,在串流播放期間建立的新觀看次數不會自動補齊。
  • 使用 Oracle LogMiner 方法時,系統不支援 SAVEPOINT 陳述式,且在回溯時可能會導致資料出現差異。
  • 使用 Oracle LogMiner 方法時,Datastream 不支援複製名稱超過 30 個字元的資料表和資料欄。
  • Datastream 支援下列 Oracle 資料庫的字元集編碼:
    • AL16UTF16
    • AL32UTF8
    • IN8ISCII
    • JA16SJIS
    • JA16SJISTILDE
    • US7ASCII
    • UTF8
    • WE8ISO8859P1
    • WE8ISO8859P9
    • WE8ISO8859P15
    • WE8MSWIN1252
    • ZHT16BIG5
  • Datastream 不支援複製零日期值。這類日期會替換為 NULL 值。
  • 產生非常大的記錄檔可能會導致 Datastream 逾時,進而導致串流失敗。建議的重做記錄檔案大小應低於 1 GB。
  • Datastream 不支援在 Oracle Real Application Clusters (RAC) 環境中,使用單一用戶端存取名稱 (SCAN) 功能直接連線至資料庫。如要瞭解潛在解決方案,請參閱「Oracle 來源行為和限制」。
  • 如果來源是 Oracle Active Data Guard 待命資料庫,Datastream 就無法複製加密資料。

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

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

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

後續步驟