首先需要注意的是DATAX是通过JDBC的方式读取ORACLE数据,然后通过OCI的方式写数据,DX也可以通过JDBC写的方式进行,但是OCI比JDBC速度更快。

进入DataX安装目录的bin目录,执行命令

./datax.py -e

输入交换数据数据库对应的代码,它会自动生成相应的xml配置文件

编辑配置文件参数,有"?"的是必须配置的,默认的可以保持不变

执行代码:

vi /home/taobao/datax/jobs/oraclereader_to_oraclewriter_1459821656288.xml

DataX Job配置文件ORACLEREADER和ORACLEWIRTER配置项清单

Xml配置文件

其中mandatory:true表示必填

需要注意的是其中tnsfile可以不填保持默认的就行,tnsfile,oracle jdbc连接有2种方式,一种是直接通过jdbc:oracle:thin:@ip:1521/dbname,另外一种是通过本地tns连接,具体的可以通过看源文件里面的oraclereader.java文件了解到,如果你选择tnsfile方式连接填写的tns路径就是你本地客户端的tnsname.ora的具体路径。

还有一点需要注意,这里的dbname要注意清楚,xml配置文件里面的oraclereader和oraclewirter里面的dbname都是服务名,由于一开始我不清楚,写成了SID名,后来遇到错误,调试了好久,最后通过看源码进行测试,以为源码错误,源代码里面的是"/"不是":",然后修改了源码,,才不报错,如果你一开始就写的服务名,后面就不需要修改

以下是两种oracle jdbc连接方式:

服务名连接方式:jdbc:oracle:thin:@ip:1521/dbname

SID连接方式:jdbc:oracle:thin:@ip:dbname

两种运行报错:

SID连接方式,我把dbname写成了服务名

Caused by: java.sql.SQLException: Listener refused the connection with the following error:

ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

The Connection descriptor used by the client was:

192.168.35.193:1521:edwfjtest

服务名连接方式,我写成了SID名

Caused by: java.lang.IllegalStateException: java.sql.SQLException: Listener refused the connection with the following error:

ORA-12514, TNS:listener does not currently know of service requested in connect descriptor

The Connection descriptor used by the client was:

192.168.35.193:1521/edworcl

运行datax.py文件 ,job.xml文件的路径要是绝对路路径

./datax.py vi /home/taobao/datax/jobs/oraclereader_to_oraclewriter_1459821656288.xml

报错:

Causedby:java.lang.UnsatisfiedLinkError: /home/taobao/datax/plugins/writer/oraclewriter/liboraclewriter.so:libclntsh.so.10.1:cannot open shared object file: No such file or directory

解决办法:先看上面的地址里面的文件是不是存在,一般是存在的。

如果存在,则可能是你的liboraclewriter.so文件和你的当前的版本不匹配,liboraclewirter.so最好需要单独编译

编译符合环境的oraclewriter。

datax的文档是这样写的:

由于Oracle最终通过jni调用oci机制导入数据, 默认情况下,DataX提供基于Intel x86_64 liboraclewriter.so包。如果你使用的平台硬件和默认情况不匹配,需要编译oraclewriter C++代码,liboraclewriter.so需要libiconv库的支持,请先检查该库是否存在。具体编译过程如下:

1) 进入 DataX源码中的c++/src/oracledumper/src/ 目录

2) 输入make命令即可编译

3) 将当前目录下编译完成的liboraclewriter.so 拷贝至/home/taobao/datax/plugins/目录下,覆盖默认的liboraclewriter.so即可

注意事项:如果本地代码使用的包名不同于源码的,需要修改对应的文件。

修改文件:include中:xx_OracleWriterJni.h(修改文件名和 OracleWriterJni.h中方法的包路径名。)

src中:xx_OracleWriterJni.cpp (修改文件名)

*这一步是要在oracle软件安装的那一台机器上上面去编译,并且环境变量中指定ORACLE_HOME

*要指明LD_LIBRARY_PATH

*其中还要安装libiconv库(如果没有安装会提示你找不到这个库)

编译的时候还会报错,说找不到文件,但是修改了下面的代码后就没报错了(红色的部分是需要添加的代码)

[root@localhost src]# cat Makefile

INCLUDE=-I../include -I${ORACLE_HOME}/jdk/include-I${ORACLE_HOME}/jdk/include/linux

LIBS=-lclntsh -liconv -L../lib -L${ORACLE_HOME}/lib -L../../../../libs/

CC=g++

OBJS=liboraclewriter.so

CFLAGS=-shared -fPIC -Wl,-rpath=/home/taobao/datax/libs

CPP=common.cpp dumper.cpp oradumper.cpp strsplit.cpp com_taobao_datax_plugins_writer_oraclewriter_OracleWriterJni.cpp

OBJS: $(CPP)

$(CC) $(INCLUDE) -o $(OBJS) $(CPP) $(CFLAGS) $(LIBS)

clean:

rm -rf $(OBJS)

覆盖原来的liboraclewriter.so后,再执行原来的文件。

./datax.py vi /home/taobao/datax/jobs/oraclereader_to_oraclewriter_1459821656288.xml

我的系统又报了一个错误,这个错误很好解决

Causedby:java.lang.UnsatisfiedLinkError:/home/taobao/datax/plugins/writer/oraclewriter/liboraclewriter.so: /home/taobao/datax/plugins/writer/oraclewriter/libclntsh.so.11.1:

cannot restore segment prot after reloc: Permission denied

错误信息:

cannot restore segment prot after reloc: Permission denied

解决办法:

[root@enterprice64 ~]# getenforce

Enforcing

[root@enterprice64 ~]# setenforce 0

[root@enterprice64 ~]# getenforce

Permissive

解决成功,然后,测试成功

转载于:https://www.cnblogs.com/bb1119/p/5378220.html

DataX实现oracle到oracle之间的数据传递相关推荐

  1. javascript表单之间的数据传递

    今天有朋友问我关于用javascript来进行页面各表单之间的数据传递的问题,我以前也写过,不过从来没有注意,今天总结了一下,希望能够给大家一些帮助,也帮助我总结以前学过,用过的知识. 一,最简单的就 ...

  2. Android中Activity之间的数据传递(Intent和Bundle)

    当一个Activity启动另一个Activity时,常常会有一些数据传过去,对于Activity之间的数据交换更简单,因为两个Activity之间进行数据传递交换更简单,因为两个Activity之间本 ...

  3. 三个activity之间跳转 数据传递_第二百四十二回:Android中Fragment之间的数据传递概述...

    各位看官们大家好,上一回中咱们说的是Android中Activity之间数据传递的例子,这一回咱们说的例子是Fragment之间的数据传递.闲话休提,言归正转.让我们一起Talk Android吧! ...

  4. WEB前端 vue学习二 组件之间的数据传递

    Vue 的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据.必须使用特定的方法才能实现组件之间的数据传递. 首先用 vue-cli 创建一个项目,其中 App.vue 是父组件,com ...

  5. Vue之组件之间的数据传递

    Vue的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据,必须使用特定的方法才能实现组件之间的数据传递. 下列为在vue-cli创建项目中的操作 一·父组件向子组件传递数据 在Vue中 ...

  6. android 打印流程图,Android实现Activities之间进行数据传递的方法

    本文实例讲述了Android实现Activities之间进行数据传递的方法.分享给大家供大家参考.具体分析如下: 首先,先说明一下Activity的启动及关闭: 1. startActivity(In ...

  7. uniapp 子组件 props拿不到数据_谈一谈使用 webpack 开发时,Vue 组件之间的数据传递...

    •我们在学习Vue的时候,难免会使用各个组件之间传递数据.•先来介绍一下Vue中组件传递的方式,有父组件传递给子组件数据,子组件传递给父组件数据,父组件直接获取子组件中数据,子组件直接获取父组件数据以 ...

  8. Android--Activity的跳转及Activity之间的数据传递

    Activity的跳转及Activity之间的数据传递(作业) 首先呢,看到这个作业第一感觉并不难,因为只是涉及到多activity之间的跳转以及简单的数据传递而已.然后,做的时候也没花费多长的时间, ...

  9. 【转载】ASP.NET MVC中Controller与View之间的数据传递总结

    在ASP.NET MVC中,经常会在Controller与View之间传递数据,因此,熟练.灵活的掌握这两层之间的数据传递方法就非常重要.本文从两个方面进行探讨: Ø Controller向View传 ...

  10. servlet向ajax传递数据库,一、JSP、servlet、SQL三者之间的数据传递(前台与后台数据交互)...

    背景: 目前业界很流行的MVC(model-view-control)开发模式,理解为 模型是Bean, 视图是 Html/Jsp, 控制是Servlet, 关联数据库的Dao web的运行机制: 数 ...

最新文章

  1. 高通加大5G应用力度:发布又一款手机芯片,还推出机器人和无人机5G系统
  2. python输入hello*3_python入门到实践-Hello Python3
  3. unity, 颜色随高度渐变shader
  4. 华为微型计算机b515,华为MateStation B515台式机曝光:五种配置
  5. 深度学习自学(三十九):SRN骨架检测 Side-output Residual Network for Object Symmetry Detection in the Wild
  6. 【推荐系统】电影推荐系统(一)
  7. 【频域分析】频谱泄露、频率分辨率、栅栏效应
  8. Python中显示图片
  9. 【随笔】Linux drop_caches
  10. 三步搞定ABAP DOI操作EXCEL
  11. 服务器芯片和一般电脑芯片的区别,服务器CPU和PC的CPU区别
  12. windows10系统还原
  13. 程序员创业成功必须遵守的几条铁律
  14. 7个最好的Java机器学习开发库
  15. cf1064E. Dwarves, Hats and Extrasensory Abilities(二分 交互)
  16. 万达商业再递招股书:上半年派息35亿 腾讯与碧桂园是股东
  17. python自动化(五)接口自动化:4.接口自动化框架搭建实战
  18. 【蓝桥杯国赛真题23】Scratch恐龙跑酷 第十三届蓝桥杯 图形化编程scratch国赛真题和答案讲解
  19. linux内存显示buff,能不能让Linux不要对内存buff/cache辣么饥渴?
  20. 阿里云对象存储OSS打造私人图床私人云存储(1年仅9元)

热门文章

  1. 224秒!ImageNet上训练ResNet-50最佳战绩出炉,索尼下血本破纪录
  2. Apple Watch,其实是个老司“机”
  3. let和const注意点
  4. 多乐融依托大数据锻造五重风控防线
  5. Java IO(input output)流二
  6. GetConsoleWindow was not declared in this scope
  7. 安装zabbix服务器端
  8. 分享2个第三方社会化分享按钮及分享工具
  9. 系统蓝屏代码为0X00000024的解决办法
  10. 重磅消息:全球首个光量子计算机诞生!