文章目录
一、场景分析
单表单表同数据同步
字段数量和字段类型一致有2种情况:
第1种:oracle 原表和目标表 表名称一样,原表和目标表的字段数量以及字段类型一致。
第2种:oracle 原表和目标表 表名称不一样,原表和目标表的字段数量以及字段类型必须一致。
字段不一致有2种情况:
第一种:oracle 原表和目标表 名称一样,也可以不一样,但是,原表和目标表字段数量可以不一致,原表字段比目标表的字段数少。
第二种:oracle 原表和目标表 名称一样,也可以不一样,但是,原表和目标表字段数量可以不一致,原表字段比目标表的字段数多。
二、实战
字段数量和字段类型一致有2种情况:
第1种:oracle 原表和目标表 表名称一样,原表和目标表的字段数量以及字段类型一致。
第2种:oracle 原表和目标表 表名称不一样,原表和目标表的字段数量以及字段类型必须一致。
2.1. 创建原表表结构+初始化数据
ORACLE使用批量插入100万测试数据
https://gblfy.blog.csdn.net/article/details/113556382
2.2. 创建目标表表结构
CREATE TABLE test_data
(
ID varchar2(32),
NAME1 varchar2(9),
NAME2 varchar2(100),
NAME3 varchar2(100)
);
COMMENT ON TABLE test_data IS '测试表';
2.3. 同步前效果图
原表1000000条数据
SELECT count(*) FROM test_data;
2.4. 连接串
#格式:cd {YOUR_DATAX_HOME}/job
cd /app/datax/dca/job
vim oracle-base.json
内容如下:
{
"job": {
"content": [
{
"reader": {
"name": "oraclereader",
"parameter": {
"column": ["*"],
"connection": [{
"jdbcUrl": ["jdbc:oracle:thin:@ip地址:1521:数据库名称"],
"table": ["用户(大写).${originTableName}"]
}],
"password": "用户名",
"username": "密码"
}
},
"writer": {
"name": "oraclewriter",
"parameter": {
"column": ["*"],
"connection": [{
"jdbcUrl": "jdbc:oracle:thin:@ip地址:1521:数据库名称",
"table": ["用户(大写).${targetTableName}"]
}],
"password": "用户名",
"username": "密码"
}
}
}],
"setting": {
"speed": {
"channel": "2"
}
}
}
}
2.5. 执行同步
#格式:python {YOUR_DATAX_HOME}/bin/datax.py -p"-DoriginTableName='目标表名' -DtargetTableName='原表名'" {YOUR_DATAX_HOME}/job/oracle2oracle-oldCS.json;
python /app/datax/bin/datax.py -p"-DoriginTableName='TEST_DATA' -DtargetTableName='TEST_DATA'" /app/datax/job/dca/oracle-base.json
2.6.执行后效果图
原表
目标表
2.7.操作记录
[root@localhost job]# python /app/datax/bin/datax.py -p"-DoriginTableName='TEST_DATA' -DtargetTableName='TEST_DATA'" /app/datax/job/dca/oracle-base.json
2021-02-02 17:30:19.114 [job-0] INFO JobContainer - PerfTrace not enable!
2021-02-02 17:30:19.114 [job-0] INFO StandAloneJobContainerCommunicator - Total 1000000 records, 37555584 bytes | Speed 3.58MB/s, 100000 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 6.049s | All Task WaitReaderTime 1.829s | Percentage 100.00%
2021-02-02 17:30:19.115 [job-0] INFO JobContainer -
任务启动时刻 : 2021-02-02 17:30:08
任务结束时刻 : 2021-02-02 17:30:19
任务总计耗时 : 10s
任务平均流量 : 3.58MB/s
记录写入速度 : 100000rec/s
读出记录总数 : 1000000
读写失败总数 : 0
[root@localhost job]#
三、实战场景2(第1种)
字段不一致有2种情况:
第一种:oracle 原表和目标表 名称一样,也可以不一样,但是,原表和目标表字段数量可以不一致,原表字段比目标表的字段数少。
3.1. 原表表结构+初始化数据
DROP table HERO;
-- Create table
create table HERO
(
SNO VARCHAR2(20) not null,
USER_NAME VARCHAR2(20),
AGE NUMBER(3),
PRIMARY KEY (SNO)
);
-- Add comments to the table
comment on table HERO is '英雄信息表';
-- Add comments to the columns
comment on column HERO.SNO is '英雄编码';
comment on column HERO.USER_NAME is '英雄名称';
comment on column HERO.AGE is '英雄年龄';
insert into HERO (SNO, USER_NAME, AGE) values ('1', '盖伦', '1');
insert into HERO (SNO, USER_NAME, AGE) values ('2', '小丑', '2');
insert into HERO (SNO, USER_NAME, AGE) values ('3', '莫甘娜', '3');
insert into HERO (SNO, USER_NAME, AGE) values ('4', '寒冰', '4');
insert into HERO (SNO, USER_NAME, AGE) values ('5', '剑圣', '5');
insert into HERO (SNO, USER_NAME, AGE) values ('6', '剑圣', '6');
3.2. 目标表表结构
DROP table HERO;
-- Create table
create table HERO
(
SNO VARCHAR2(20) not null,
USER_NAME VARCHAR2(20),
AGE NUMBER(3),
LLMEDSERIALNO VARCHAR2(20),
MAKEDATE DATE,
MAKETIME VARCHAR2(8),
PRIMARY KEY (SNO)
);
-- Add comments to the table
comment on table HERO is '英雄信息表';
-- Add comments to the columns
comment on column HERO.SNO is '英雄编码';
comment on column HERO.USER_NAME is '英雄名称';
comment on column HERO.AGE is '英雄年龄';
3.3. 连接字符串
vim oracle-more.json
{
"job": {
"content": [{
"reader": {
"name": "oraclereader",
"parameter": {
"where": "",
"connection": [
{
"querySql": [
"select a.*, (ROWNUM+72500072689218919812) LLMEDSERIALNO, to_date('2021-1-4','yyyy-mm-dd') MAKEDATE, to_char(SYSDATE,'hh24:mi:ss') MAKETIME from 用户大写.${originTableName} a where 1=1"
],
"jdbcUrl": ["jdbc:oracle:thin:@ip地址:1521:数据库名称"],
}],
"password": "用户名",
"username": "密码"
}
},
"writer": {
"name": "oraclewriter",
"parameter": {
"column": ["*"],
"connection": [{
"jdbcUrl": "jdbc:oracle:thin:@ip地址:1521:数据库名称",
"table": ["用户大写.${targetTableName}"]
}],
"password": "用户名",
"username": "密码"
}
}
}],
"setting": {
"speed": {
"channel": "1"
}
}
}
}
3.4. 数据同步前效果图
3.5. 数据同步命令
python /app/datax/bin/datax.py -p"-DtableName='HERO' -DoracletableName='HERO'" -j"-Xms2g -Xmx2g" /app/datax/job/dca/oracle-more.json
3.6. 数据同步后效果图
原表
目标表
3.7. 操作记录
[root@localhost job]#python /app/datax/bin/datax.py -p"-DtableName='HERO' -DoracletableName='HERO'" -j"-Xms2g -Xmx2g" /app/datax/job/dca/oracle-more.json
2021-02-02 18:07:06.575 [job-0] INFO JobContainer - PerfTrace not enable!
2021-02-02 18:07:06.575 [job-0] INFO StandAloneJobContainerCommunicator - Total 6 records, 241 bytes | Speed 24B/s, 0 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 0.000s | All Task WaitReaderTime 0.000s | Percentage 100.00%
2021-02-02 18:07:06.576 [job-0] INFO JobContainer -
任务启动时刻 : 2021-02-02 18:06:56
任务结束时刻 : 2021-02-02 18:07:06
任务总计耗时 : 10s
任务平均流量 : 24B/s
记录写入速度 : 0rec/s
读出记录总数 : 6
读写失败总数 : 0
四、实战场景2(第2种)
字段不一致有2种情况:
第二种:oracle 原表和目标表 名称一样,也可以不一样,但是,原表和目标表字段数量可以不一致,原表字段比目标表的字段数多。
4.1. 原表表结构+初始化数据
DROP table HERO;
-- Create table
create table HERO
(
SNO VARCHAR2(20) not null,
USER_NAME VARCHAR2(20),
AGE NUMBER(3),
LLMEDSERIALNO VARCHAR2(20),
MAKEDATE DATE,
MAKETIME VARCHAR2(8),
PRIMARY KEY (SNO)
);
-- Add comments to the table
comment on table HERO is '英雄信息表';
-- Add comments to the columns
comment on column HERO.SNO is '英雄编码';
comment on column HERO.USER_NAME is '英雄名称';
comment on column HERO.AGE is '英雄年龄';
insert into HERO (SNO, USER_NAME, AGE, LLMEDSERIALNO, MAKEDATE, MAKETIME) values ('1', '盖伦', '1', '72500072689218919813', '2021-01-04', '18:18:25');
insert into HERO (SNO, USER_NAME, AGE, LLMEDSERIALNO, MAKEDATE, MAKETIME) values ('2', '小丑', '2', '72500072689218919814', '2021-01-04', '18:18:25');
insert into HERO (SNO, USER_NAME, AGE, LLMEDSERIALNO, MAKEDATE, MAKETIME) values ('3', '莫甘娜', '3', '72500072689218919815', '2021-01-04', '18:18:25');
insert into HERO (SNO, USER_NAME, AGE, LLMEDSERIALNO, MAKEDATE, MAKETIME) values ('4', '寒冰', '4', '72500072689218919816', '2021-01-04', '18:18:25');
insert into HERO (SNO, USER_NAME, AGE, LLMEDSERIALNO, MAKEDATE, MAKETIME) values ('5', '剑圣', '5', '72500072689218919817', '2021-01-04', '18:18:25');
insert into HERO (SNO, USER_NAME, AGE, LLMEDSERIALNO, MAKEDATE, MAKETIME) values ('6', '剑圣', '6', '72500072689218919818', '2021-01-04', '18:18:25');
4.2. 目标表表结构
DROP table HERO;
-- Create table
create table HERO
(
SNO VARCHAR2(20) not null,
USER_NAME VARCHAR2(20),
AGE NUMBER(3),
PRIMARY KEY (SNO)
);
-- Add comments to the table
comment on table HERO is '英雄信息表';
-- Add comments to the columns
comment on column HERO.SNO is '英雄编码';
comment on column HERO.USER_NAME is '英雄名称';
comment on column HERO.AGE is '英雄年龄';
4.3. 连接字符串
vim oracle-short.json
{
"job": {
"content": [{
"reader": {
"name": "oraclereader",
"parameter": {
"where": "",
"connection": [
{
"querySql": [
"select a.SNO,a.USER_NAME,a.AGE from 用户大写.${originTableName} a where 1=1"
],
"jdbcUrl": ["jdbc:oracle:thin:@ip地址:1521:数据库名称"],
}],
"password": "用户名",
"username": "密码"
}
},
"writer": {
"name": "oraclewriter",
"parameter": {
"column": ["*"],
"connection": [{
"jdbcUrl": "jdbc:oracle:thin:@ip地址:1521:数据库名称",
"table": ["用户大写.${targetTableName}"]
}],
"password": "用户名",
"username": "密码"
}
}
}],
"setting": {
"speed": {
"channel": "1"
}
}
}
}
4.4. 数据同步前效果图
4.5. 数据同步命令
python /app/datax/bin/datax.py -p"-DtableName='HERO' -DoracletableName='HERO'" -j"-Xms2g -Xmx2g" /app/datax/job/dca/oracle-short.json
4.6. 数据同步后截图
原表
目标表
4.7. 数据同步操作记录
[root@localhost dca]# python /app/datax/bin/datax.py -p"-DtableName='HERO' -DoracletableName='HERO'" -j"-Xms2g -Xmx2g" /app/datax/job/dca/oracle-short.json
2021-02-02 18:27:18.498 [job-0] INFO JobContainer - PerfTrace not enable!
2021-02-02 18:27:18.499 [job-0] INFO StandAloneJobContainerCommunicator - Total 6 records, 25 bytes | Speed 2B/s, 0 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 0.000s | All Task WaitReaderTime 0.000s | Percentage 100.00%
2021-02-02 18:27:18.499 [job-0] INFO JobContainer -
任务启动时刻 : 2021-02-02 18:27:07
任务结束时刻 : 2021-02-02 18:27:18
任务总计耗时 : 10s
任务平均流量 : 2B/s
记录写入速度 : 0rec/s
读出记录总数 : 6
读写失败总数 : 0