Datastream 可讓您將來源 Oracle 資料庫的歷來資料和持續變更,串流至目的地,以便進行即時分析和資料庫同步處理。
設定 Oracle 來源前,請先查看 Datastream 的複製行為、支援的版本和資料庫類型、資料庫設定、最佳做法和已知限制。
行為
Datastream 支援兩種從線上重做日誌檔擷取資料變更的方法:Oracle 二進位記錄檔讀取器 (預先發布版) 和 Oracle LogMiner。
使用二進位記錄讀取器方法 (預先發布版) 時,會觀察到下列行為:
如果從線上記錄檔擷取變更時發生讀取延遲,Datastream 會從封存記錄檔擷取變更。
Datastream 只會將已修訂的變更複製到目的地。未提交或復原的交易不會複製。
二進位讀取器支援複製超過 4000 個字元的 Oracle
VARCHAR2資料欄。
Datastream 也支援 Oracle LogMiner 功能,可公開資料變更。這個方法的行為如下:
- 您可以選取特定資料庫中的所有結構定義或特定結構定義,以及結構定義中的所有資料表或特定資料表。
- 所有歷來資料都會複製。
- 所有 data manipulation language (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 作業:
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 就會強制使用索引式補充作業,略過中繼資料問題。
待命資料庫
使用 Oracle Active Data Guard 備用資料庫做為來源時,Datastream 會讀取封存的重做日誌檔。為確保 Datastream 只處理已成功套用至待命資料庫的重做日誌檔,您必須篩選標準 Oracle 檢視表 (例如 V$ARCHIVED_LOG 和 GV$ARCHIVED_LOG),只納入含有 APPLIED = 'YES' 篩選器的記錄。
您可以建立自訂檢視畫面,請務必為 Datastream 使用者授予這些檢視表的適當存取權。例如:
CREATE OR REPLACE VIEW USER_NAME.local_v$archived_log AS
SELECT * FROM sys.v_$ARCHIVED_LOG
WHERE RESETLOGS_CHANGE# = (SELECT resetlogs_change# FROM v$database)
AND APPLIED = 'YES';
CREATE OR REPLACE VIEW USER_NAME.local_gv$archived_log AS
SELECT * FROM sys.gv_$ARCHIVED_LOG
WHERE RESETLOGS_CHANGE# = (SELECT resetlogs_change# FROM v$database)
AND APPLIED = 'YES';
CREATE SYNONYM USER_NAME.v$archived_log FOR USER_NAME.local_v$archived_log;
CREATE SYNONYM USER_NAME.gv$archived_log FOR USER_NAME.local_gv$archived_log;
使用 APPLIED = 'YES' 篩選器會影響資料更新間隔。Datastream 會等待待命資料庫的管理復原程序 (MRP) 套用記錄,並將 APPLIED 欄更新為 YES,然後才擷取變更。如果 MRP 程序延遲或暫停 (例如暫停待命套用程序),就會直接影響複製資料的新鮮度。Datastream 會進入重試迴圈並延遲處理,直到新套用的封存記錄可用為止。
複製含有大型物件 (LOB) 欄的資料表時,這項設定非常重要。如果是 UPDATE 作業,LOB 資料欄的詳細值不會出現在重做日誌檔中,因此 Datastream 必須查詢資料庫,才能擷取相關聯的資料列。如果 Datastream 處理未套用的重做日誌檔,並嘗試從待命資料庫擷取 LOB 值,可能會擷取到不正確的過時值。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 頻繁建立的小型重做日誌檔。詳情請參閱「串流並行控制項」。
已知限制
使用 Oracle 資料庫做為來源時,已知限制包括:
- 串流最多只能有 10,000 個資料表。如果串流包含超過 10,000 個資料表,可能會發生錯誤。
- Datastream 支援 Oracle 多租戶架構 (CDB/PDB),但您只能在串流中複製單一可插式資料庫。
- 不支援 Oracle Autonomous Database。
- 如果資料表沒有主鍵,Datastream 會使用資料列的
ROWID,在取用端執行合併作業。請注意,ROWID可能不重複。舉例來說,如果您使用 Oracle 的匯出/匯入公用程式刪除並重新插入資料列,該資料列的ROWID可能會變更。如果您刪除資料列,Oracle 就能將其ROWID重新指派給之後插入的新資料列。 - 不支援索引組織資料表 (IOT)。
- 不支援臨時資料表。
- 系統不支援下列 Oracle 資料類型,也不會複製。這些類型的資料欄會複製為目的地中的
NULL值:ANYDATA、ANYDATASET、ANYTYPEVARRAY(Oracle 陣列)BFILE、BFILENAMEINTERVAL DAY TO SECOND、INTERVAL YEAR TO MONTHLONG、LONG RAWUROWIDUDT- 媒體和空間類型:
ORDAUDIO、ORDDATASOURCE、ORDDICOM、ORDDOC、ORDIMAGE、ORDVIDEO、SDO_GEOMETRY(以及所有其他MDSYS.SDO_*類型)。
如要串流大型物件資料類型的資料欄,例如
XMLTYPE、二進位大型物件 (BLOB)、字元大型物件 (CLOB) 和國家字元大型物件 (NCLOB),您必須在串流設定中加入streamLargeObjects旗標。如未加入旗標,Datastream 就不會串流這類資料欄,並在目的地中以NULL值取代。詳情請參閱「為 Oracle 來源啟用大型物件串流」。串流這些資料類型時,Datastream 必須查詢來源資料庫,擷取遺漏的 LOB 值時間點 (在稱為補充的主動查詢程序中)。這會在下列情況發生:- 在
UPDATE - 執行任何涉及二進位 XML 類型的 DML 作業時
- 如果串流使用 LogMiner 方法,在含有 LOB 的資料表上剖析 DML 期間
Datastream 會透過查詢資料庫來串流這些資料欄,因此如果發生快速、連續更新,或插入後快速刪除的情況,可能無法擷取中間的變更。請注意,
DELETE作業不會觸發補充。使用僅限附加寫入模式時,這項限制特別重要,因為該模式會擷取所有中繼變更。- 在
如果是 Oracle 11g,系統不支援資料欄含有
ANYDATA或UDT資料類型的資料表,且不會複製整個資料表。Oracle Label Security (OLS) 不會複製。
Datastream 會在處理事件時,定期從來源擷取最新結構定義。如果結構定義有所變更,系統可能會在仍套用舊結構定義時,讀取新結構定義中的部分事件。在這種情況下,Datastream 會偵測結構定義變更、觸發結構定義擷取作業,並重新處理失敗的事件。
系統無法自動偵測來源結構定義的所有變更,因此可能會發生資料損毀。下列結構定義變更可能會導致資料損毀,或無法處理下游事件:
- 捨棄資料欄
- 在表格中間新增資料欄
- 變更資料欄的資料類型
- 重新排列資料欄
- 捨棄資料表 (如果使用新資料重新建立相同的資料表,則適用)
- 截斷資料表
Datastream 不支援複製檢視表。
Datastream 不支援複製虛擬資料欄 (
GENERATED ALWAYS AS (...) VIRTUAL),因為 Oracle 不會將虛擬資料欄值儲存在磁碟,也不會寫入重做日誌檔。目的地結構定義會省略虛擬資料欄。如果虛擬資料欄是複合主鍵的一部分,Datastream 只會使用非虛擬資料欄做為目的地的主鍵。如果其餘資料欄不重複,可能會導致重複鍵覆寫。Datastream 支援 materialized view。不過,在串流執行期間建立的新檢視表不會自動回填。
使用 Oracle LogMiner 方法時,系統不支援
SAVEPOINT陳述式,且復原時可能會導致資料不一致。使用二進位讀取器方法時,不支援動態分區資料表。
使用 Oracle LogMiner 方法時,Datastream 不支援複製名稱超過 30 個字元的資料表和資料欄。
Datastream 支援下列 Oracle 資料庫字元集編碼:
AL16UTF16AL32UTF8IN8ISCIIIW8ISO8859P8JA16SJISJA16SJISTILDEKO16MSWIN949US7ASCIIUTF8WE8ISO8859P1WE8ISO8859P9WE8ISO8859P15WE8MSWIN1252ZHT16BIG5
Datastream 不支援複製零日期值。這類日期會替換為
NULL值。Datastream 不支援在 Oracle Real Application Clusters (RAC) 環境中,使用單一用戶端存取名稱 (SCAN) 功能直接連線至資料庫。如要瞭解可能的解決方案,請參閱「Oracle 來源行為和限制」。
如果來源是 Oracle Active Data Guard 待命資料庫,Datastream 僅支援資料表空間層級加密,不支援資料欄層級加密。
使用二進位讀取器時的其他限制
高效能二進位讀取器方法僅適用於 Oracle 12c 以上版本。如果是 Oracle 11g 以下版本,則必須使用 LogMiner。
二進位讀取器不支援下列功能:
- 透明資料庫加密 (TDE)
- 混合分欄壓縮
- 安全檔案
- Amazon RDS 來源不支援 ASM。
- 二進位讀取器 CDC 方法不支援 Oracle 11g 和更早版本。
後續步驟
- 瞭解如何設定 Oracle 來源,以便與 Datastream 搭配使用。