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

全库数据迁移,咨询个靠谱的解决方案。

  •  1
     
  •   xiaoleis · 2020-04-02 16:00:25 +08:00 · 2818 次点击
    这是一个创建于 1730 天前的主题,其中的信息可能已经有所发展或是发生改变。

    将 A 数据库的数据全部迁移至 B 数据库:

    1. 均为 Oracle 数据库
    2. B 库表结构的字段精度、唯一约束、主键都可能有改动。 表名一致。
    3. 涉及大约四千张表。
    第 1 条附言  ·  2020-04-02 16:48:59 +08:00
    4. 大约 2000 个 g 的数据。
    5. 表结构变更有什么更好的处理方式呢?
    6. 新的应用版本运行在 B 库上, 需将 A 库的数据迁移到 B 库上, 切换数据源。
    35 条回复    2020-04-18 19:18:49 +08:00
    sunziren
        1
    sunziren  
       2020-04-02 16:14:57 +08:00
    四千张表,我了个乖乖。
    xiaoleis
        2
    xiaoleis  
    OP
       2020-04-02 16:26:08 +08:00
    @sunziren 对,大概 2000 个 g 的数据, 头大。
    xcstream
        3
    xcstream  
       2020-04-02 16:28:15 +08:00
    硬盘镜像
    sun1991
        4
    sun1991  
       2020-04-02 16:29:15 +08:00
    直接拷贝数据库文件, 挂载到新的 instance, 然后再改表结构?
    wunonglin
        5
    wunonglin  
       2020-04-02 16:30:38 +08:00
    阿里云 dts
    rrfeng
        6
    rrfeng  
       2020-04-02 16:31:33 +08:00   ❤️ 1
    1. 备份做好
    2. 能停机迁移就停机迁移,不要强行 0 停机时间。
    dexterzzz
        7
    dexterzzz  
       2020-04-02 16:37:01 +08:00 via Android
    stand by 啊
    enrolls
        8
    enrolls  
       2020-04-02 16:38:54 +08:00
    alibaba/DataX 这个看看
    xiaoleis
        9
    xiaoleis  
    OP
       2020-04-02 16:41:25 +08:00
    @rrfeng 每天都有备份。还涉及及表结构的变动。
    xpresslink
        10
    xpresslink  
       2020-04-02 16:43:03 +08:00
    复制库文件,到新服务器挂 instance 最省事儿
    xiaoleis
        11
    xiaoleis  
    OP
       2020-04-02 16:43:39 +08:00
    @wunonglin
    @enrolls 涉及到表结构的变更,有什么更好的处理策略吗?
    chendy
        12
    chendy  
       2020-04-02 16:49:54 +08:00
    既然是 oracle,找 oracle 的人或者找个做 oracle 的公司来迁移?…
    wangyzj
        13
    wangyzj  
       2020-04-02 16:52:45 +08:00
    oracle 到 oracle ?
    xiaoleis
        14
    xiaoleis  
    OP
       2020-04-02 16:53:40 +08:00
    @wangyzj 是,oracle ---> oracle
    wangyzj
        15
    wangyzj  
       2020-04-02 16:59:49 +08:00
    @xiaoleis 用 tsm 或者其他工具恢复一个一模一样的库作为 b
    然后跑 dll 修改脚本
    对 b 做日志追加数据同步
    上线前做最后的 dll 变更和索引重建
    直接切换到 b
    gemini767
        16
    gemini767  
       2020-04-02 17:06:13 +08:00
    选择了 oracle 当然请人迁移啊!
    长痛就是请人维护
    短痛就是去 O,如果强 OLAP 可以选 pg
    psirnull
        17
    psirnull  
       2020-04-02 17:48:38 +08:00
    1 、数据泵导出 初始化
    2 、OGG 同步追平
    3 、申请检修,切换业务数据源
    4 、验证
    5 、停止 OGG
    6 、原数据库停用,下线
    slyang5
        18
    slyang5  
       2020-04-02 17:52:44 +08:00
    迁移的时候 数据库 还要对外服务吗 ???
    koolob
        19
    koolob  
       2020-04-02 18:29:47 +08:00
    感觉买 oracle 的服务应该可以。如果出问题,可以赔偿损失。
    saximoer
        20
    saximoer  
       2020-04-02 21:50:02 +08:00
    停机时间要求多少呢?
    不同停机时间的方案不一样
    zlowly
        21
    zlowly  
       2020-04-02 22:50:21 +08:00
    17 楼是比较稳妥的方案。
    特点是业务系统停机时间比较短,特别是用 OGG 来追平数据,可以较好的适应对你需求里的 B 表结构可能发生变更这个特殊点。
    hantsy
        22
    hantsy  
       2020-04-02 22:55:42 +08:00
    找 Oracle 吧,有 Oracle 数据库,应该有服务可以打折吧。
    yiyi11
        23
    yiyi11  
       2020-04-03 05:22:04 +08:00 via Android
    17 楼方案加一
    公认标准方案。
    我试过几 T 的数据量都是这样迁移,不过只有几十张表,单表高达 21 亿条数据,依然很稳。
    xiaoleis
        24
    xiaoleis  
    OP
       2020-04-03 09:03:58 +08:00
    @slyang5
    @saximoer 计划的停机时间是 一晚上, 晚八点到早八点
    xiaoleis
        25
    xiaoleis  
    OP
       2020-04-03 09:06:53 +08:00
    @zlowly
    @yiyi11 现在统计的结果是有 700 多张表发生了结构变更。如果因为结构变更,数据冲突无法插入,就不好办了。
    xiaoleis
        26
    xiaoleis  
    OP
       2020-04-03 09:08:10 +08:00
    @hantsy 要是有经费。 ^-----^
    boshok
        27
    boshok  
       2020-04-03 09:22:44 +08:00
    @psirnull 可以
    realpg
        28
    realpg  
       2020-04-03 11:15:19 +08:00
    都选 oracle 了还能没有经费……
    realpg
        29
    realpg  
       2020-04-03 11:16:55 +08:00
    另外,也不是不能没有经费。
    如果没有经费,这个迁移项目最值钱的精髓就是方案设计了……
    方案做万无一失,怎么也值几十 K
    会做的人不可能让你白嫖或者打折
    LightLolo
        30
    LightLolo  
       2020-04-03 12:11:07 +08:00
    可以 dump 分表分块导出
    可以 OGG 同步搞
    可以用 kettle 做数据抽取
    slyang5
        31
    slyang5  
       2020-04-03 17:12:35 +08:00
    @xiaoleis 你不是都 停机导数据了么? 会什么会有结构变更???
    zlowly
        32
    zlowly  
       2020-04-05 03:27:11 +08:00
    @xiaoleis 对于如果因为结构变更,数据冲突无法插入,最坏的结果,也就是 B 库不能用而已,这个时候还没切换,A 库还是正常提供业务的,顶多就是浪费了时间而已,慢慢再梳理调整 B 库数据结构罢了。
    zlowly
        33
    zlowly  
       2020-04-05 03:56:58 +08:00
    大约的流程就是
    0 、准备好 B 库以及变更数据结构脚本,A 、B 库上安装 OGG 并做好相关配置
    1 、A 上启动 OGG 抽取投递进程
    2 、A 库上导出数据,传输到 B 库导入
    3 、B 库上运行变更数据结构脚本
    4 、B 库上启动 OGG 应用进程
    5 、停止业务应用,等待 A 、B 库上 OGG 完成所有抽取投递应用
    6 、更改业务数据源到 B 库
    7 、启动业务应用
    可以看到这种方案只在最后三步才需要停顿业务,前面实施时间完全可以很充裕(特别是 2T 数据量的导入导出一个周末,稍微不顺利还真不一定搞得定),所以真正对业务影响比较短。这些过程,应该先进行演练,最后三步用业务测试环境来进行最后验证。如果 AB 数据结构变化过大,单靠 OGG 也不一定能适应,就还需要其它方案来弥补。
    xiaoleis
        34
    xiaoleis  
    OP
       2020-04-07 16:04:04 +08:00
    @zlowly 感谢回复。已经在做技术方案, 实际的情况可能比描述的还要复杂。
    065535
        35
    065535  
       2020-04-18 19:18:49 +08:00
    阿里的 DTS,很棒的迁移工具
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2581 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 83ms · UTC 05:31 · PVG 13:31 · LAX 21:31 · JFK 00:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.