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. 西邮Linux兴趣小组第一次技术分享会

    2016年10月30日晚,西邮Linux兴趣小组技术分享会在西安邮电大学长安校区东区逸夫教学楼FF305室成功举办.200多名来自全校不同专业的15,16级同学参加了此次分享会. 分享会于20:00正 ...

  2. {% csrf_token %} 原理和作用 (踩坑必看)

    本博客已暂停更新,请转自新博客 https://www.whbwiki.com/320.html 继续阅读 简介 在django中我们需要在templates的form中加入{%csrf_token% ...

  3. JetBrains IntelliJ IDEA汉化

    JetBrains IntelliJ IDEA汉化 开启 IntelliJ IDEA,点击右下角Configure菜单,选择 Plugins.在弹出的 Plugins窗口里,切换至 Marketpla ...

  4. PTA 7-3 Windows消息队列 (25分)

    PTA 7-3 Windows消息队列 (25分) 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列 ...

  5. Go语言核心36讲(Go语言实战与应用二)--学习笔记

    24 | 测试的基本规则和流程(下) Go 语言是一门很重视程序测试的编程语言,所以在上一篇中,我与你再三强调了程序测试的重要性,同时,也介绍了关于go test命令的基本规则和主要流程的内容.今天我 ...

  6. Django笔记&教程 3-2 模板语法介绍

    Django 自学笔记兼学习教程第3章第2节--模板语法介绍 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/topics/templates/# ...

  7. 从 ThreadLocal 到 AsyncLocal

    前些天跟大佬们在群里讨论如何在不使用构造函数,不增加方法参数的情况下把一个上下文注入到方法内部使用,得出的结论是 AsyncLocal .感叹自己才疏学浅,居然才知道有 AsyncLocal 这种神器 ...

  8. Nginx支持WebSocket反向代理

    WebSocket是目前比较成熟的技术了,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择.其为HTML5的一部分,WebSocket相较于原来开发这类app的 ...

  9. Python+selenium之键盘和鼠标事件

  10. [CSP-S2019] 树的重心

    也是一个很不错的题目. 考虑我们钦定重心为根. 那么就有这样一个性质: 如果我们断的边在一个点的子树里,则这个点不会成为断边后的分裂树的根. 所以我们就只要考虑断边在子树外即可. 那么我们设\(x\) ...