同步Oracle的資料至Hologres時,您需要參考本文,在資料來源中完成網路、白名單及許可權等相關配置,為後續執行資料同步方案做好網路環境及帳號許可權的準備。
前提條件
- 準備資料來源:已購買來來源資料源Oracle、去向資料來源Hologres。
- 資源規劃與準備:已購買獨享Data Integration資源群組,並完成資源配置。詳情可參見資源規劃與配置。
- 網路環境評估與規劃:進行Data Integration前,您需根據業務情況,打通資料來源、獨享Data Integration資源群組之間的網路,網路聯通後參考本文進行交換器、白名單等網路環境下的訪問配置。
- 如果資料來源和獨享Data Integration資源群組均處於同地區的同一VPC網路中,資料來源與資源群組間的網路天然聯通。
- 如果資料來源和獨享Data Integration資源群組均處於不同的網路環境中,您需要通過VPN網關等方式,將資料來源與資源群組間的網路打通。
背景資訊
- 網路白名單以下以使用同一VPC網路環境為例,您需要將Data Integration資源群組所在的VPC網段添加至白名單中,保障Data Integration資源群組可訪問資料來源。
- 帳號許可權
您需要規劃一個可訪問資料來源的帳號,用於後續Data Integration過程中訪問資料來源並進行資料提取、寫入的同步操作。
- 查看當前使用的資料庫版本是否為DataWorksData Integration即時同步任務所支援的版本。
DataWorks的Data Integration即時同步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
類型的資料庫。DataWorksData Integration即時同步任務暫不支援使用cdb
類型的Oracle資料庫。select name,cdb,open_mode,con_id from v$database;
說明 如果當前使用的資料庫版本不是DataWorksData Integration即時同步任務支援的Oracle資料庫版本,請儘快更換為Data Integration即時同步任務支援的Oracle資料庫版本,否則會導致Data Integration任務無法執行。 - 您可以通過如下任意語句查看Oracle資料庫的版本。
- 日誌許可權來來源資料源為Oracle時,您需要開啟資料庫層級的歸檔日誌、Redo日誌及補充日誌。
- 歸檔日誌:Oracle通過歸檔日誌儲存所有的重做記錄,用於在資料庫出現故障時完全恢複資料庫。
- Redo日誌:Oracle通過Redo日誌來保證資料庫的事務可以被重新執行,從而使得在故障(例如斷電)之後,資料可以被恢複,因此您需要為資料庫開啟並切換Redo日誌。
- 補充日誌:補充日誌是對Redo日誌中資訊的補充。在Oracle中,Redo日誌用於記錄被修改的欄位的值,而補充日誌是對Redo日誌中變更記錄的補充資訊,可以確保Oracle的Redo日誌包含描述所有資料更改的完整資訊,以便在進行資料恢複、資料同步等操作時,可以追溯到完整的語句及相關變更。Oracle資料庫的某些功能要求啟用補充日誌才能正常或更好的工作,因此您需要為資料庫開啟補充日誌。
例如,如果未啟用補充日誌,執行UPDATE命令後,Redo日誌中只會記錄通過UPDATE命令更改後的欄位值,啟用補充日誌後,則Redo日誌中會記錄被修改欄位,修改前的值、修改後的值以及修改目標欄位的條件值。當資料庫發生故障(例如斷電)時,您可以基於此修改資訊恢複資料。
使用Data Integration時推薦開啟主鍵列或唯一索引列補充日誌。- 開啟主鍵列的補充日誌後,如果資料庫有任何更新,則組成主鍵的所有列都會被記錄在日誌中。
- 開啟唯一索引列的補充日誌後,如果組成唯一鍵或位元影像索引的任何列被修改,則組成該唯一鍵或位元影像索引的列都會被記錄在日誌中。
DataWorksData Integration即時同步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中不能包含Data Integration不支援的字元編碼格式,防止同步資料失敗。當前Data Integration同步資料時,僅支援UTF8、AL32UTF8、AL16UTF16及ZHS16GBK編碼格式。
- 檢查是否包含不支援的資料類型
您需要確保Oracle中不能包含Data Integration不支援的資料類型,防止同步資料失敗。當前Data Integration進行即時同步時,不支援LONG、BFILE、LONG RAW及NCLOB資料類型 。
使用限制
- Oracle僅支援在主庫中為主庫或備庫開啟補充日誌。
- 當前Data Integration同步資料時,僅支援UTF8、AL32UTF8、AL16UTF16及ZHS16GBK編碼格式。
- 當前Data Integration進行即時同步時,不支援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)。
注意事項
- DataWorksData Integration即時同步任務,目前對於Oracle主庫支援訂閱聯機重做日誌(Online Redo),對於Oracle備庫僅支援訂閱歸檔日誌。因此,對於時效性要求比較高的即時同步任務,建議訂閱主庫的即時增量變更。訂閱Oracle備庫時,Oracle日誌的產生到可以被擷取的最短延遲時間取決於Oracle的自動切換歸檔日誌的時間,不能保證時效性。
- Oracle資料庫的歸檔日誌建議保留3天。當寫入大批量資料至Oracle資料庫時,即時同步資料的速度可能會慢於日誌產生的速度,方便在同步任務出現問題時,為追溯資料預留足夠的時間。您可以通過分析歸檔日誌排查問題並恢複資料。
- DataWorksData Integration即時同步任務,不支援對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的白名單中,操作如下:
- 查看並記錄獨享資料資源群組所在的VPC網路。
- 登入DataWorks控制台。
- 在左側導覽列,單擊資源群組列表。
- 在獨享資源群組頁簽下,單擊目標Data Integration資源群組後的查看資訊。
- 複製對話方塊中的EIP地址和網段至資料庫白名單。
- 在獨享資源群組頁簽下,單擊目標Data Integration資源群組後的網路設定。
- 在專用網路綁定頁簽,查看交換器網段並將其添加至資料庫的白名單中。
- 將上述步驟中記錄的獨享Data Integration資源群組的EIP地址和網段添加至Oracle叢集的白名單中。
- 查看並記錄獨享資料資源群組所在的VPC網路。
- 建立帳號並配置帳號許可權。您需要規劃一個資料庫的登入賬戶用於後續執行操作,此帳號需要擁有Oracle的相關操作許可權。
- 建立帳號。操作詳情請參見建立Oracle帳號。
- 配置許可權。您可以參考以下命令為帳號添加相關許可權。如下執行語句在實際使用時,請替換
'同步帳號'
為上述建立的帳號。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 '同步帳號';
- 建立帳號。
- 開啟歸檔日誌、補充日誌並切換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中兩大類字元型資料的儲存類型。
當前Data Integration同步資料時,僅支援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';
,查詢目標表的所有資訊,擷取資料類型。當前Data Integration進行即時同步時,不支援LONG、BFILE、LONG RAW及NCLOB資料類型 。如果表裡包含這些欄位類型,請將該表從即時同步工作清單中移除,或修改表欄位類型後再執行資料同步。
後續步驟
配置完成資料來源後,來來源資料源、資源執行個體、去向資料來源彼此間已可網路聯通,且不存在訪問限制。您可將來來源資料源和去向資料來源添加至DataWorks的資料來源列表中,便於後續建立資料同步方案時關聯來源和去向資料來源。
添加資料來源操作可參見添加資料來源。