最近项目需要快速的拖取oracle大容量表的数据到mysql中,因此写了一个多线程并发的java数据拖取工具,在此基础上抽象了一个比较通
最近项目需要快速的拖取oracle大容量表的数据到mysql中,因此写了一个多线程并发的java数据拖取工具,在此基础上抽象了一个比较通用的工具,目前是基于jdbc方式,因此支持oracle2oracle,oracle2mysql,mysql2mysql,mysql2oracle,mysql2sqlserver,sqlserver 2mysql等等,通过测试目前有oracle2mysql,mysql2oracle,支持windows和linux。下面说明下使用方法和测试的用例。
第一步,配置需要同步的数据库和表,打开conf文件下的config.properties,conf文件下包含了其他数据同步的模版,下面举例多线程同步mysql的表到oracle中,config.properties是如何配置的。
#for source database parameters
source.datasource.initialsize=10
source.datasource.maxidle=20
source.datasource.minidle=5
source.datasource.maxactive=100
source.datasource.maxwait=120000
source.jdbc.driverclassname=com.mysql.jdbc.driver
source.jdbc.url=jdbc:mysql://10.224.56.188 : 3306/meetingdb?autoreconnect=true&characterencoding=utf-8
source.jdbc.username=test
source.jdbc.password=pass
#target sync data threadnum=source.database.threadnum
source.database.threadnum=10
source.database.selectsql=select * from test where mod(cast(fnv_64(pathaliasid) as unsigned),#threadnum#)=?
#you can input many commands and split by ; ,你可以打开注释加一些session级别的优化命令
#source.database.sessioncommand=alter session set db_file_multiblock_read_count=128;
#for target jdbc parameters
target.datasource.initialsize=10
target.datasource.maxidle=20
target.datasource.minidle=5
target.datasource.maxactive=100
target.datasource.maxwait=120000
target.jdbc.driverclassname=oracle.jdbc.driver.oracledriver
target.jdbc.url=jdbc: oracle: thin : @10.224.56.189:1521:perfcon1
target.jdbc.username=test
target.jdbc.password=pass
target.database.insertsql=insert into test2(pathaliasid,path,createtime,lastmodifiedtime,objectprefix,pathmd5id,collideswith) values(?,?,?,?,?,?,?)
target.database.commitnum=1000
第二步,运行datasync.sh或者datasync.bat,开始同步数据。
具体的测试的用例如下:
case 1 : oracle to mysql with multi_threads
source table:test
target table:test2
source.database.selectsql=select * from test where ora_hash(pathaliasid,#threadnum#)=?
exesql=select * from test where ora_hash(pathaliasid,10)=10
...
exesql=select * from test where ora_hash(pathaliasid,10)=0
mysql> select count(*) from test2;
+----------+
| count(*) |
+----------+
| 218850 |
+----------+
case 2 : mysql to oracle with multi_threads
source table:test
target table:test2
source.database.selectsql=select * from test where mod(cast(fnv_64(pathaliasid) as unsigned),#threadnum#)=?
exesql=select * from test where mod(cast(fnv_64(pathaliasid) as unsigned),10)=10
...
exesql=select * from test where mod(cast(fnv_64(pathaliasid) as unsigned),10)=0
sql>select count(*) from test2;
count(*)
----------
218850
case 3 :mysql to oracle with single process.
source.database.threadnum=1
source.database.selectsql=select * from test
exesql=select * from test
sql>select count(*) from test2;
count(*)
----------
218850
获取可以运行的二进制运行程序或者源码,,代码是完全free的,可以从以下地址获取:
免费下载地址在
用户名与密码都是
具体下载目录在 /2012年资料/6月/1日/异构数据库多线程大表数据同步工具/
更多oracle相关信息见oracle 专题页面 ?tid=12