實時同步Oracle的數據至Hologres時,來源數據源為Oracle,去向數據源為Hologres,執行同步任務前,您需要參考本文在數據源中配置好網絡、白名單等配置,為后續的數據同步做好網絡環境和賬號權限的準備。
前提條件
- 準備數據源:已購買來源數據源Oracle、去向數據源Hologres。
- 資源規劃與準備:已購買獨享數據集成資源組,并完成資源配置。詳情可參見資源規劃與配置。
- 網絡環境評估與規劃:進行數據集成前,您需根據業務情況,打通數據源、獨享數據集成資源組之間的網絡,網絡聯通后參考本文進行交換機、白名單等網絡環境下的訪問配置。
- 如果數據源和獨享數據集成資源組均處于同地域的同一VPC網絡中,數據源與資源組間的網絡天然聯通。
- 如果數據源和獨享數據集成資源組均處于不同的網絡環境中,您需要通過VPN網關等方式,將數據源與資源組間的網絡打通。
背景信息
- 網絡白名單以下以使用同一VPC網絡環境為例,您需要將數據集成資源組所在的VPC網段添加至白名單中,保障數據集成資源組可訪問數據源。
- 賬號權限
您需要規劃一個可訪問數據源的賬號,用于后續數據集成過程中訪問數據源并進行數據提取、寫入的同步操作。
- 查看當前使用的數據庫版本是否為DataWorks數據集成實時同步任務所支持的版本。
DataWorks的數據集成實時同步Oracle數據是基于Oracle Logminer日志分析工具實現的。實時同步Oracle數據目前僅支持配置Oracle數據源為Oracle的
10g
、11g
、12c non cdb
、18c non cdb
或19c non cdb
版本數據庫,不支持配置為Oracle的12c cdb
、18c cdb
及19c cdb
版本數據庫。數據庫容器CDB(Container Database)是Oracle 12c及之后版本的數據庫新特性,用于承載多個可插拔數據庫PDB(Pluggable Database)。- 您可以通過如下任意語句查看Oracle數據庫的版本。
- 語句一:
select * from v$version;
- 語句二:
select version from v$instance;
- 語句一:
- 如果查看到的Oracle數據庫版本為
12c
、18c
或19c
,則您需要使用如下語句進一步確認該數據庫是否為cdb
類型的數據庫。DataWorks數據集成實時同步任務暫不支持使用cdb
類型的Oracle數據庫。select name,cdb,open_mode,con_id from v$database;
說明 如果當前使用的數據庫版本不是DataWorks數據集成實時同步任務支持的Oracle數據庫版本,請盡快更換為數據集成實時同步任務支持的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_pk
及supplemental_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的
10g
、11g
、12c non cdb
、18c non cdb
或19c non cdb
版本數據庫,不支持配置為Oracle的12c cdb
、18c cdb
及19c 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%。
操作步驟
- 配置白名單。將獨享數據資源組所在的VPC網段添加至Oracle的白名單中,操作如下:
- 創建賬號并配置賬號權限。您需要規劃一個數據庫的登錄賬戶用于后續執行操作,此賬號需要擁有Oracle的相關操作權限。
- 開啟歸檔日志、補充日志并切換Redo日志文件。您需要進入主庫執行如下操作:
- 開啟歸檔日志,SQL語句如下。
shutdown immediate; startup mount; alter database archivelog; alter database open;
- 開啟補充日志。
您可以根據需要選擇開啟合適的補充日志,SQL語句如下。
alter database add supplemental log data(primary key) columns; //為數據庫的主鍵列開啟補充日志。 alter database add supplemental log data(unique) columns; //為數據庫的唯一索引列開啟補充日志。
- 切換Redo日志文件。開啟補充日志后,您需要多次(一般建議執行5次)執行如下命令,切換Redo日志文件。
alter system switch logfile;
說明 多次執行上述命令切換Redo日志文件,是保證當前日志文件被寫滿后可以切換至下一個日志文件。使執行過的操作記錄不會丟失,便于后續恢復數據。
- 開啟歸檔日志,SQL語句如下。
- 檢查數據庫的字符編碼。您需要在當前使用的數據庫中,執行如下命令檢查數據庫的字符編碼。
select * from v$nls_parameters where PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
- v$nls_parameters用于存放數據庫參數的設置值。
- NLS_CHARACTERSET及NLS_NCHAR_CHARACTERSET為數據庫字符集和國家字符集,表明Oracle中兩大類字符型數據的存儲類型。
當前數據集成同步數據時,僅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK編碼格式。如果數據庫中包含不支持的字符編碼,請進行修改后再執行數據同步。 - 檢查數據庫表的數據類型。您可以使用查看表的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的數據源列表中,便于后續創建數據同步方案時關聯來源和去向數據源。
添加數據源操作可參見添加數據源。