基于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
基于DataX将数据从Sqlserver同步到Oracle的更多相关文章
- 基于datax的数据同步平台
一.需求 由于公司各个部门对业务数据的需求,比如进行数据分析.报表展示等等,且公司没有相应的系统.数据仓库满足这些需求,最原始的办法就是把数据提取出来生成excel表发给各个部门,这个功能已经由脚本转 ...
- 将SQLServer2005中的数据同步到Oracle中
有时由于项目开发的需要,必须将SQLServer2005中的某些表同步到Oracle数据库中,由其他其他系统来读取这些数据.不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现. ...
- rsync+sersync实现数据文件实时同步
一.简介 sersync是基于Inotify开发的,类似于Inotify-tools的工具: sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或某一个目录的名字: ...
- Centos7.5部署MySQL5.7基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)
之前已经详细介绍了Mysql基于GTID主从复制的概念,原理和配置,下面整体记录下MySQL5.7基于GTID主从复制+并行复制+增强半同步复制+读写分离环境的实现过程,以便加深对mysql新特性GT ...
- 基于 K8S 构建数据中心操作系统
在 12 月 22 日 ECUG 的下午场 ,七牛云容器计算部技术总监袁晓沛为大家带来了主题为<基于 K8S 的 DCOS 之路>的精彩分享,向大家介绍了七牛容器云目前 K8S 的状况和产 ...
- Sersync+Rsync实现数据文件实时同步
rsync+inotify-tools与rsync+sersync架构的区别1,rsync+inotify-tools只能记录下被监听的目录发生的变化(增删改)并没有把具体变化的文件或目录记录下来在同 ...
- 实现mysql的读写分离(mysql-proxy)____1(mysql的主从复制,基于gtid的主从复制,半同步复制,组复制)
主从复制原理: 从库生成两个线程,一个I/O线程,一个SQL线程: i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中:主库会生成一个 log ...
- Rsync+sersync(inotify)实现数据实时双向同步
目录 Rsync+Sersync数据实时同步(双向) 服务介绍 节点声明 编译环境配置 安装Rsync 编辑Rsync配置文件 配置文件解析 配置密码文件 启动rsync验证 安装sersync服务 ...
- windows下mysql的数据主主同步
mysql主主备份: 保证各服务器上的数据库中的数据一致,因此需要开启数据库同步机制.由于是一整套系统,并且系统内含数据库.由于任何一台服务器都有可能被选中,因此要让所有的数据库上的数据都是最新的,任 ...
随机推荐
- MQ限流应用
业务背景:系统中需要发送邮件给用户!实现是javamail发送 问题:某天,发现有些用户并未收到邮件排查: 1,登录发件箱,发现如下图:大量邮件发送失败,大部分是发送频率过高导致邮箱外发功能被限制 3 ...
- tabulate
ValueError: headers for a list of dicts is not a dict or a keyword from: https://bitbucket.org/astan ...
- 如何修改visual-studio的sln文件和project工程名
关于VS的 .sln 文件和 .suo 文件 *.sln:(Visual Studio.Solution) 通过为环境提供对项目.项目项和解决方案项在磁盘上位置的引用,可将它们组织到解决方案中.比如是 ...
- 这一次,Google 终于对 Web 自动化下手了!
大家好,我是安果! 最近 Google 对 Chrome 进行了一次比较大的更新,其中一项是脚本录制回放功能,它可以非常方便我们处理一些自动化场景 我们可以在 Chrome 官网下载 Chrome C ...
- [atAGC048F]01 Record
先将这个序列翻转,贪心找到最长的'101010--'的形式的子序列并删除,重复此过程并记这些字符串长度依次为$l_{1},l_{2},...,l_{n}$,若最终还有字符剩余则一定无解 假设$S$中元 ...
- Python学习手册——第二部分 类型和运算(1)之字符串
Python全景 1.程序由模块构成. 2.模块包含语句. 3.语句包含表达式. 4.表达式建立并处理对象. 在python中数据是以对象的形式出现的!!! 为什么使用内置类型 内置对象使程序更容易编 ...
- 从零开始学Kotlin第三课
kotlin函数和函数式表达式的简化写法: fun main(args:Array<String>) { var result=add(2,5) println(result) ///简化 ...
- 我在组内的Java问题排查分享
前言 最近翻看以前写的 PPT, 发现了在2019年做的一次技术分享,关于 Java 问题排查,由于没什么公司机密可言,整理下分享给大家~ 线上问题处理流程 直接放PPT截图吧,现在看来依然不过时 问 ...
- 【虚树学习笔记([SDOI2011]消耗战)】
题意 [SDOI2011]消耗战 想法 首先我们可以很自然的想到怎么在整棵树上进行求解\(DP\) 很简单 每个点有两个选择 要么对其子树的关键点递归求解 要么自己断开 当然断开的\(cost\)为其 ...
- dlang ref的作用
ref 作用 1 import std.stdio, std.string; 2 3 void main() 4 { 5 string[] color=["red","b ...