同步Oracle的數(shù)據(jù)至Hologres時,您需要參考本文,在數(shù)據(jù)源中完成網(wǎng)絡(luò)、白名單及權(quán)限等相關(guān)配置,為后續(xù)執(zhí)行數(shù)據(jù)同步方案做好網(wǎng)絡(luò)環(huán)境及賬號權(quán)限的準(zhǔn)備。

前提條件

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

背景信息

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

    您需要規(guī)劃一個可訪問數(shù)據(jù)源的賬號,用于后續(xù)數(shù)據(jù)集成過程中訪問數(shù)據(jù)源并進(jìn)行數(shù)據(jù)提取、寫入的同步操作。

  • 查看當(dāng)前使用的數(shù)據(jù)庫版本是否為DataWorks數(shù)據(jù)集成實(shí)時同步任務(wù)所支持的版本。

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

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

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

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

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

  • 檢查是否包含不支持的數(shù)據(jù)類型

    您需要確保Oracle中不能包含數(shù)據(jù)集成不支持的數(shù)據(jù)類型,防止同步數(shù)據(jù)失敗。當(dāng)前數(shù)據(jù)集成進(jìn)行實(shí)時同步時,不支持LONG、BFILE、LONG RAW及NCLOB數(shù)據(jù)類型 。

使用限制

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

注意事項(xiàng)

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

操作步驟

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

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

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

后續(xù)步驟

配置完成數(shù)據(jù)源后,來源數(shù)據(jù)源、資源實(shí)例、去向數(shù)據(jù)源彼此間已可網(wǎng)絡(luò)聯(lián)通,且不存在訪問限制。您可將來源數(shù)據(jù)源和去向數(shù)據(jù)源添加至DataWorks的數(shù)據(jù)源列表中,便于后續(xù)創(chuàng)建數(shù)據(jù)同步方案時關(guān)聯(lián)來源和去向數(shù)據(jù)源。

添加數(shù)據(jù)源操作可參見添加數(shù)據(jù)源