V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FONG2
V2EX  ›  数据库

有一个上百 G 的 Oracle 数据库,要整体迁移至 MySql,麻烦各位大佬给个思路

  •  2
     
  •   FONG2 · 2020-05-27 11:19:16 +08:00 · 7019 次点击
    这是一个创建于 1420 天前的主题,其中的信息可能已经有所发展或是发生改变。

    navicat 数据传输 /导出 sql 等功能,跑单表都内存溢出。

    dbeaver 也一样直接卡主。

    oracle 数据库表设计还很坑爹地用了浮点型做主键,然后利用序列自增

    自动化迁移 mysql 之后还要修改字段为整型才能改自增

    第 1 条附言  ·  2020-05-27 15:44:37 +08:00
    经过测试 应该可以处理好了 DataX 牛 X !
    60 条回复    2020-06-04 16:38:49 +08:00
    threegrandfather
        1
    threegrandfather  
       2020-05-27 11:21:02 +08:00
    你在想什么呢? oracle 迁移 mysql 。你自己找开发一起核对吧。慢慢的过每一个表每一个字段吧。
    duwan
        2
    duwan  
       2020-05-27 11:21:17 +08:00   ❤️ 5
    用 datax 啊,https://github.com/alibaba/DataX 迁移过近百 T 的数据
    dorothyREN
        3
    dorothyREN  
       2020-05-27 11:21:53 +08:00
    内存溢出 怕不是用的 32 位的 navicat 吧
    FONG2
        4
    FONG2  
    OP
       2020-05-27 11:22:05 +08:00
    @threegrandfather 我就是开发。。。小组没 dba 。。。字段倒是没问题,问题是数据怎么导出来导进去?我现在随便导一个大表 电脑都内存溢出。。。
    FONG2
        5
    FONG2  
    OP
       2020-05-27 11:22:42 +08:00
    @dorothyREN 16G 内存+12G 虚拟内存 跑不赢 13g 单表 直接报内存不足 卡死
    wuwukai007
        6
    wuwukai007  
       2020-05-27 11:22:56 +08:00 via Android
    oracle 里面的函数触发器怎么办
    FONG2
        7
    FONG2  
    OP
       2020-05-27 11:22:58 +08:00
    @duwan thx 我看看
    ohao
        8
    ohao  
       2020-05-27 11:23:09 +08:00
    2 楼正解,不行让阿里的工程师协助,先迁到阿里云,在迁移到自己的物理机
    duwan
        9
    duwan  
       2020-05-27 11:25:08 +08:00
    @FONG2 现有的插件要是满足不了你的业务,可以自己写插件,也很简单的。
    FONG2
        10
    FONG2  
    OP
       2020-05-27 11:25:57 +08:00
    @ohao 安全问题上不了云
    liqingcan
        11
    liqingcan  
       2020-05-27 11:28:02 +08:00
    换数据库成本太大了吧。
    fixend
        12
    fixend  
       2020-05-27 11:30:26 +08:00
    我当年是自己写程序,查出数据,再批量插入的,还好表不多,只是数据量大。
    70 、80G,转了我一天一夜。
    abcbuzhiming
        13
    abcbuzhiming  
       2020-05-27 12:04:39 +08:00
    这种如果没有工具的话。只能自己写程序,上游标,一行行的读然后转,然后插入
    rockyou12
        14
    rockyou12  
       2020-05-27 12:07:42 +08:00
    @FONG2 datax 是 etl 工具,阿里开发的,但不需要上云啊,你要迁也只能用这种东西稍微方便点
    levelworm
        15
    levelworm  
       2020-05-27 12:07:49 +08:00 via Android
    好奇一把,自己写 python 一点点挪动行不行?不过问题是怎么确认没漏没重呐?
    levelworm
        16
    levelworm  
       2020-05-27 12:09:38 +08:00 via Android
    又想了一下,按照天来拆和写程序挪怎么样?
    wangyzj
        17
    wangyzj  
       2020-05-27 12:13:25 +08:00
    datax 这类工具慢慢搞把
    没什么特别好的办法
    存储过程啥的估计还得单独想办法
    FONG2
        18
    FONG2  
    OP
       2020-05-27 12:26:13 +08:00
    @fixend 我的也就几个大表数据特别多,其他的可以 navicat 一键迁移
    FONG2
        19
    FONG2  
    OP
       2020-05-27 12:27:10 +08:00
    @rockyou12 我说上云,回复的是 8L 的建议
    cstj0505
        20
    cstj0505  
       2020-05-27 12:27:23 +08:00 via Android
    分两部分,表结构迁移,这部分如果没工具就导出慢慢改,确保逻辑一致。
    导数据,很多工具都行
    ant2017
        21
    ant2017  
       2020-05-27 12:31:42 +08:00 via Android
    kettle 可以吧
    MintZX
        22
    MintZX  
       2020-05-27 12:31:48 +08:00 via iPhone
    几百 G 也不是很多,csv 分页弄呗
    fewok
        23
    fewok  
       2020-05-27 12:43:53 +08:00
    就说停机不???
    1cming
        24
    1cming  
       2020-05-27 12:50:57 +08:00   ❤️ 1
    DATAX 好评加一 迁移过上亿数据
    xichen
        25
    xichen  
       2020-05-27 12:51:44 +08:00
    试试 azure datafactory ?
    soulzz
        26
    soulzz  
       2020-05-27 12:57:20 +08:00
    虽然我用的 mongoDb,但也应该差不多。之前我遇到的情况是迁移 2000 万记录的单表,整体查出来肯定爆内存,
    用游标十几分钟就能全表迁移走
    dog82
        27
    dog82  
       2020-05-27 13:00:22 +08:00
    分步骤做,先迁移数据字典和数据量小的表。
    大表写脚本或代码迁移,一般系统里的大表不会太多。
    robinlovemaggie
        28
    robinlovemaggie  
       2020-05-27 13:12:27 +08:00
    疫情的无情都比不上 Oracle 业界毒瘤的绝情(降个价会死人吗?)
    hantsy
        29
    hantsy  
       2020-05-27 13:13:07 +08:00   ❤️ 1
    如果用了大量专有的数据库特性( Function,Procedure 等),任何自动迁移工具都是没用的。

    以前迁移一个遗留系统,200G 的数据库,从 Borland Firebird 到 MySQL,基本是手写一个程序来跑的,当然为了适应新的程序,新的数据库 Schemas 是改动不少,数据库脚本不可能完成。
    lithiumii
        30
    lithiumii  
       2020-05-27 13:14:55 +08:00 via Android
    又不要 etl,这不是两个 for 循环的事儿吗?
    leqoqo
        31
    leqoqo  
       2020-05-27 13:17:05 +08:00
    1,更换更牛的硬件或者优化数据库导出配置.
    2,单表测试一次导出多少数据不会 gg,写程序生成这样的 sql 脚本,找一个你能接受的时间
    ... offset 0 limit 1000000;
    ... offset 100000 limit 100000;
    3,创建 mysql 数据库,写建库表脚本,
    4,用程序合并表的导出的这些文本文件为一个文件.
    5,用程序生成 mysql load file 脚本, disable 表索引
    6,enable 索引,
    以上操作注意留够足够的硬盘空间.
    weizhen199
        32
    weizhen199  
       2020-05-27 13:26:47 +08:00
    DB 在 SSD 上 随便写个程序 select insert 跑满 1000M 网卡应该都不是问题吧
    aladdindingding
        33
    aladdindingding  
       2020-05-27 13:37:57 +08:00
    python 的生成器
    podel
        34
    podel  
       2020-05-27 13:40:11 +08:00
    阿里云有一个 叫做 DTS 的数据传输服务,可以支持不同数据库之间传输。
    Marstin
        35
    Marstin  
       2020-05-27 13:44:38 +08:00
    导出 sql 是什么鬼,不是导 dmp 吗
    ctOS1H
        36
    ctOS1H  
       2020-05-27 14:06:48 +08:00
    datax 可以
    tiiis
        37
    tiiis  
       2020-05-27 14:34:17 +08:00
    1.datax
    passerbytiny
        38
    passerbytiny  
       2020-05-27 14:36:06 +08:00 via Android
    你这不是迁移,是数据割接,光靠数据库的工具是很难成功的。
    angeltop
        39
    angeltop  
       2020-05-27 14:48:42 +08:00
    阿里云 DTS 吧,上云后再传下来也行
    weifuqiao1989
        40
    weifuqiao1989  
       2020-05-27 15:09:27 +08:00
    说下我用的比较多的工具
    kettle 这样的 etl 工具 适用表不多的情况 比较好用,msdts 也能用

    ESF Database Migration Toolkit - Professional
    这个比较简单
    admin7785
        41
    admin7785  
       2020-05-27 15:48:33 +08:00
    kettle 可以试一下
    xsm1890
        42
    xsm1890  
       2020-05-27 15:56:24 +08:00
    去 IOE 不是这么去的啊。我是不会建议这么做的。直接把数据迁移到 MySQL 不是问题,问题是业务怎么兼容,毕竟业务第一。如果是生产环境,真的不建议直接迁过去,后面会留下很大的坑的。Oracle 随便几个存储过程就可能让你到了 MySQL 后重构代码。好的去 ioe 做法是,慢慢的把业务一个一个外迁,同时保证两份数据,所有项目迁完后,再把 Oracle 去掉。业务第一。
    FONG2
        43
    FONG2  
    OP
       2020-05-27 16:36:20 +08:00   ❤️ 1
    @xsm1890 你说的我都懂
    代码已经在处理了,暂时看来问题不大
    再说了去 ioe 是 zz 任务,上头拍桌子要求搞
    你跟他说技术说风险就是找骂
    Hilalum
        44
    Hilalum  
       2020-05-27 17:12:20 +08:00
    想起我实习的时候干过这活哈哈哈哈
    wanguorui123
        45
    wanguorui123  
       2020-05-27 17:15:45 +08:00
    MySQL 的性能顶不住吧
    LightLolo
        46
    LightLolo  
       2020-05-27 17:31:52 +08:00
    kettle +1
    xjmroot
        47
    xjmroot  
       2020-05-27 17:45:17 +08:00
    用过 kettle 做 mysql 到 postgres 的迁移,还不错
    ncwtf
        48
    ncwtf  
       2020-05-27 18:03:18 +08:00
    streamsets 也行吧
    sun1991
        49
    sun1991  
       2020-05-27 18:55:39 +08:00
    @FONG2 说到去 IOE, 难道你老板不知道 MySQL 也是 Oracle 家的?
    FONG2
        50
    FONG2  
    OP
       2020-05-27 20:54:04 +08:00 via iPhone
    @sun1991 情况不太一样别用互联网企业思维
    国企去 ioe 就是单纯的去 ioe
    levelworm
        51
    levelworm  
       2020-05-27 22:21:09 +08:00 via Android
    @hantsy 这个给力啊,不知道 borland 支持这么大的数据库
    levelworm
        52
    levelworm  
       2020-05-27 22:28:32 +08:00 via Android
    @FONG2 银行还是电信?感觉 100GB 有点小
    hantsy
        53
    hantsy  
       2020-05-27 22:48:20 +08:00
    @FONG2 数据导出导入当然要分批啦。

    用程序写就用 Spring Batch,简单得很,Read,Write 分离。
    miao1007
        54
    miao1007  
       2020-05-27 23:01:32 +08:00 via iPhone   ❤️ 1
    现在主流都用 postgres 了,mysql 好多标准抖不支持,半残一样
    x2ve
        55
    x2ve  
       2020-05-27 23:13:06 +08:00 via iPhone
    kettle 和 datax 都用过 没啥区别 都满足楼主的需求
    Ravenddd
        56
    Ravenddd  
       2020-05-27 23:31:20 +08:00 via Android
    之前也碰过 oracle 迁移 mysql 的情况,是写程序一个一个字段同步,主从库类似,差不多同步完数据时候,实时同步+业务代码迁移,真的蛋疼
    levelworm
        57
    levelworm  
       2020-05-27 23:54:42 +08:00 via Android
    @miao1007 话说不知道为什么现在很多还是选 mysql 是不是历史原因
    angeltop
        58
    angeltop  
       2020-05-28 09:34:09 +08:00
    用 Mysql 8.0 MGR 多主多写吧,前端提交代码改改,写需要稍微控制一下。
    limitsy
        59
    limitsy  
       2020-05-28 09:55:34 +08:00
    datax + 1
    Oysmart
        60
    Oysmart  
       2020-06-04 16:38:49 +08:00
    阿里巴巴去 Oracle 数据迁移同步工具(全量+增量,目标支持 MySQL/DRDS)
    https://github.com/alibaba/yugong
    不知道合不合适。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1007 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 22:03 · PVG 06:03 · LAX 15:03 · JFK 18:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.