實時同步Oracle的數據至Hologres時,來源數據源為Oracle,去向數據源為Hologres,執行同步任務前,您需要參考本文在數據源中配置好網絡、白名單等配置,為后續的數據同步做好網絡環境和賬號權限的準備。

前提條件

配置數據源之前,請確保已完成以下規劃與準備工作。
  • 準備數據源:已購買來源數據源Oracle、去向數據源Hologres。
  • 資源規劃與準備:已購買獨享數據集成資源組,并完成資源配置。詳情可參見資源規劃與配置
  • 網絡環境評估與規劃:進行數據集成前,您需根據業務情況,打通數據源、獨享數據集成資源組之間的網絡,網絡聯通后參考本文進行交換機、白名單等網絡環境下的訪問配置。
    • 如果數據源和獨享數據集成資源組均處于同地域的同一VPC網絡中,數據源與資源組間的網絡天然聯通。
    • 如果數據源和獨享數據集成資源組均處于不同的網絡環境中,您需要通過VPN網關等方式,將數據源與資源組間的網絡打通。

背景信息

同步來源數據源的數據至去向數據源時,您需要保障數據源與DataWorks的獨享數據集成資源組在網絡上是聯通的,且不存在賬號權限的訪問限制。同時,需要確保Oracle數據源中不存在數據集成不支持的數據庫版本、字符編碼及數據類型。
  • 網絡白名單
    以下以使用同一VPC網絡環境為例,您需要將數據集成資源組所在的VPC網段添加至白名單中,保障數據集成資源組可訪問數據源。網絡聯通vpc
  • 賬號權限

    您需要規劃一個可訪問數據源的賬號,用于后續數據集成過程中訪問數據源并進行數據提取、寫入的同步操作。

  • 查看當前使用的數據庫版本是否為DataWorks數據集成實時同步任務所支持的版本。

    DataWorks的數據集成實時同步Oracle數據是基于Oracle Logminer日志分析工具實現的。實時同步Oracle數據目前僅支持配置Oracle數據源為Oracle的10g11g12c non cdb18c non cdb19c non cdb版本數據庫,不支持配置為Oracle的12c cdb18c cdb19c cdb版本數據庫。數據庫容器CDB(Container Database)是Oracle 12c及之后版本的數據庫新特性,用于承載多個可插拔數據庫PDB(Pluggable Database)。

    1. 您可以通過如下任意語句查看Oracle數據庫的版本。
      • 語句一:
        select * from v$version;
      • 語句二:
        select version from v$instance;
    2. 如果查看到的Oracle數據庫版本為12c18c19c,則您需要使用如下語句進一步確認該數據庫是否為cdb類型的數據庫。DataWorks數據集成實時同步任務暫不支持使用cdb類型的Oracle數據庫。
      select name,cdb,open_mode,con_id from v$database;
    說明 如果當前使用的數據庫版本不是DataWorks數據集成實時同步任務支持的Oracle數據庫版本,請盡快更換為數據集成實時同步任務支持的Oracle數據庫版本,否則會導致數據集成任務無法執行。
  • 日志權限
    來源數據源為Oracle時,您需要開啟數據庫級別的歸檔日志、Redo日志及補充日志。
    • 歸檔日志:Oracle通過歸檔日志保存所有的重做歷史記錄,用于在數據庫出現故障時完全恢復數據庫。
    • Redo日志:Oracle通過Redo日志來保證數據庫的事務可以被重新執行,從而使得在故障(例如斷電)之后,數據可以被恢復,因此您需要為數據庫開啟并切換Redo日志。
    • 補充日志:補充日志是對Redo日志中信息的補充。在Oracle中,Redo日志用于記錄被修改的字段的值,而補充日志是對Redo日志中變更記錄的補充信息,可以確保Oracle的Redo日志包含描述所有數據更改的完整信息,以便在進行數據恢復、數據同步等操作時,可以追溯到完整的語句及相關變更。Oracle數據庫的某些功能要求啟用補充日志才能正常或更好的工作,因此您需要為數據庫開啟補充日志。

      例如,如果未啟用補充日志,執行UPDATE命令后,Redo日志中只會記錄通過UPDATE命令更改后的字段值,啟用補充日志后,則Redo日志中會記錄被修改字段,修改前的值、修改后的值以及修改目標字段的條件值。當數據庫發生故障(例如斷電)時,您可以基于此修改信息恢復數據。

      使用數據集成時推薦開啟主鍵列或唯一索引列補充日志。
      • 開啟主鍵列的補充日志后,如果數據庫有任何更新,則組成主鍵的所有列都會被記錄在日志中。
      • 開啟唯一索引列的補充日志后,如果組成唯一鍵或位圖索引的任何列被修改,則組成該唯一鍵或位圖索引的列都會被記錄在日志中。
    DataWorks數據集成實時同步Oracle數據前,您需要確保已為數據庫開啟歸檔日志及補充日志。查看當前使用的數據庫是否開啟數據庫級別的歸檔日志及補充日志的SQL語句如下。
    select log_mode, supplemental_log_data_pk, supplemental_log_data_ui from v$database;
    • log_mode的返回結果為ARCHIVELOG,則表示數據庫的歸檔日志已開啟,當返回結果不為ARCHIVELOG,則表示數據庫的歸檔日志未開啟,您需要參考本文操作步驟的開啟歸檔日志,開啟歸檔日志。
    • supplemental_log_data_pksupplemental_log_data_ui的返回結果為YES,則表示數據庫的補充日志已開啟,當返回結果為FALSE,則表示數據庫的補充日志未開啟,您需要參考本文操作步驟的開啟補充日志,開啟補充日志。
  • 檢查數據庫的字符編碼格式

    您需要確保Oracle中不能包含數據集成不支持的字符編碼格式,防止同步數據失敗。當前數據集成同步數據時,僅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK編碼格式。

  • 檢查是否包含不支持的數據類型

    您需要確保Oracle中不能包含數據集成不支持的數據類型,防止同步數據失敗。當前數據集成進行實時同步時,不支持LONG、BFILE、LONG RAW及NCLOB數據類型 。

使用限制

  • Oracle僅支持在主庫中為主庫或備庫開啟補充日志。
  • 當前數據集成同步數據時,僅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK編碼格式。
  • 當前數據集成進行實時同步時,不支持LONG、BFILE、LONG RAW及NCLOB數據類型 。Oracle單實例實時同步日支持最大變更量為500GB。
  • 實時同步Oracle數據目前僅支持配置Oracle數據源為Oracle的10g11g12c non cdb18c non cdb19c non cdb版本數據庫,不支持配置為Oracle的12c cdb18c cdb19c cdb版本數據庫。數據庫容器CDB(Container Database)是Oracle 12c及之后版本的數據庫新特性,用于承載多個可插拔數據庫PDB(Pluggable Database)。

注意事項

  • DataWorks數據集成實時同步任務,目前對于Oracle主庫支持訂閱聯機重做日志(Online Redo),對于Oracle備庫僅支持訂閱歸檔日志。因此,對于時效性要求比較高的實時同步任務,建議訂閱主庫的實時增量變更。訂閱Oracle備庫時,Oracle日志的產生到可以被獲取的最短延遲時間取決于Oracle的自動切換歸檔日志的時間,不能保證時效性。
  • Oracle數據庫的歸檔日志建議保留3天。當寫入大批量數據至Oracle數據庫時,實時同步數據的速度可能會慢于日志生成的速度,方便在同步任務出現問題時,為追溯數據預留足夠的時間。您可以通過分析歸檔日志排查問題并恢復數據。
  • DataWorks數據集成實時同步任務,不支持對Oracle數據庫中無主鍵的表進行truncate操作。對于無主鍵表進行日志分析(即logminer操作)是根據Rowid進行回查,當遇到truncate操作時會修改原表的Rowid,該操作會導致同步任務運行報錯。
  • 在規格為24 vCPU 192 GiB的DataWorks上運行實時同步任務時,如果非update等操作日志較多,并且速度達到約每秒記錄3~5W條數據的極限速度,則Oracle服務器的單核CPU使用率最高可以達到25%~35%;如果處理update等操作日志,則處理實時同步消息的DataWorks機器可能會存在性能瓶頸,Oracle服務器的單核CPU使用率僅可以達到1%~5%。

操作步驟

  1. 配置白名單。
    將獨享數據資源組所在的VPC網段添加至Oracle的白名單中,操作如下:
    1. 查看并記錄獨享數據資源組所在的VPC網絡。
      1. 登錄DataWorks控制臺
      2. 在左側導航欄,單擊資源組列表
      3. 獨享資源組頁簽下,單擊目標數據集成資源組后的查看信息
      4. 復制對話框中的EIP地址網段至數據庫白名單。查看EIP地址和網段
      5. 獨享資源組頁簽下,單擊目標數據集成資源組后的網絡設置
      6. 專有網絡綁定頁簽,查看交換機網段并將其添加至數據庫的白名單中。查看交換機網段
    2. 將上述步驟中記錄的獨享數據集成資源組的EIP地址和網段添加至Oracle集群的白名單中。
  2. 創建賬號并配置賬號權限。
    您需要規劃一個數據庫的登錄賬戶用于后續執行操作,此賬號需要擁有Oracle的相關操作權限。
    1. 創建賬號。
      操作詳情請參見創建Oracle賬號
    2. 配置權限。
      您可以參考以下命令為賬號添加相關權限。如下執行語句在實際使用時,請替換'同步賬號'為上述創建的賬號。
      grant create session to '同步賬號';  //授權同步賬號登錄數據庫。
      grant connect to '同步賬號';  //授權同步賬號連接數據庫。
      grant select on nls_database_parameters to '同步賬號';  //授權同步賬號查詢數據庫的nls_database_parameters系統配置。
      grant select on all_users to '同步賬號';  //授權同步賬號查詢數據庫中的所有用戶。
      grant select on all_objects to '同步賬號';  //授權同步賬號查詢數據庫中的所有對象。
      grant select on DBA_MVIEWS to '同步賬號';  //授權同步賬號查看數據庫的物化視圖。
      grant select on DBA_MVIEW_LOGS to '同步賬號';  //授權同步賬號查看數據庫的物化視圖日志。
      grant select on DBA_CONSTRAINTS to '同步賬號';  //授權同步賬號查看數據庫所有表的約束信息。
      grant select on DBA_CONS_COLUMNS to '同步賬號';  //授權同步賬號查看數據庫中所有表指定約束中所有列的相關信息。
      grant select on all_tab_cols to '同步賬號';  //授權同步賬號查看數據庫中表、視圖和集群中列的相關信息。
      grant select on sys.obj$ to '同步賬號';  //授權同步賬號查看數據庫中的對象。sys.obj$表是Oracle字典表中的對象基礎表,存放Oracle的所有對象。
      grant select on SYS.COL$ to '同步賬號';  //授權同步賬號查看數據庫表中列的定義信息。SYS.COL$用于保存表中列的定義信息。
      grant select on sys.USER$ to '同步賬號';  //授權同步賬號查看數據庫的系統表。sys.USER$是用戶會話的默認服務。
      grant select on sys.cdef$ to '同步賬號';  //授權同步賬號查看數據庫的系統表。
      grant select on sys.con$ to '同步賬號';  //授權同步賬號查看數據庫的約束信息。sys.con$記錄了Oracle的相關約束信息。
      grant select on all_indexes to '同步賬號';  //授權同步賬號查看數據庫的所有索引。
      grant select on v_$database to '同步賬號';  //授權同步賬號查看數據庫的v_$database視圖。
      grant select on V_$ARCHIVE_DEST to '同步賬號';  //授權同步賬號查看數據庫的V_$ARCHIVE_DEST視圖。
      grant select on v_$log to '同步賬號';  //授權同步賬號查看數據庫的v_$log視圖。v_$log用于顯示控制文件中的日志文件信息。
      grant select on v_$logfile to '同步賬號';  //授權同步賬號查看數據庫的v_$logfile視圖。v_$logfile包含有關Redo日志文件的信息。
      grant select on v_$archived_log to '同步賬號';  //授權同步賬號查看數據庫的v$archived_log視圖。v$archived_log包含有關歸檔日志的相關信息。
      grant select on V_$LOGMNR_CONTENTS to '同步賬號';  //授權同步賬號查看數據庫的V_$LOGMNR_CONTENTS視圖。
      grant select on DUAL to '同步賬號';   //授權同步賬號查看數據庫的DUAL表。DUAL是用來構成select語法規則的虛擬表,Oracle的中DUAL中僅保留一條記錄。
      grant select on v_$parameter to '同步賬號';  //授權同步賬號查看數據庫的v_$parameter視圖。v$parameter是Oracle的動態字典表,保存了數據庫參數的設置值。
      grant select any transaction to '同步賬號';  //授權同步賬號查看數據庫的任意事務。
      grant execute on SYS.DBMS_LOGMNR to '同步賬號';  //授權同步賬號使用數據庫的Logmnr工具。Logmnr工具可以幫助您分析事務,并找回丟失的數據。
      grant alter session to '同步賬號';  //授權同步賬號修改數據庫的連接。
      grant select on dba_objects to '同步賬號';  //授權同步賬號查看數據庫的所有對象。
      grant select on v_$standby_log to '同步賬號';  //授權同步賬號查看數據庫的v_$standby_log視圖。v_$standby_log包含備用庫的歸檔日志。
      grant select on v_$ARCHIVE_GAP to '同步賬號';  //授權同步賬號查詢缺失的歸檔日志。
      如果您涉及使用離線全量同步數據,還需要執行如下命令,授權同步賬號所有表的查詢權限。
      grant select any table to '同步賬號'; 
      Oracle 12c及之后的版本需要執行如下命令,授權同步賬號可以進行日志挖掘。Oracle 12c之前的版本,內置日志挖掘功能,無需執行該命令。
      grant LOGMINING TO '同步賬號';
  3. 開啟歸檔日志、補充日志并切換Redo日志文件。
    您需要進入主庫執行如下操作:
    1. 開啟歸檔日志,SQL語句如下。
      shutdown immediate;
      startup mount;
      alter database archivelog;
      alter database open;
    2. 開啟補充日志。

      您可以根據需要選擇開啟合適的補充日志,SQL語句如下。

      alter database add supplemental log data(primary key) columns; //為數據庫的主鍵列開啟補充日志。
      alter database add supplemental log data(unique) columns; //為數據庫的唯一索引列開啟補充日志。
    3. 切換Redo日志文件。
      開啟補充日志后,您需要多次(一般建議執行5次)執行如下命令,切換Redo日志文件。
      alter system switch logfile;
      說明 多次執行上述命令切換Redo日志文件,是保證當前日志文件被寫滿后可以切換至下一個日志文件。使執行過的操作記錄不會丟失,便于后續恢復數據。
  4. 檢查數據庫的字符編碼。
    您需要在當前使用的數據庫中,執行如下命令檢查數據庫的字符編碼。
    select * from v$nls_parameters where PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
    • v$nls_parameters用于存放數據庫參數的設置值。
    • NLS_CHARACTERSETNLS_NCHAR_CHARACTERSET為數據庫字符集和國家字符集,表明Oracle中兩大類字符型數據的存儲類型。
    當前數據集成同步數據時,僅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK編碼格式。如果數據庫中包含不支持的字符編碼,請進行修改后再執行數據同步。
  5. 檢查數據庫表的數據類型。
    您可以使用查看表的SQL相關語句(SELECT)查詢數據庫表的數據類型。示例查看'tablename'表數據類型的語句如下。
    select COLUMN_NAME,DATA_TYPE from all_tab_columns where TABLE_NAME='tablename'; 
    • COLUMN_NAME:表的列名稱。
    • DATA_TYPE:對應列的數據類型。
    • all_tab_columns:存放數據庫表所有列相關信息的視圖。
    • TABLE_NAME:需要查詢的目標表的名稱。執行上述語句時,請替換'tablename'為實際需要查看的表名稱。
    您也可以執行select * from 'tablename';,查詢目標表的所有信息,獲取數據類型。
    如果表里包含這些字段類型,請將該表從實時同步任務列表中移除,或修改表字段類型后再執行數據同步。

后續步驟

配置完成數據源后,來源數據源、資源實例、去向數據源彼此間已可網絡聯通,且不存在訪問限制。您可將來源數據源和去向數據源添加至DataWorks的數據源列表中,便于后續創建數據同步方案時關聯來源和去向數據源。

添加數據源操作可參見添加數據源