日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Oracle數據源

Oracle數據源為您提供讀取和寫入Oracle雙向通道的功能,方便您后續可以通過向導模式和腳本模式配置數據同步任務。本文為您介紹DataWorks的Oracle數據同步能力支持情況。

支持的版本

離線讀寫

版本

離線讀(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驅動。

實時讀

  • 支持:

    11g R2 以上12c non cdb18c non cdb19c non cdb19c cdb版本數據庫。

  • 不支持:

    12c cdb18c cdb版本數據庫。

說明

數據庫容器CDB(Container Database)是Oracle 12c及之后版本的數據庫新特性,用于承載多個可插拔數據庫PDB(Pluggable Database)。

使用限制

  • 當前數據集成同步數據時,僅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK編碼格式。

  • Oracle單實例,當天實時同步最大支持同步500G增量數據。

  • DataWorks的數據集成實時同步Oracle數據是基于Oracle LogMiner日志分析工具實現的,Oracle僅支持在主庫中為主庫或備庫開啟補充日志。

  • 離線同步支持讀取視圖表。

支持的字段類型

字段類型

離線讀(Oracle Reader)

離線寫(Oracle Writer)

實時讀

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類型的轉換列表,如下所示。

類型分類

Oracle數據類型

整數類

NUMBER、RAWID、INTEGER、INT和SMALLINT

浮點類

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

日期時間類

TIMESTAMP和DATE

布爾型

BIT和BOOL

二進制類

BLOB、BFILE、RAW和LONG RAW

數據同步前準備:Oracle環境準備

在DataWorks上進行數據同步前,您需要參考本文提前在Oracle側進行數據同步環境準備,以便在DataWorks上進行Oracle數據同步任務配置與執行時服務正常。以下為您介紹Oracle同步前的相關環境準備。

準備工作1:確認Oracle數據庫版本

不同同步場景下支持的Oracle數據庫版本不一致,同步前您需要檢查Oracle數據庫版本是否為支持的版本。

  1. 您可以通過如下任意語句查看Oracle數據庫的版本。

    • 語句一:

      select * from v$version;
    • 語句二:

      select version from v$instance;
  2. 如果查看到的Oracle數據庫版本為12c18c,則您需要使用如下語句進一步確認該數據庫是否為cdb類型的數據庫。DataWorks數據集成實時同步任務暫不支持使用12c18c版本的cdb類型的Oracle數據庫。

    select name,cdb,open_mode,con_id from v$database;

準備工作2:創建賬號并配置賬號權限

您需要規劃一個數據庫的登錄賬戶用于后續執行操作,此賬號需要擁有Oracle的相關操作權限。

  1. 創建賬號。操作詳情請參見創建Oracle賬號

  2. 配置權限。

    您可以參考以下命令為賬號添加相關權限。如下執行語句在實際使用時,請替換'同步賬號'為上述創建的賬號。

    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 on sys.ICOL$ to '同步賬號';  //授權同步賬號查看數據庫中的對象。sys.obj$表是Oracle字典表中的對象基礎表,存放Oracle的所有對象。

    如果您涉及使用離線全量同步數據,還需要執行如下命令,授權同步賬號所有表的查詢權限。

    grant select any table to '同步賬號'; 

    Oracle 12c及之后的版本需要執行如下命令,授權同步賬號可以進行日志挖掘。Oracle 12c之前的版本,內置日志挖掘功能,無需執行該命令。

    grant LOGMINING TO '同步賬號';

準備工作3:開啟歸檔日志、補充日志并切換Redo日志文件

  1. 開啟歸檔日志,SQL語句如下。

    shutdown immediate;
    startup mount;
    alter database archivelog;
    alter database open;
  2. 開啟補充日志。

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

    alter database add supplemental log data(primary key) columns; //為數據庫的主鍵列開啟補充日志。
    alter database add supplemental log data(unique) columns; //為數據庫的唯一索引列開啟補充日志。
  3. 切換Redo日志文件。

    開啟補充日志后,您需要多次(一般建議執行5次)執行如下命令,切換Redo日志文件。

    alter system switch logfile;
    說明

    多次執行上述命令切換Redo日志文件,是保證當前日志文件被寫滿后可以切換至下一個日志文件。使執行過的操作記錄不會丟失,便于后續恢復數據。

準備工作4:檢查數據庫的字符編碼

您需要在當前使用的數據庫中,執行如下命令檢查數據庫的字符編碼。

select * from v$nls_parameters where PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
  • v$nls_parameters用于存放數據庫參數的設置值。

  • NLS_CHARACTERSETNLS_NCHAR_CHARACTERSET為數據庫字符集和國家字符集,表明Oracle中兩大類字符型數據的存儲類型。

說明

前數據集成同步數據時,僅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK編碼格式。如果數據庫中包含不支持的字符編碼,請進行修改后再執行數據同步。

準備工作5:檢查數據庫表的數據類型

您可以使用查看表的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上創建一個對應的數據源,操作流程請參見創建并管理數據源詳細的配置參數解釋可在配置界面查看對應參數的文案提示

數據同步任務開發:Oracle同步流程引導

數據同步任務的配置入口和通用配置流程可參見下文的配置指導。

單表離線同步任務配置指導

單表實時同步任務配置指導

操作流程請參見DataStudio側實時同步任務配置

整庫離線、整庫(實時)全增量、整庫(實時)分庫分表等整庫級別同步配置指導

操作流程請參見數據集成側同步任務配置

常見問題

  • 實時同步Oracle、PolarDB、MySQL任務重復報錯

  • 主備同步數據恢復問題

    主備同步問題指Oracle使用主從災備,當主庫報錯切換至備庫后,備庫從主庫不斷地通過binlog恢復數據。由于主備數據同步存在一定的時間差,在網絡延遲等特定情況下,會導致備庫同步恢復的數據與主庫有較大差別,從備庫同步的數據不是一份當前時間的完整鏡像。

  • 一致性約束

    Oracle在數據存儲劃分中屬于RDBMS系統,對外可以提供強一致性數據查詢接口。例如,在一次同步任務啟動運行的過程中,當該庫存在其它數據寫入方寫入數據時,由于數據庫本身的快照特性,Oracle Reader不會獲取到寫入的新數據。

    上述是在Oracle Reader單線程模型下實現數據同步的一致性。Oracle Reader根據您配置的信息并發抽取數據,則不能嚴格保證數據一致性。

    當Oracle Reader根據splitPk進行數據切分后,會先后啟動多個并發任務完成數據同步。多個并發任務相互之間不屬于同一個讀事務,同時多個并發任務存在時間間隔。因此該數據并不是完整的、一致的數據快照信息。

    針對多線程的一致性快照需求,目前在技術上無法實現,只能從工程角度解決。工程化的方式存在取舍,在此提供以下解決思路,您可以根據自身情況進行選擇。

    • 使用單線程同步,即不再進行數據切片。缺點是速度比較慢,但是能夠很好保證一致性。

    • 關閉其它數據寫入方,保證當前數據為靜態數據。例如,鎖表、關閉備庫同步等。缺點是可能影響在線業務。

  • 數據庫編碼問題

    Oracle Reader底層使用JDBC進行數據抽取,JDBC天然適配各類編碼,并在底層進行了編碼轉換。因此Oracle Reader無需您指定編碼,可以自動獲取編碼并轉碼。

  • 增量數據同步的方式

    Oracle Reader使用JDBC SELECT語句完成數據抽取工作,因此您可以使用SELECT…WHERE…進行增量數據抽取,方式如下:

    • 數據庫在線應用寫入數據庫時,填充modify字段為更改時間戳,包括新增、更新、刪除(邏輯刪除)。對于該類應用,Oracle Reader只需要where條件后跟上一同步階段時間戳即可。

    • 對于新增流水型數據,Oracle Reader在where條件后跟上一階段最大自增ID即可。

    對于業務上無字段區分新增、修改數據的情況,Oracle Reader無法進行增量數據同步,只能同步全量數據。

  • SQL安全性

    Oracle Reader為您提供querySql功能,您可以自行實現SELECT抽取語句。Oracle Reader本身對querySql不進行任何安全性校驗。

附錄:腳本Demo與參數說明

離線任務腳本配置方式

如果您配置離線任務時使用腳本模式的方式進行配置,您需要按照統一的腳本格式要求,在任務腳本中編寫相應的參數,詳情請參見通過腳本模式配置離線同步任務,以下為您介紹腳本模式下數據源的參數配置詳情。

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腳本參數

參數

描述

是否必選

默認值

datasource

數據源名稱,腳本模式支持添加數據源,該配置項輸入的內容必須和添加的數據源名稱保持一致。

selectedDatabase

待同步數據庫的schema。

table

選取的需要同步的表名稱,格式需要配置為schema.tableName

說明

例如,selectedDatabaseAUTOTEST,表名稱為table01,則table需配置為AUTOTEST.table01

column

所配置的表中需要同步的列名集合,使用JSON的數組描述字段信息。默認使用所有列配置,例如["*"]

  • 支持列裁剪,即可以導出部分列。

  • 支持列換序,即可以不根據表Schema信息的順序導出列。

  • 支持常量配置,您需要按照JSON格式進行配置。

    ["id", "1", "'mingya.wmy'", "null", "to_char(a + 1)", "2.3" , "true"]
    • id為普通列名。

    • 1為整型數字常量。

    • 'mingya.wmy'為字符串常量(注意需要加上一對單引號)。

    • null為空指針。

    • to_char(a + 1)為表達式。

    • 2.3為浮點數。

    • true為布爾值。

  • column必須顯示填寫,不允許為空。

splitFactor

切分因子,可以配置同步數據的切分份數,如果配置了多并發,會按照并發數 * splitFactor份來切分。例如,并發數=5,splitFactor=5,則會按照5*5=25份來切分,在5個并發線程上執行。

說明

建議取值范圍:1~100,過大會導致內存溢出。

5

splitMode

切分模式,包括:

  • averageInterval:平均采樣,根據splitPK找到最大值和最小值,然后按照切分數目平均切分。

  • randomSampling:隨機采樣,在所有數據中隨機找到一定數目作為切分點。

說明

splitMode參數需要與splitPk參數配合使用。

  • 當splitPk為數值類型時,splitMode需要配置為averageInterval

  • 當splitPk為字符串類型時,splitMode需要配置為randomSampling

randomSampling

splitPk

Oracle Reader進行數據抽取時,如果指定splitPk,表示您希望使用splitPk代表的字段進行數據分片,數據同步因此會啟動并發任務進行數據同步,可以提高數據同步的效能。

  • 推薦使用表主鍵作為splitPk,因為表主鍵通常情況下比較均勻,因此切分出來的分片也不容易出現數據熱點。

  • splitPk僅支持配置為數值類型或字符串類型,并且splitMode參數需要與splitPk參數配合使用。

    • 當splitPk為數值類型時,splitMode需要配置為averageInterval

    • 當splitPk為字符串類型時,splitMode需要配置為randomSampling

  • 如果不填寫splitPk,將視作您不對單表進行切分,Oracle Reader使用單通道同步全量數據。

說明

splitPK字段在視圖的情況下不能使用ROWID。

where

篩選條件,Oracle Reader根據指定的columntablewhere條件拼接SQL,并根據該SQL進行數據抽取。例如,在測試時指定where條件為row_number()

  • where條件可以有效地進行業務增量同步 。

  • where條件不配置或為空時,將視作全表同步數據 。

querySql(高級模式,向導模式不支持)

在部分業務場景中,where配置項不足以描述所篩選的條件,您可以通過該配置來自定義篩選SQL。當您配置該項后,數據同步系統就會忽略tablecolumn等配置,直接使用該配置項的內容對數據進行篩選。例如,需要進行多表Join后同步數據,則使用select a,b from table_a join table_b on table_a.id = table_b.id。當您配置querySql時,Oracle Reader直接忽略tablecolumnwhere條件的配置。

fetchSize

該配置項定義了插件和數據庫服務器端每次批量數據獲取條數,該值決定了數據同步系統和服務器端的網絡交互次數,能夠較大的提升數據抽取性能。

說明

fetchSize值過大(>2048)可能造成數據同步進程OOM。

1,024

Writer腳本Demo

{
    "type":"job",
    "version":"2.0",//版本號。
    "steps":[
        { 
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"oracle",//插件名。
            "parameter":{
                "postSql":[],//執行數據同步任務之后執行的SQL語句。
                "datasource":"",
                "session":[],//數據庫連接會話參數。
                "column":[//字段。
                    "id",
                    "name"
                ],
                "encoding":"UTF-8",//編碼格式。
                "batchSize":1024,//一次性批量提交的記錄數大小。
                "table":"",//表名。
                "preSql":[]//執行數據同步任務之前執行的SQL語句。
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"http://錯誤記錄數。
        },
        "speed":{
            "throttle":true,//當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
            "concurrent":1, //作業并發數。
            "mbps":"12"http://限流,此處1mbps = 1MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Writer腳本參數

參數

描述

是否必選

默認值

datasource

數據源名稱,腳本模式支持添加數據源,此配置項填寫的內容必須要與添加的數據源名稱保持一致。

table

目標表名稱,如果表的schema信息和上述配置username不一致,請使用schema.table的格式填寫table信息。

writeMode

選擇導入模式,僅支持insert into。當主鍵或唯一性索引沖突時,會寫不進去沖突的行,以臟數據的形式體現。

insert into

column

目標表需要寫入數據的字段,字段之間用英文逗號分隔。例如"column": ["id","name","age"]。如果要依次寫入全部列,使用*表示。例如"column":["*"]

preSql

執行數據同步任務之前率先執行的SQL語句。目前向導模式僅允許執行一條SQL語句,腳本模式可以支持多條SQL語句,例如清除舊數據。

postSql

執行數據同步任務之后執行的SQL語句。目前向導模式僅允許執行一條SQL語句,腳本模式可以支持多條SQL語句,例如加上某一個時間戳。

batchSize

一次性批量提交的記錄數大小,該值可以極大減少數據同步系統與Oracle的網絡交互次數,并提升整體吞吐量。如果該值設置過大,會導致數據同步運行進程OOM異常。

1,024