通过datax批量从oracle迁移数据到oracle

项目背景

https://blog.csdn.net/weixin_41561946/article/details/106957890

说明

1、datax软件已经在/home/oracle目录下安装好
2、将oracle_to_oracle_sigle.sh放在/home/oracle/datax/script下
3、将oracle_to_oracle.json放在/home/oracle/datax/job
4、将table_name.txt放在/home/oracle/datax/job

shell脚本

#!/bin/bash
#function:
#version:0.3
#author:lineqi
#crt_time:2020-04-26
#迁移思路
#1、查询需要同步的表生成格式为schema.table_name:schema.table_name,该步骤先通过手动实现
#第一个schema为源库中的schema,第二个schema为目标库中的schema
#2、将第一步生成好的配置文件存放在table_name.txt中
#datax命令调用案例
#eg:/opt/datax/bin/datax.py -p "-Dsource_reader=${v_gbase_reader}"  /opt/datax/job/mysqltest.json >> /opt/datax/log/table_name_2020-04-26.log

#定义文件与命令执行路径

v_table_list='/home/oracle/datax/job/table_name.txt'
v_exec_command='/home/oracle/datax/bin/datax.py'
v_path_json='/home/oracle/datax/job/oracle_to_oracle.json'
v_path_log='/home/oracle/datax/log/'

#定义常用参数
let v_split_num=60000
let v_start_num=0
let v_end_num=0
v_source_table_name=''
v_target_table_name=''
v_sync_start_time=`date -d "today" +"%Y-%m-%d-%H-%M-%S"`

#定义源数据库的连接方式
v_gbase_user='user'
v_gbase_pwd='password'
v_gbase_conn='jdbc:oracle:thin:@xx.xx.xx.xx:1521:实例名'
v_gbase_reader='oraclereader'

#定义目标数据库的连接方式
v_mysql_user='user'
v_mysql_pwd='password'
v_mysql_reader='oraclewriter'
v_mysql_conn='jdbc:oracle:thin:@xx.xx.xx.xx:11521:实例名'

#从table_name.txt获取表名、表记录数并计算分片

for table_name in `cat $v_table_list`
do
		#get table_name
        	v_source_table_name=`echo $table_name|awk -F ":" '{print $1}'`
		v_target_table_name=`echo $table_name|awk -F ":" '{print $2}'`
		
			$v_exec_command -p "\
			-Dsource_reader=${v_gbase_reader}  \
			-Dsource_db_user=${v_gbase_user} \
			-Dsource_db_pwd=${v_gbase_pwd} \
			-Dsource_db_conn=${v_gbase_conn} \
			-Dsource_table_name=${v_source_table_name} \
			-Dtarget_reader=${v_mysql_reader}  \
			-Dtarget_db_user=${v_mysql_user} \
			-Dtarget_db_pwd=${v_mysql_pwd} \
			-Dtarget_db_conn=${v_mysql_conn} \
			-Dtarget_table_name=${v_target_table_name} \
			" $v_path_json >>"$v_path_log"$v_source_table_name"$v_sync_start_time".log 2>&1

		   # echo $v_table_name,$v_start_num,$v_end_num

done

datax配置文件

{
    "job": {
        "setting": {
            "speed": {
                "byte": 1048576
            },
            "errorLimit": {
                "record": 0,
                "percentage": 0.02
            }
        },
        "content": [
            {
                "reader": {
                    "name": "$source_reader",
                    "parameter": {
                        "username": "$source_db_user",
                        "password": "$source_db_pwd",
			"column": ["*"],
                        "connection": [
                            {
                                "table": [
                                    "$source_table_name"
                                ],
                                "jdbcUrl": [
                                    "$source_db_conn"
                                ]
                            }
                        ],
                        "fetchSize": 1024
                    }
                },
				"writer": {
                    "name": "$target_reader",
                    "parameter": {
                        "username": "$target_db_user",
                        "password": "$target_db_pwd",
        				"session": [],
        				"preSql": [],
                        "column": ["*"],
                        "connection": [
                            {
                                "table": [
                                    "$target_table_name"
                                ],
				"jdbcUrl": "$target_db_conn"
                            }
                        ]
                    }
                }
            }
        ]
    }
}

表配置文件

SOURCE_SCHEMA.TABLE_NAME:TARGET_SCHEMA.TABLE_NAME
说明:
SOURCE_SCHEMA源库的schema名
TABLE_NAME源库的表名,正常情况与目标库的表名一致
TARGET_SCHEMA目标库的schema名
以上格式的配置内容同步sql语句生成即可。

总结:

1、datax的配置文件模板是从gbase到mysql同步模板拷贝过来的,所以有些参数没有改
2、批量同步适合小表,这里一次性同步了70多张小表,每张表不到20万条记录,90秒同步一个表,与用kettle 同步的所用时间差不多。
3、同步时需要注释源库和目录库的字符集问题,这里源库与目标库是一致的,所以在#定义数据库的连接方式时,并没有指定字符集

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于将数据从MySQL迁移Oracle,可以使用DataX工具来实现。DataX是一个开源的数据同步框架,可以用于不同数据库之间的数据迁移。下面是具体的步骤: 1. 了解DataX:首先,你需要了解DataX的基本概念和使用方式。DataX是一个基于插件化的架构,可以支持不同的数据源和目标数据库,包括MySQL和Oracle。 2. 下载和安装DataX:在进行数据迁移之前,你需要下载并安装DataX工具。你可以从DataX的官方网站或GitHub上获取最新的安装包。 3. 配置DataX作业:接下来,你需要创建一个DataX的作业配置文件,用于指定源数据库和目标数据库的连接信息、表名、字段映射等。在配置文件中,你需要指定源数据库为MySQL,目标数据库为Oracle,并提供相应的连接信息。 4. 执行DataX作业:配置完成后,你可以使用DataX命令行工具来执行该作业。DataX会根据配置文件中的信息,将数据从MySQL读取并写入到Oracle中。 需要注意的是,在执行DataX作业之前,你需要确保源数据库和目标数据库的连接正常,并且具有相应的权限。此外,如果源数据库和目标数据库的表结构不一致,你可能需要进行字段映射和转换,以确保数据能够正确地导入到目标数据库中。 这是一个简单的示例,用于说明如何使用DataX数据从MySQL迁移Oracle。具体的步骤和配置可能会因实际情况而有所不同,请根据你的具体需求和环境进行相应的调整和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [DATAX 数据迁移 oracle-oracle](https://blog.csdn.net/weixin_42418589/article/details/126019261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [使用datax数据从mysql迁移oracle](https://blog.csdn.net/qq_38390669/article/details/109524637)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值