基於DataX將數據從Sqlserver同步到Oracle


DataX是阿里雲推出的一款開源的ETL工具,通過配置json文件實現不同數據庫之間的數據同步。先有需求是從Sqlserver同步數據到Oracle,網上關於DataX的介紹很多。

框架設計

DataX本身作為離線數據同步框架,采用Framework + plugin架構構建。將數據源讀取和寫入抽象成為Reader/Writer插件,納入到整個同步框架中。

  Reader:Reader為數據采集模塊,負責采集數據源的數據,將數據發送給Framework。
  Writer: Writer為數據寫入模塊,負責不斷向Framework取數據,並將數據寫入到目的端。
  Framework:Framework用於連接reader和writer,作為兩者的數據傳輸通道,並處理緩沖,流控,並發,數據轉換等核心技術問題。


實踐

1.環境

datax不需要安裝,直接解壓縮可用,但要先部署JDK環境和python環境。這里只說配置python環境時遇到的問題,python使用的是2.7.版本,python也是免安裝版,直接配好環境變量即可。在配置python環境時,遇到“無法啟動此程序 因為計算機中丟失python27.dll"報錯,下載python27.dll,將其扔到System32和SysWOW64中可解決問題。

2.Sqlserver同步數據到Oracle

{

"job": {
  "content": [
     {
       "reader": {
    "name": "sqlserverreader",
    "parameter": {
    "column":["id",
    "accid",
    "accno",
    "ismainacc",
    "parentid",
    "bindname",
    "opentime",
    "endtime",
    "matuday",
    "recordtime",
    "isquery",
    "remark",
    "lastupdateuser",
    "lastupdatetime"
    ],
    "connection": [
    {
    "jdbcUrl": ["jdbc:sqlserver://{ip}:{端口號};DatabaseName=ReportServer$SQLEXPRESS"],//sqlserver數據庫連接,注意端口號和數據庫名
    "table":["b2edb.dbo.BOE_ACCOUNT"]//sqlserver的表名
    }
    ],
    "password": "123456789", 
    "username": "sa",//登陸Sqlserver數據庫的賬號密碼
                 }
   },
  "writer": {
    "name": "oraclewriter",
    "parameter": {
      "username":"BOCZBT",
      "password":"BOCZBT",//Oracle數據庫的登陸名和密碼
    "column": ["id",
    "accid",
    "accno",
    "ismainacc",
    "parentid",
    "bindname",
    "opentime",
    "endtime",
    "matuday",
    "recordtime",
    "isquery",
    "remark",
    "lastupdateuser",
    "lastupdatetime"
    ],
    "connection": [
    {
      "jdbcUrl": "jdbc:oracle:thin:@{ip}:{端口號}:imsdev",//oracle數據庫的連接串
      "table": ["BOE_ACCOUNT"]//Oracle表
    }
   ]
  }
 }
}
],
    "setting": {
      "speed": {
      "channel": "1"
    }
  }
     }
}

在實際操作中遇到了一些問題,記錄如下:

1).執行是在Dos窗口中進入Datax的bin目錄下執行,一般我們通過cmd命令默認在C盤下,更改盤符,進入datax的bin目錄。

2).開始執行時,沒有報錯,沒有日志,也沒有同步成功,檢查執行文件名是否有空格,保存的json文件有空格造成了執行沒成功。

3).文件名稱沒有問題后,日志報錯信息為Datax無法連接對應的數據庫,並提示是Sqlserver連接有誤,查看Sqlserver的連接IP,端口號,數據庫名等是否正確。Sqlserver是傻瓜式安裝,查看端口號為動態端口號,修改了端口號為1344,具體修改方法是:打開Sqlserver配置管理器-----SQL Server網絡配置----SQLEXPRESS的協議(我的數據庫實例是SQLEXPRESS)----TCP/IP,將狀態改為已啟用,右鍵屬性,修改IPALLA的TCP端口為1433,應用,重啟數據庫服務。可利用存儲過程exec sys.sp_readerrorlog 0,1,'listening'查看端口號。 

4).開始在writer中寫了”writeMode“:"insert",結果報”寫入模式(writeMode)配置錯誤。因為Oracle不支持配置項writeMode:insert,Oracle只能使用insert sql插入數據,請檢查您的配置並做出修改“。將”writeMode“:"insert"刪掉。

5).sqlserver和oracle連接串的格式都有固定的樣式,而且有的需要有[  ],可以通過向streamwriter寫入打印的方式查看是否連接成功。

{
  "job": {
    "content": [
     {
      "reader": {
        "name": "oraclereader",
        "parameter": {
          "column":["id",
            "accid",
            "accno",
            "ismainacc",
            "parentid",
            "bindname",
            "opentime",
            "endtime",
            "matuday",
            "recordtime",
            "isquery",
            "remark",
            "lastupdateuser",
            "lastupdatetime"
            ],
          "connection": [
            {
              "jdbcUrl": ["jdbc:oracle:thin:@{ip}:{端口號}:imsdev"],//oracle服務器IP&端口號
              "table":["BOE_ACCOUNT"]
            }
           ],
              "password": "BOCZBT",
              "username": "BOCZBT",

            }
          },
      "writer": {
          "name": "streamwriter",
          "parameter": {
            "encoding":"UTF-8",
            "print":true

            }
           }
          }
        ],
       "setting": {
        "speed": {
          "channel": "5"
        }
       }
      }
    }

 

關於datax的介紹參考

 https://blog.csdn.net/u011410529/article/details/74352549 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM