同步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)備。
前提條件
- 準(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ò)打通。
背景信息
- 網(wǎng)絡(luò)白名單以下以使用同一VPC網(wǎng)絡(luò)環(huán)境為例,您需要將數(shù)據(jù)集成資源組所在的VPC網(wǎng)段添加至白名單中,保障數(shù)據(jù)集成資源組可訪問數(shù)據(jù)源。
- 賬號權(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的
10g
、11g
、12c non cdb
、18c non cdb
或19c non cdb
版本數(shù)據(jù)庫,不支持配置為Oracle的12c cdb
、18c cdb
及19c cdb
版本數(shù)據(jù)庫。數(shù)據(jù)庫容器CDB(Container Database)是Oracle 12c及之后版本的數(shù)據(jù)庫新特性,用于承載多個可插拔數(shù)據(jù)庫PDB(Pluggable Database)。- 您可以通過如下任意語句查看Oracle數(shù)據(jù)庫的版本。
- 語句一:
select * from v$version;
- 語句二:
select version from v$instance;
- 語句一:
- 如果查看到的Oracle數(shù)據(jù)庫版本為
12c
、18c
或19c
,則您需要使用如下語句進(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í)行。 - 您可以通過如下任意語句查看Oracle數(shù)據(jù)庫的版本。
- 日志權(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_pk
及supplemental_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的
10g
、11g
、12c non cdb
、18c non cdb
或19c non cdb
版本數(shù)據(jù)庫,不支持配置為Oracle的12c cdb
、18c cdb
及19c 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%。
操作步驟
- 配置白名單。將獨(dú)享數(shù)據(jù)資源組所在的VPC網(wǎng)段添加至Oracle的白名單中,操作如下:
- 創(chuàng)建賬號并配置賬號權(quán)限。您需要規(guī)劃一個數(shù)據(jù)庫的登錄賬戶用于后續(xù)執(zhí)行操作,此賬號需要擁有Oracle的相關(guān)操作權(quán)限。
- 開啟歸檔日志、補(bǔ)充日志并切換Redo日志文件。您需要進(jìn)入主庫執(zhí)行如下操作:
- 開啟歸檔日志,SQL語句如下。
shutdown immediate; startup mount; alter database archivelog; alter database open;
- 開啟補(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ǔ)充日志。
- 切換Redo日志文件。開啟補(bǔ)充日志后,您需要多次(一般建議執(zhí)行5次)執(zhí)行如下命令,切換Redo日志文件。
alter system switch logfile;
說明 多次執(zhí)行上述命令切換Redo日志文件,是保證當(dāng)前日志文件被寫滿后可以切換至下一個日志文件。使執(zhí)行過的操作記錄不會丟失,便于后續(xù)恢復(fù)數(shù)據(jù)。
- 開啟歸檔日志,SQL語句如下。
- 檢查數(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_CHARACTERSET及NLS_NCHAR_CHARACTERSET為數(shù)據(jù)庫字符集和國家字符集,表明Oracle中兩大類字符型數(shù)據(jù)的存儲類型。
當(dāng)前數(shù)據(jù)集成同步數(shù)據(jù)時,僅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK編碼格式。如果數(shù)據(jù)庫中包含不支持的字符編碼,請進(jìn)行修改后再執(zhí)行數(shù)據(jù)同步。 - 檢查數(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í)際需要查看的表名稱。
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ù)源。