有一个上百 G 的 Oracle 数据库,要整体迁移至 MySql,麻烦各位大佬给个思路 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FONG2
V2EX    数据库

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

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

    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 多主多写吧,前端提交代码改改,写需要稍微控制一下。
    Yinnfeng
        59
    Yinnfeng  
       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     Solana     5590 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 03:02 PVG 11:02 LAX 19:02 JFK 22:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86