使用dataX全量迁移Oracle到MySQL

1    273    4

👉 本文共约2803个字,系统预计阅读时间或需11分钟。

有关dataX更多内容请参考:https://www.xmmup.com/alikaiyuanetlgongjuzhidataxhedatax-webjieshao.html

环境准备

使用dataX全量迁移Oracle到MySQL

Oracle和MySQL环境准备

dataX环境准备

使用dataX全量迁移Oracle到MySQL

使用dataX全量迁移Oracle到MySQL

Oracle端数据初始化

最终,在Oracle端共包括16张表,2个视图,其中2个表TSRSLOB和IMAGE_LOB包括了blob和clob字段。

生成MySQL端DDL语句

可以使用Navicat的数据传输功能或其它工具直接从Oracle端生成MySQL类型的建表语句如下:

DDL语句如下:

dataX-web配置

1、新增项目

使用dataX全量迁移Oracle到MySQL

2、新增Oracle和MySQL数据源,并测试通过

使用dataX全量迁移Oracle到MySQL

使用dataX全量迁移Oracle到MySQL

使用dataX全量迁移Oracle到MySQL

3、新增datax任务模板

使用dataX全量迁移Oracle到MySQL

4、构建批量任务

注意:任务构建每次只能建立一张表的迁移,所以,我们需要选择批量构建。

使用dataX全量迁移Oracle到MySQL

使用dataX全量迁移Oracle到MySQL

使用dataX全量迁移Oracle到MySQL

然后就是选择job的模板,最后就是批量创建任务。

image-20220704151214545

创建完成后,点击任务管理:

使用dataX全量迁移Oracle到MySQL

可以看到,基本是每张表1个任务。任务构建成功后,默认不开启执行调度。

我们可以在后台更新数据库表来批量操作:

更新完成后,查看界面:

使用dataX全量迁移Oracle到MySQL

等到15:18分后,刷新一下界面,如下:

使用dataX全量迁移Oracle到MySQL

发现,除了ORDERS表和PRODUCT_INFORMATION表后,其它都迁移成功了。

PRODUCT_INFORMATION表错误解决

日志内容:

image-20220704152431600

仔细阅读,核心错误内容如下:

[AnalysisStatistics.analysisStatisticsLog-53] com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-12], Description:[不支持的数据库类型. 请注意查看 DataX 已经支持的数据库类型以及数据库版本.]. - 您的配置文件中的列配置信息有误. 因为DataX 不支持数据库读取这种字段类型. 字段名:[WARRANTY_PERIOD], 字段名称:[-103], 字段Java类型:[oracle.sql.INTERVALYM]. 请尝试使用数据库函数将其转换datax支持的类型 或者不同步该字段 .

查询Oracle端和MySQL端的数据类型:

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

解决办法:"to_char(WARRANTY_PERIOD)"

如下:

使用dataX全量迁移Oracle到MySQL

然后,重新同步该表即可。

image-20220704152841967

使用dataX全量迁移Oracle到MySQL

ORDERS表错误解决

报错:

核心错误:

Exception in thread "taskGroup-0" com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-07], Description:[读取数据库数据失败. 请检查您的配置的 column/table/where/querySql或者向 DBA 寻求帮助.]. - 执行的SQL为: select "ORDER_ID","ORDER_DATE","ORDER_MODE","CUSTOMER_ID","ORDER_STATUS","ORDER_TOTAL","SALES_REP_ID","PROMOTION_ID","WAREHOUSE_ID","DELIVERY_TYPE","COST_OF_DELIVERY","WAIT_TILL_ALL_AVAILABLE","DELIVERY_ADDRESS_ID","CUSTOMER_CLASS","CARD_ID","INVOICE_ADDRESS_ID" from ORDERS 具体错误信息为:com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-12], Description:[不支持的数据库类型. 请注意查看 DataX 已经支持的数据库类型以及数据库版本.]. - 您的配置文件中的列配置信息有误. 因为DataX 不支持数据库读取这种字段类型. 字段名:[ORDER_DATE], 字段名称:[-102], 字段Java类型:[oracle.sql.TIMESTAMPLTZ]. 请尝试使用数据库函数将其转换datax支持的类型 或者不同步该字段 .

分析:ORDERS.ORDER_DATE

Oracle端类型:TIMESTAMP(6) WITH LOCAL TIME ZONE

MySQL端类型:datetime

解决:"cast(ORDER_DATE as date)"

使用dataX全量迁移Oracle到MySQL

然后重新运行一次:

使用dataX全量迁移Oracle到MySQL

数据校验

所有数据全量迁移完成,如下:

使用dataX全量迁移Oracle到MySQL

使用dataX全量迁移Oracle到MySQL

使用dataX全量迁移Oracle到MySQL

全量数据迁移完成。

对于blob和clob查看:

使用dataX全量迁移Oracle到MySQL

可以看到,数据也能正常同步!!!

总结

1、任务构建成功后,默认不开启执行调度

2、不支持字段类型:INTERVAL YEAR(2) TO MONTH、TIMESTAMP(6) WITH LOCAL TIME ZONE,可以分别使用函数进行转换,例如:“INTERVAL YEAR(2) TO MONTH”转换为“"to_char(WARRANTY_PERIOD)"”,而“TIMESTAMP(6) WITH LOCAL TIME ZONE”转换为“"cast(ORDER_DATE as date)"

3、BLOB和CLOB也可以同步。

4、优势:dataX全量迁移速度比OGG快很多倍!!!

    头像

    小麦苗

    学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

    您可能还喜欢...

    1 条回复

    1. 头像 dba说道:

      请问老师的secureCRT这个配置是怎么设置的

    发表评论

    您的电子邮箱地址不会被公开。

    5 × 4 =

     

    嘿,我是小麦,需要帮助随时找我哦
    • 18509239930
    • 个人微信

    • 麦老师QQ聊天
    • 个人邮箱
    • 点击加入QQ群
    • 个人微店

    • 回到顶部
    返回顶部