DataX 将数据从MySql迁移到Oracle

举报
福州司马懿 发表于 2025/08/09 23:05:58 2025/08/09
【摘要】 DataX 数据迁移:从 MySQL 迁移到 Oracle 示例DataX 是阿里巴巴开源的一款高效稳定的离线数据同步工具,下面我将提供一个完整的从 MySQL 迁移到 Oracle 的配置示例。 1. 准备工作确保已安装 DataX 工具确保 MySQL 和 Oracle 数据库可访问确认有足够的权限读取源表和写入目标表 2. 完整配置示例以下是一个从 MySQL 迁移到 Oracle ...

DataX 数据迁移:从 MySQL 迁移到 Oracle 示例

DataX 是阿里巴巴开源的一款高效稳定的离线数据同步工具,下面我将提供一个完整的从 MySQL 迁移到 Oracle 的配置示例。

1. 准备工作

  • 确保已安装 DataX 工具
  • 确保 MySQL 和 Oracle 数据库可访问
  • 确认有足够的权限读取源表和写入目标表

2. 完整配置示例

以下是一个从 MySQL 迁移到 Oracle 的完整 JSON 配置文件示例:

{
  "job": {
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "username": "mysql_user",
            "password": "mysql_password",
            "column": ["id", "name", "age", "create_time", "update_time"],
            "splitPk": "id",
            "connection": [
              {
                "table": ["user_info"],
                "jdbcUrl": ["jdbc:mysql://mysql_host:3306/mysql_db?useSSL=false&serverTimezone=UTC"]
              }
            ]
          }
        },
        "writer": {
          "name": "oraclewriter",
          "parameter": {
            "username": "oracle_user",
            "password": "oracle_password",
            "column": ["ID", "NAME", "AGE", "CREATE_TIME", "UPDATE_TIME"],
            "preSql": ["truncate table USER_INFO"],
            "connection": [
              {
                "jdbcUrl": "jdbc:oracle:thin:@//oracle_host:1521/ORCL",
                "table": ["USER_INFO"]
              }
            ]
          }
        }
      }
    ],
    "setting": {
      "speed": {
        "channel": 3
      }
    }
  }
}

3. 配置说明

MySQL Reader 配置

  • username: MySQL 用户名
  • password: MySQL 密码
  • column: 要迁移的列名列表
  • splitPk: 用于数据分片的列(通常是主键)
  • table: 要迁移的表名
  • jdbcUrl: MySQL 连接 URL

Oracle Writer 配置

  • username: Oracle 用户名
  • password: Oracle 密码
  • column: 目标表列名(需与 MySQL 列对应)
  • preSql: 迁移前执行的 SQL(这里用于清空目标表)
  • table: 目标表名
  • jdbcUrl: Oracle 连接 URL(格式:jdbc:oracle:thin:@//host:port/service_name)

通用配置

  • channel: 并发数,根据机器性能调整

4. 执行迁移

将上述配置保存为 mysql_to_oracle.json,然后执行:

python datax.py mysql_to_oracle.json

5. 高级配置选项

类型转换

如果需要处理数据类型转换,可以在 writer 配置中添加 writeModebatchSize

"writer": {
  "name": "oraclewriter",
  "parameter": {
    "username": "oracle_user",
    "password": "oracle_password",
    "column": ["ID", "NAME", "AGE", "CREATE_TIME", "UPDATE_TIME"],
    "writeMode": "insert",
    "batchSize": 1024,
    "connection": [
      {
        "jdbcUrl": "jdbc:oracle:thin:@//oracle_host:1521/ORCL",
        "table": ["USER_INFO"]
      }
    ]
  }
}

处理大字段

对于 CLOB/BLOB 等大字段,需要特殊处理:

"column": [
  {"name": "ID", "type": "long"},
  {"name": "CONTENT", "type": "clob"}
]

6. 常见问题解决

  1. 字符集问题:确保 MySQL 和 Oracle 使用兼容的字符集(如 UTF-8)
  2. 日期格式:在 JDBC URL 中添加参数指定时区:
    jdbc:mysql://host:3306/db?useSSL=false&serverTimezone=UTC
    
  3. Oracle 驱动:确保 DataX 的 plugin/writer/oraclewriter/lib 目录下有正确的 Oracle JDBC 驱动(ojdbc8.jar 或类似版本)

7. 完整示例(带更多参数)

{
  "job": {
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "username": "mysql_user",
            "password": "mysql_password",
            "column": [
              {"name": "id", "type": "long"},
              {"name": "name", "type": "string"},
              {"name": "age", "type": "long"},
              {"name": "create_time", "type": "date"},
              {"name": "content", "type": "string"}
            ],
            "where": "create_time > '2023-01-01'",
            "splitPk": "id",
            "connection": [
              {
                "table": ["user_info"],
                "jdbcUrl": ["jdbc:mysql://mysql_host:3306/mysql_db?useSSL=false&serverTimezone=UTC"]
              }
            ]
          }
        },
        "writer": {
          "name": "oraclewriter",
          "parameter": {
            "username": "oracle_user",
            "password": "oracle_password",
            "column": [
              {"name": "ID", "type": "NUMERIC"},
              {"name": "NAME", "type": "VARCHAR"},
              {"name": "AGE", "type": "NUMERIC"},
              {"name": "CREATE_TIME", "type": "DATE"},
              {"name": "CONTENT", "type": "CLOB"}
            ],
            "writeMode": "insert",
            "batchSize": 1024,
            "preSql": ["truncate table USER_INFO"],
            "connection": [
              {
                "jdbcUrl": "jdbc:oracle:thin:@//oracle_host:1521/ORCL",
                "table": ["USER_INFO"]
              }
            ]
          }
        }
      }
    ],
    "setting": {
      "speed": {
        "channel": 5,
        "byte": 1048576
      },
      "errorLimit": {
        "record": 100,
        "percentage": 0.05
      }
    }
  }
}

这个示例包含了更多高级特性:

  • 类型映射
  • 数据过滤条件 (where)
  • 批量大小设置
  • 错误限制设置
  • 更详细的通道配置

希望这个示例能帮助你完成 MySQL 到 Oracle 的数据迁移任务!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。