FONG2
V2EX  ›  数据库

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

  •  2
     
  •   FONG2 · May 27, 2020 · 8638 views
    This topic created in 2362 days ago, the information mentioned may be changed or developed.

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

    dbeaver 也一样直接卡主。

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

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

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

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

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

    用程序写就用 Spring Batch,简单得很,Read,Write 分离。
    miao1007
    miao1007
    May 27, 2020 via iPhone❤️1
    54
    现在主流都用 postgres 了,mysql 好多标准抖不支持,半残一样
    x2ve
    x2ve
    May 27, 2020 via iPhone
    55
    kettle 和 datax 都用过 没啥区别 都满足楼主的需求
    Ravenddd
    Ravenddd
    May 27, 2020 via Android
    56
    之前也碰过 oracle 迁移 mysql 的情况,是写程序一个一个字段同步,主从库类似,差不多同步完数据时候,实时同步+业务代码迁移,真的蛋疼
    levelworm
    levelworm
    May 27, 2020 via Android
    57
    @miao1007 话说不知道为什么现在很多还是选 mysql 是不是历史原因
    angeltop
    angeltop
    May 28, 2020
    58
    用 Mysql 8.0 MGR 多主多写吧,前端提交代码改改,写需要稍微控制一下。
    Yinnfeng
    Yinnfeng
    May 28, 2020
    59
    datax + 1
    Oysmart
    Oysmart
    Jun 4, 2020
    60
    阿里巴巴去 Oracle 数据迁移同步工具(全量+增量,目标支持 MySQL/DRDS)
    https://github.com/alibaba/yugong
    不知道合不合适。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1089 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 96ms · UTC 18:38 · PVG 02:38 · LAX 10:38 · JFK 13:38
    ♥ Do have faith in what you're doing.