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

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

  •  2
     
  •   FONG2 · 40 天前 · 5845 次点击
    这是一个创建于 40 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    dbeaver 也一样直接卡主。

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

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

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

    以前迁移一个遗留系统,200G 的数据库,从 Borland Firebird 到 MySQL,基本是手写一个程序来跑的,当然为了适应新的程序,新的数据库 Schemas 是改动不少,数据库脚本不可能完成。
    lithiumii
        30
    lithiumii   40 天前 via Android
    又不要 etl,这不是两个 for 循环的事儿吗?
    leqoqo
        31
    leqoqo   40 天前
    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   40 天前
    DB 在 SSD 上 随便写个程序 select insert 跑满 1000M 网卡应该都不是问题吧
    aladdindingding
        33
    aladdindingding   40 天前
    python 的生成器
    podel
        34
    podel   40 天前
    阿里云有一个 叫做 DTS 的数据传输服务,可以支持不同数据库之间传输。
    Marstin
        35
    Marstin   40 天前
    导出 sql 是什么鬼,不是导 dmp 吗
    ctOS1H
        36
    ctOS1H   40 天前
    datax 可以
    tiiis
        37
    tiiis   40 天前
    1.datax
    passerbytiny
        38
    passerbytiny   40 天前 via Android
    你这不是迁移,是数据割接,光靠数据库的工具是很难成功的。
    angeltop
        39
    angeltop   40 天前
    阿里云 DTS 吧,上云后再传下来也行
    weifuqiao1989
        40
    weifuqiao1989   40 天前
    说下我用的比较多的工具
    kettle 这样的 etl 工具 适用表不多的情况 比较好用,msdts 也能用

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

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