Oracle數(shù)據(jù)源
Oracle數(shù)據(jù)源為您提供讀取和寫入Oracle雙向通道的功能,方便您后續(xù)可以通過向?qū)J胶湍_本模式配置數(shù)據(jù)同步任務(wù)。本文為您介紹DataWorks的Oracle數(shù)據(jù)同步能力支持情況。
支持的版本
離線讀寫
版本 | 離線讀(Oracle Reader) | 離線寫(Oracle Writer) |
Oracle 11.2 or 11gR2 | 支持 | 支持 |
Oracle 12.1 or 12cR1 | 支持 | 支持 |
Oracle 12.2 or 12cR2 | 支持(新版本特性不支持) | 支持(新版本特性不支持) |
Oracle 18.3 | 支持(新版本特性不支持) | 支持(新版本特性不支持) |
Oracle 19.x | 支持(新版本特性不支持) | 支持(新版本特性不支持) |
Oracle 21.1 | 支持(新版本特性不支持) | 支持(新版本特性不支持) |
Oracle Writer插件使用ojdbc6-12.1.1.jar驅(qū)動。
實(shí)時(shí)讀
支持:
11g R2 以上
、12c non cdb
、18c non cdb
、19c non cdb
或19c cdb
版本數(shù)據(jù)庫。不支持:
12c cdb
和18c cdb
版本數(shù)據(jù)庫。
數(shù)據(jù)庫容器CDB(Container Database)是Oracle 12c及之后版本的數(shù)據(jù)庫新特性,用于承載多個(gè)可插拔數(shù)據(jù)庫PDB(Pluggable Database)。
使用限制
當(dāng)前數(shù)據(jù)集成同步數(shù)據(jù)時(shí),僅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK編碼格式。
Oracle單實(shí)例,當(dāng)天實(shí)時(shí)同步最大支持同步500G增量數(shù)據(jù)。
DataWorks的數(shù)據(jù)集成實(shí)時(shí)同步Oracle數(shù)據(jù)是基于Oracle LogMiner日志分析工具實(shí)現(xiàn)的,Oracle僅支持在主庫中為主庫或備庫開啟補(bǔ)充日志。
離線同步支持讀取視圖表。
支持的字段類型
字段類型 | 離線讀(Oracle Reader) | 離線寫(Oracle Writer) | 實(shí)時(shí)讀 |
NUMBER | 支持 | 支持 | 支持 |
BINARY FLOAT | 支持 | 支持 | 支持 |
BINARY DOUBLE | 支持 | 支持 | 支持 |
CHAR | 支持 | 支持 | 支持 |
NCHAR | 支持 | 支持 | 支持 |
VARCHAR2 | 支持 | 支持 | 支持 |
NVARCHAR2 | 支持 | 支持 | 支持 |
DATE | 支持 | 支持 | 支持 |
TIMESTAMP | 支持 | 支持 | 支持 |
TIMESTAMP WITH TIME ZONE | 支持 | 支持 | 不支持 |
TIMESTAMP WITH LOCAL TIME ZONE | 支持 | 支持 | 不支持 |
CLOB | 支持 | 支持 | 支持 |
BLOB | 支持 | 支持 | 支持 |
RAW | 支持 | 支持 | 支持 |
ROWID | 不支持 | 不支持 | 支持 |
UROWID | 不支持 | 不支持 | 支持 |
FLOAT | 支持 | 支持 | 支持 |
INTERVAL DAY TO SECOND | 不支持 | 不支持 | 支持 |
INTERVAL YEAR TO MONTH | 不支持 | 不支持 | 支持 |
BFILE | 不支持 | 不支持 | 不支持 |
LONG | 不支持 | 不支持 | 不支持 |
LONG RAW | 不支持 | 不支持 | 不支持 |
NCLOB | 支持 | 支持 | 不支持 |
STRUCT | 支持 | 支持 | 不支持 |
User-Defined Types | 不支持 | 不支持 | 不支持 |
AnyType | 不支持 | 不支持 | 不支持 |
AnyData | 不支持 | 不支持 | 不支持 |
AnyDataSet | 不支持 | 不支持 | 不支持 |
XmlType | 不支持 | 不支持 | 不支持 |
Spatial Types | 不支持 | 不支持 | 不支持 |
Media Types | 不支持 | 不支持 | 不支持 |
Oracle Reader針對Oracle類型的轉(zhuǎn)換列表,如下所示。
類型分類 | Oracle數(shù)據(jù)類型 |
整數(shù)類 | NUMBER、RAWID、INTEGER、INT和SMALLINT |
浮點(diǎn)類 | NUMERIC、DECIMAL、FLOAT、DOUBLE PRECISIOON和REAL |
字符串類 | LONG、CHAR、NCHAR、VARCHAR、VARCHAR2、NVARCHAR2、CLOB、NCLOB、CHARACTER、CHARACTER VARYING、CHAR VARYING、NATIONAL CHARACTER、NATIONAL CHAR、NATIONAL CHARACTER VARYING、NATIONAL CHAR VARYING和NCHAR VARYING |
日期時(shí)間類 | TIMESTAMP和DATE |
布爾型 | BIT和BOOL |
二進(jìn)制類 | BLOB、BFILE、RAW和LONG RAW |
數(shù)據(jù)同步前準(zhǔn)備:Oracle環(huán)境準(zhǔn)備
在DataWorks上進(jìn)行數(shù)據(jù)同步前,您需要參考本文提前在Oracle側(cè)進(jìn)行數(shù)據(jù)同步環(huán)境準(zhǔn)備,以便在DataWorks上進(jìn)行Oracle數(shù)據(jù)同步任務(wù)配置與執(zhí)行時(shí)服務(wù)正常。以下為您介紹Oracle同步前的相關(guān)環(huán)境準(zhǔn)備。
準(zhǔn)備工作1:確認(rèn)Oracle數(shù)據(jù)庫版本
不同同步場景下支持的Oracle數(shù)據(jù)庫版本不一致,同步前您需要檢查Oracle數(shù)據(jù)庫版本是否為支持的版本。
您可以通過如下任意語句查看Oracle數(shù)據(jù)庫的版本。
語句一:
select * from v$version;
語句二:
select version from v$instance;
如果查看到的Oracle數(shù)據(jù)庫版本為
12c
或18c
,則您需要使用如下語句進(jìn)一步確認(rèn)該數(shù)據(jù)庫是否為cdb
類型的數(shù)據(jù)庫。DataWorks數(shù)據(jù)集成實(shí)時(shí)同步任務(wù)暫不支持使用12c
和18c
版本的cdb
類型的Oracle數(shù)據(jù)庫。select name,cdb,open_mode,con_id from v$database;
準(zhǔn)備工作2:創(chuàng)建賬號并配置賬號權(quán)限
您需要規(guī)劃一個(gè)數(shù)據(jù)庫的登錄賬戶用于后續(xù)執(zhí)行操作,此賬號需要擁有Oracle的相關(guān)操作權(quán)限。
創(chuàng)建賬號。操作詳情請參見創(chuàng)建Oracle賬號。
配置權(quán)限。
您可以參考以下命令為賬號添加相關(guān)權(quán)限。如下執(zhí)行語句在實(shí)際使用時(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檔日志。 grant select on sys.ICOL$ to '同步賬號'; //授權(quán)同步賬號查看數(shù)據(jù)庫中的對象。sys.obj$表是Oracle字典表中的對象基礎(chǔ)表,存放Oracle的所有對象。
如果您涉及使用離線全量同步數(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 '同步賬號';
準(zhǔn)備工作3:開啟歸檔日志、補(bǔ)充日志并切換Redo日志文件
開啟歸檔日志,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)前日志文件被寫滿后可以切換至下一個(gè)日志文件。使執(zhí)行過的操作記錄不會丟失,便于后續(xù)恢復(fù)數(shù)據(jù)。
準(zhǔn)備工作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_CHARACTERSET及NLS_NCHAR_CHARACTERSET為數(shù)據(jù)庫字符集和國家字符集,表明Oracle中兩大類字符型數(shù)據(jù)的存儲類型。
前數(shù)據(jù)集成同步數(shù)據(jù)時(shí),僅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK編碼格式。如果數(shù)據(jù)庫中包含不支持的字符編碼,請進(jìn)行修改后再執(zhí)行數(shù)據(jù)同步。
準(zhǔn)備工作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í)行上述語句時(shí),請?zhí)鎿Q'tablename'為實(shí)際需要查看的表名稱。
您也可以執(zhí)行select * from 'tablename';
,查詢目標(biāo)表的所有信息,獲取數(shù)據(jù)類型。
創(chuàng)建數(shù)據(jù)源
在進(jìn)行數(shù)據(jù)同步任務(wù)開發(fā)時(shí),您需要在DataWorks上創(chuàng)建一個(gè)對應(yīng)的數(shù)據(jù)源,操作流程請參見創(chuàng)建并管理數(shù)據(jù)源,詳細(xì)的配置參數(shù)解釋可在配置界面查看對應(yīng)參數(shù)的文案提示。
數(shù)據(jù)同步任務(wù)開發(fā):Oracle同步流程引導(dǎo)
數(shù)據(jù)同步任務(wù)的配置入口和通用配置流程可參見下文的配置指導(dǎo)。
單表離線同步任務(wù)配置指導(dǎo)
腳本模式配置的全量參數(shù)和腳本Demo請參見下文的附錄:腳本Demo與參數(shù)說明。
單表實(shí)時(shí)同步任務(wù)配置指導(dǎo)
操作流程請參見DataStudio側(cè)實(shí)時(shí)同步任務(wù)配置。
整庫離線、整庫(實(shí)時(shí))全增量、整庫(實(shí)時(shí))分庫分表等整庫級別同步配置指導(dǎo)
操作流程請參見數(shù)據(jù)集成側(cè)同步任務(wù)配置。
常見問題
主備同步數(shù)據(jù)恢復(fù)問題
主備同步問題指Oracle使用主從災(zāi)備,當(dāng)主庫報(bào)錯(cuò)切換至備庫后,備庫從主庫不斷地通過binlog恢復(fù)數(shù)據(jù)。由于主備數(shù)據(jù)同步存在一定的時(shí)間差,在網(wǎng)絡(luò)延遲等特定情況下,會導(dǎo)致備庫同步恢復(fù)的數(shù)據(jù)與主庫有較大差別,從備庫同步的數(shù)據(jù)不是一份當(dāng)前時(shí)間的完整鏡像。
一致性約束
Oracle在數(shù)據(jù)存儲劃分中屬于RDBMS系統(tǒng),對外可以提供強(qiáng)一致性數(shù)據(jù)查詢接口。例如,在一次同步任務(wù)啟動運(yùn)行的過程中,當(dāng)該庫存在其它數(shù)據(jù)寫入方寫入數(shù)據(jù)時(shí),由于數(shù)據(jù)庫本身的快照特性,Oracle Reader不會獲取到寫入的新數(shù)據(jù)。
上述是在Oracle Reader單線程模型下實(shí)現(xiàn)數(shù)據(jù)同步的一致性。Oracle Reader根據(jù)您配置的信息并發(fā)抽取數(shù)據(jù),則不能嚴(yán)格保證數(shù)據(jù)一致性。
當(dāng)Oracle Reader根據(jù)splitPk進(jìn)行數(shù)據(jù)切分后,會先后啟動多個(gè)并發(fā)任務(wù)完成數(shù)據(jù)同步。多個(gè)并發(fā)任務(wù)相互之間不屬于同一個(gè)讀事務(wù),同時(shí)多個(gè)并發(fā)任務(wù)存在時(shí)間間隔。因此該數(shù)據(jù)并不是完整的、一致的數(shù)據(jù)快照信息。
針對多線程的一致性快照需求,目前在技術(shù)上無法實(shí)現(xiàn),只能從工程角度解決。工程化的方式存在取舍,在此提供以下解決思路,您可以根據(jù)自身情況進(jìn)行選擇。
使用單線程同步,即不再進(jìn)行數(shù)據(jù)切片。缺點(diǎn)是速度比較慢,但是能夠很好保證一致性。
關(guān)閉其它數(shù)據(jù)寫入方,保證當(dāng)前數(shù)據(jù)為靜態(tài)數(shù)據(jù)。例如,鎖表、關(guān)閉備庫同步等。缺點(diǎn)是可能影響在線業(yè)務(wù)。
數(shù)據(jù)庫編碼問題
Oracle Reader底層使用JDBC進(jìn)行數(shù)據(jù)抽取,JDBC天然適配各類編碼,并在底層進(jìn)行了編碼轉(zhuǎn)換。因此Oracle Reader無需您指定編碼,可以自動獲取編碼并轉(zhuǎn)碼。
增量數(shù)據(jù)同步的方式
Oracle Reader使用JDBC SELECT語句完成數(shù)據(jù)抽取工作,因此您可以使用
SELECT…WHERE…
進(jìn)行增量數(shù)據(jù)抽取,方式如下:數(shù)據(jù)庫在線應(yīng)用寫入數(shù)據(jù)庫時(shí),填充modify字段為更改時(shí)間戳,包括新增、更新、刪除(邏輯刪除)。對于該類應(yīng)用,Oracle Reader只需要where條件后跟上一同步階段時(shí)間戳即可。
對于新增流水型數(shù)據(jù),Oracle Reader在where條件后跟上一階段最大自增ID即可。
對于業(yè)務(wù)上無字段區(qū)分新增、修改數(shù)據(jù)的情況,Oracle Reader無法進(jìn)行增量數(shù)據(jù)同步,只能同步全量數(shù)據(jù)。
SQL安全性
Oracle Reader為您提供querySql功能,您可以自行實(shí)現(xiàn)SELECT抽取語句。Oracle Reader本身對querySql不進(jìn)行任何安全性校驗(yàn)。
附錄:腳本Demo與參數(shù)說明
離線任務(wù)腳本配置方式
如果您配置離線任務(wù)時(shí)使用腳本模式的方式進(jìn)行配置,您需要按照統(tǒng)一的腳本格式要求,在任務(wù)腳本中編寫相應(yīng)的參數(shù),詳情請參見通過腳本模式配置離線同步任務(wù),以下為您介紹腳本模式下數(shù)據(jù)源的參數(shù)配置詳情。
Reader腳本Demo
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "oracle",
"parameter": {
"selectedDatabase": "AUTOTEST",
"indexes": [],
"datasource": "oracle_test",
"envType": 0,
"useSpecialSecret": true,
"column": [
"id"
],
"where": "",
"splitPk": "id",
"encoding": "UTF-8",
"table": "AUTOTEST.table01"
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "odps",
"parameter": {
},
"name": "Writer",
"category": "writer"
},
{
"name": "Processor",
"stepType": null,
"category": "processor",
"copies": 1,
"parameter": {
"nodes": [],
"edges": [],
"groups": [],
"version": "2.0"
}
}
],
"setting": {
"executeMode": null,
"errorLimit": {
"record": ""
},
"speed": {
"concurrent": 2,
"throttle": false
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Reader腳本參數(shù)
參數(shù) | 描述 | 是否必選 | 默認(rèn)值 |
datasource | 數(shù)據(jù)源名稱,腳本模式支持添加數(shù)據(jù)源,該配置項(xiàng)輸入的內(nèi)容必須和添加的數(shù)據(jù)源名稱保持一致。 | 是 | 無 |
selectedDatabase | 待同步數(shù)據(jù)庫的schema。 | 是 | 無 |
table | 選取的需要同步的表名稱,格式需要配置為 說明 例如,selectedDatabase為 | 是 | 無 |
column | 所配置的表中需要同步的列名集合,使用JSON的數(shù)組描述字段信息。默認(rèn)使用所有列配置,例如["*"]。
| 是 | 無 |
splitFactor | 切分因子,可以配置同步數(shù)據(jù)的切分份數(shù),如果配置了多并發(fā),會按照并發(fā)數(shù) * splitFactor份來切分。例如,并發(fā)數(shù)=5,splitFactor=5,則會按照5*5=25份來切分,在5個(gè)并發(fā)線程上執(zhí)行。 說明 建議取值范圍:1~100,過大會導(dǎo)致內(nèi)存溢出。 | 否 | 5 |
splitMode | 切分模式,包括:
說明 splitMode參數(shù)需要與splitPk參數(shù)配合使用。
| 否 | randomSampling |
splitPk | Oracle Reader進(jìn)行數(shù)據(jù)抽取時(shí),如果指定splitPk,表示您希望使用splitPk代表的字段進(jìn)行數(shù)據(jù)分片,數(shù)據(jù)同步因此會啟動并發(fā)任務(wù)進(jìn)行數(shù)據(jù)同步,可以提高數(shù)據(jù)同步的效能。
說明 splitPK字段在視圖的情況下不能使用ROWID。 | 否 | 無 |
where | 篩選條件,Oracle Reader根據(jù)指定的column、table和where條件拼接SQL,并根據(jù)該SQL進(jìn)行數(shù)據(jù)抽取。例如,在測試時(shí)指定where條件為row_number()。
| 否 | 無 |
querySql(高級模式,向?qū)J讲恢С郑?/p> | 在部分業(yè)務(wù)場景中,where配置項(xiàng)不足以描述所篩選的條件,您可以通過該配置來自定義篩選SQL。當(dāng)您配置該項(xiàng)后,數(shù)據(jù)同步系統(tǒng)就會忽略table和column等配置,直接使用該配置項(xiàng)的內(nèi)容對數(shù)據(jù)進(jìn)行篩選。例如,需要進(jìn)行多表Join后同步數(shù)據(jù),則使用 | 否 | 無 |
fetchSize | 該配置項(xiàng)定義了插件和數(shù)據(jù)庫服務(wù)器端每次批量數(shù)據(jù)獲取條數(shù),該值決定了數(shù)據(jù)同步系統(tǒng)和服務(wù)器端的網(wǎng)絡(luò)交互次數(shù),能夠較大的提升數(shù)據(jù)抽取性能。 說明 fetchSize值過大(>2048)可能造成數(shù)據(jù)同步進(jìn)程OOM。 | 否 | 1,024 |
Writer腳本Demo
{
"type":"job",
"version":"2.0",//版本號。
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"oracle",//插件名。
"parameter":{
"postSql":[],//執(zhí)行數(shù)據(jù)同步任務(wù)之后執(zhí)行的SQL語句。
"datasource":"",
"session":[],//數(shù)據(jù)庫連接會話參數(shù)。
"column":[//字段。
"id",
"name"
],
"encoding":"UTF-8",//編碼格式。
"batchSize":1024,//一次性批量提交的記錄數(shù)大小。
"table":"",//表名。
"preSql":[]//執(zhí)行數(shù)據(jù)同步任務(wù)之前執(zhí)行的SQL語句。
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"http://錯(cuò)誤記錄數(shù)。
},
"speed":{
"throttle":true,//當(dāng)throttle值為false時(shí),mbps參數(shù)不生效,表示不限流;當(dāng)throttle值為true時(shí),表示限流。
"concurrent":1, //作業(yè)并發(fā)數(shù)。
"mbps":"12"http://限流,此處1mbps = 1MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Writer腳本參數(shù)
參數(shù) | 描述 | 是否必選 | 默認(rèn)值 |
datasource | 數(shù)據(jù)源名稱,腳本模式支持添加數(shù)據(jù)源,此配置項(xiàng)填寫的內(nèi)容必須要與添加的數(shù)據(jù)源名稱保持一致。 | 是 | 無 |
table | 目標(biāo)表名稱,如果表的schema信息和上述配置username不一致,請使用schema.table的格式填寫table信息。 | 是 | 無 |
writeMode | 選擇導(dǎo)入模式,僅支持insert into。當(dāng)主鍵或唯一性索引沖突時(shí),會寫不進(jìn)去沖突的行,以臟數(shù)據(jù)的形式體現(xiàn)。 | 否 | insert into |
column | 目標(biāo)表需要寫入數(shù)據(jù)的字段,字段之間用英文逗號分隔。例如 | 是 | 無 |
preSql | 執(zhí)行數(shù)據(jù)同步任務(wù)之前率先執(zhí)行的SQL語句。目前向?qū)J絻H允許執(zhí)行一條SQL語句,腳本模式可以支持多條SQL語句,例如清除舊數(shù)據(jù)。 | 否 | 無 |
postSql | 執(zhí)行數(shù)據(jù)同步任務(wù)之后執(zhí)行的SQL語句。目前向?qū)J絻H允許執(zhí)行一條SQL語句,腳本模式可以支持多條SQL語句,例如加上某一個(gè)時(shí)間戳。 | 否 | 無 |
batchSize | 一次性批量提交的記錄數(shù)大小,該值可以極大減少數(shù)據(jù)同步系統(tǒng)與Oracle的網(wǎng)絡(luò)交互次數(shù),并提升整體吞吐量。如果該值設(shè)置過大,會導(dǎo)致數(shù)據(jù)同步運(yùn)行進(jìn)程OOM異常。 | 否 | 1,024 |