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. Open vSwitch 应用实践

    基础配置以及要点: 1.交换机创建和端口的配置 1) 创建一个新的 OVS 交换机[格式:$ ovs-vsctl add-br [名称]] $ovs-vsctl add-br ovs-switch 2 ...

  2. Linux高级命令及mysql数据安装

    Linux系列--高级命令--mysql数据库安装 数据库是用来组织.存储和管理数据的仓库 1.安装数据库:执行命令yum -y install mysql -server 2.启动数据库:安装完毕, ...

  3. MarkDown学习内容总结

    MarkDown学习内容 标题 使用方法:通过 # 的个数实现多级标题. 举例如下: 一级标题格式为:# + 空格 + 标题名: 二级标题格式为:## + 空格 + 标题名: 三级标题格式为:### ...

  4. 大爽Python入门教程 1-5 答案

    大爽Python入门公开课教案 点击查看教程总目录 1 方向变换 >>> 51//4 12 >>> 51%4 3 答: 向左转51次之后, 小明面朝东方, 转过了1 ...

  5. php 数组(2)

    数组排序算法 冒泡排序,是一种计算机科学领域的较简单的排序算法.它重复地访问要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们减缓过来.走访数列的工作室重复的进行直到没有再需要交换,也就是说该 ...

  6. 常用的Dos(Win+R)命令

    打开CMD的方式 开始 + 系统 + 命令提示符 win + R --> 输入CMD 管理员方式运行:开始-->windows系统-->右击命令提示符-->管理员身份运行(最高 ...

  7. 论文解读(node2vec)《node2vec Scalable Feature Learning for Networks》

    论文题目:<node2vec Scalable Feature Learning for Network>发表时间:  KDD 2016 论文作者:  Aditya Grover;Adit ...

  8. Linux设置默认的声卡

    首先查看自己电脑上的声卡 使用命令行查看 orangepi@orangepi3:~$ ll /proc/asound/ total 0 dr-xr-xr-x 4 root root 0 Dec 23 ...

  9. CF814E An unavoidable detour for home

    考虑有每个最短路只有一条. 那么我们建出最短路树后,显然所有的非树边都是同层之间的横叉边. 那么我们考虑设\(f(i,j,k,z)\)为我们考虑到了第\(i\)个点,此时他被我们分配到了\(p\)层, ...

  10. Codeforces 446D - DZY Loves Games(高斯消元+期望 DP+矩阵快速幂)

    Codeforces 题目传送门 & 洛谷题目传送门 神仙题,%%% 首先考虑所有格子都是陷阱格的情况,那显然就是一个矩阵快速幂,具体来说,设 \(f_{i,j}\) 表示走了 \(i\) 步 ...