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

基于DataX将数据从Sqlserver同步到Oracle的更多相关文章

  1. 基于datax的数据同步平台

    一.需求 由于公司各个部门对业务数据的需求,比如进行数据分析.报表展示等等,且公司没有相应的系统.数据仓库满足这些需求,最原始的办法就是把数据提取出来生成excel表发给各个部门,这个功能已经由脚本转 ...

  2. 将SQLServer2005中的数据同步到Oracle中

    有时由于项目开发的需要,必须将SQLServer2005中的某些表同步到Oracle数据库中,由其他其他系统来读取这些数据.不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现. ...

  3. rsync+sersync实现数据文件实时同步

    一.简介 sersync是基于Inotify开发的,类似于Inotify-tools的工具: sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或某一个目录的名字: ...

  4. Centos7.5部署MySQL5.7基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)

    之前已经详细介绍了Mysql基于GTID主从复制的概念,原理和配置,下面整体记录下MySQL5.7基于GTID主从复制+并行复制+增强半同步复制+读写分离环境的实现过程,以便加深对mysql新特性GT ...

  5. 基于 K8S 构建数据中心操作系统

    在 12 月 22 日 ECUG 的下午场 ,七牛云容器计算部技术总监袁晓沛为大家带来了主题为<基于 K8S 的 DCOS 之路>的精彩分享,向大家介绍了七牛容器云目前 K8S 的状况和产 ...

  6. Sersync+Rsync实现数据文件实时同步

    rsync+inotify-tools与rsync+sersync架构的区别1,rsync+inotify-tools只能记录下被监听的目录发生的变化(增删改)并没有把具体变化的文件或目录记录下来在同 ...

  7. 实现mysql的读写分离(mysql-proxy)____1(mysql的主从复制,基于gtid的主从复制,半同步复制,组复制)

    主从复制原理: 从库生成两个线程,一个I/O线程,一个SQL线程: i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中:主库会生成一个 log ...

  8. Rsync+sersync(inotify)实现数据实时双向同步

    目录 Rsync+Sersync数据实时同步(双向) 服务介绍 节点声明 编译环境配置 安装Rsync 编辑Rsync配置文件 配置文件解析 配置密码文件 启动rsync验证 安装sersync服务 ...

  9. windows下mysql的数据主主同步

    mysql主主备份: 保证各服务器上的数据库中的数据一致,因此需要开启数据库同步机制.由于是一整套系统,并且系统内含数据库.由于任何一台服务器都有可能被选中,因此要让所有的数据库上的数据都是最新的,任 ...

随机推荐

  1. Sonar规范扫描Java代码暴露的问题

    字符串和封装类型应使用 equals()进行比较 例如java.lang.Integer使用引用等于==或!=,因为它不是比较实际值,而是比较内存中的位置. String firstName = ge ...

  2. Code Runner,率先支持刚发布的 Visual Studio 2022!

    Visual Studio 被不少网友成为"宇宙第一IDE".但是,我写✍ PHP.Java 和 C#,也都是用的 VS Code. 我所在的组,是 Visual Studio C ...

  3. 【Docker】Asp.net core在docker容器中的端口问题

    还记得[One by one系列]一步步学习docker(三)--实战部署dotnetcore中遇到的问题么?容器内部启动始终是80端口,并不由命令左右. docker run --name cont ...

  4. Python 爬取 妹子图(技术是无罪的)

    ... #!/usr/bin/env python import urllib.request from bs4 import BeautifulSoup def crawl(url): header ...

  5. Numpy (嵩老师.)

    import numpy as np Numpy 一元函数 对ndarray中的数据执行元素级运算的函数 np.abs(x) np.fabs(x) 计算数组各元素的绝对值 np.sqrt(x) 计算数 ...

  6. 1-Introduction(介绍)

    目录: 正文: (一)機器學習就是让机器自動找函式 语音/图像识别 (二)你想找什麼樣的函式? (2.1)Regression 找出的函数其输出是一个数值 (2.2)Classification (2 ...

  7. [loj6278]数列分块入门2

    做法1 以$K$为块大小分块,并对每一个块再维护一个排序后的结果,预处理复杂度为$o(n\log K )$ 区间修改时将整块打上标记,散块暴力修改并归并排序,单次复杂度为$o(\frac{n}{K}+ ...

  8. [bzoj1190]梦幻岛宝珠

    根据$2^b$分组,组内处理出g[i][j]表示当容量为$j\cdot 2^{i}$且只能选b=i时最大价值,再组间dp用f[i][j]表示当容量为$j\cdot 2^{i}+(w\&(2^{ ...

  9. [atARC111F]Do you like query problems

    (以下修改指1和2类操作,询问指3类操作,操作指修改或询问) 注意到总方案数确定,那么不妨求出答案的期望,再乘上方案数即为答案 (这里从期望的角度考虑只是为了描述方便,并没有太大的实际意义) 设$E( ...

  10. [bzoj1052]覆盖问题

    先二分答案,容易发现一定有一个正方形覆盖在角上(即有两条边在最X的地方),否则4个最X的点一定无法覆盖,然后暴力确定即可 1 #include<bits/stdc++.h> 2 using ...