本節包含以下資訊:
- Datastream 處理從來源 Oracle 資料庫拉取的資料的行為
- Datastream 支援的 Oracle 資料庫版本
- 簡介如何設定 Oracle 來源資料庫,讓資料可以從該資料庫串流至目的地
- 使用 Oracle 資料庫做為來源的已知限制
行為
Datastream 支援兩種方法,可從線上重做記錄檔擷取資料變更:Oracle 二進位記錄檔讀取器 (預先發布版) 和 Oracle LogMiner。
使用二進位記錄檔讀取器方法 (預先發布版) 時,會觀察到下列行為:
如果從線上記錄檔擷取變更時發生讀取延遲,Datastream 會從封存的記錄檔擷取變更。
Datastream 只會將已提交的變更複製到目的地。未提交或已復原的交易不會複製。
二進位讀取器支援複製長度超過 4000 個字元的 Oracle
VARCHAR2
欄。
Datastream 也支援 Oracle LogMiner 功能,可揭露資料的變更。該方法的行為如下:
- 您可以選取特定資料庫中的所有結構定義或特定結構定義,以及這些結構定義或特定資料表中的所有資料表。
- 所有歷來資料都會複製。
- 所有資料操縱語言 (DML) 變更都會複製,例如指定資料庫和資料表的插入、更新和刪除作業。
- Datastream 會將已提交的變更,以及在某些情況下未提交的變更,複製到目的地。Datastream 會讀取未提交的變更。如果發生回溯情形,Datastream 輸出記錄也會包含相反的作業。舉例來說,如果有已復原的
INSERT
作業,輸出記錄也會包含對應的DELETE
作業。在這種情況下,事件會顯示為只有ROWID
的DELETE
事件。
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)。
- 不支援臨時表。
- 系統不支援
ANYDATA
、BFILE
、INTERVAL DAY TO SECOND
、INTERVAL YEAR TO MONTH
、LONG/LONG RAW
、SDO_GEOMETRY
、UDT
、UROWID
、XMLTYPE
等資料類型的資料欄,並會以NULL
值取代。 - 如要串流大型物件資料類型的資料欄,例如二進位大型物件 (
BLOB
)、字元大型物件 (CLOB
) 和國家/地區字元大型物件 (NCLOB
),您必須在串流設定中加入streamLargeObjects
標記。如果您未納入標記,Datastream 就不會串流傳輸這類資料欄,並在目的地中以NULL
值取代。如需詳細資訊,請參閱「啟用 Oracle 來源的大型物件串流功能」。 - 對於 Oracle 11g,系統不支援資料欄資料類型為
ANYDATA
或UDT
的資料表,且不會複製整個資料表。 - 不會複製 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 以下版本。
後續步驟
- 瞭解如何設定 Oracle 來源,以便與 Datastream 搭配使用。