大型数据库跨平台迁移总结

一.前言

以下为大型数据库跨平台迁移的一个实际案例,采用了MV(物化视图)Trigger以及EXP/IMP相结合处理迁移数据的方式,最大程度减少迁移停机时间 。总结文档中可能有写的不妥的地方,请大家指正。


二.环境

软件环境

源数据库: Windows2000+Oracle9.2.0.1

目标数据库:Linux AS3.0 + Oracle9.2.0.7

硬件环境

源数据库: DELL PE6600 8GMem,4*2.8GXeon CPU. CX300 Storage

目标数据库:DELL PE6600 8GMem,4*2.8GXeon CPU. CX300 Storage

数据库信息

系统后台数据库,数据库中包含3个主要用户AA ,BB, CC,

OLTP运行模式。数据库总Table数量558(其中一部分为备用表,暂时没有数据),还包括View, Trigger, Sequences, Types, Resource Plans等。数据库包含的数据类型有varchar2,number, blob, date ( 嚯嚯,还好没有Long类型,不过有也可以处理的) 。数据库磁盘占用空间总大小为300G 。实际数据量大小接近180G .

迁移要求

WINNT平台下的Oracle9.2.0.1数据库结构及数据全部迁移到RH Linux AS3.0平台下的Oracle9.2.0.7 停机时间不多于6小时。

三.规划及实施阶段

558Table中有3个巨大的含有blob字段的表,其它Table数据量都一般,可以在允许的停机时间(6小时)exp/imp完成,三个Table中我们以其中一个最大的Table为例来讲解,其它2Table效仿即可。

Table名称: AA.streamdata

Exp 大小: 130G .

Exp耗时: 7~10小时

AA.streamdata表太大,不能在停机时间范围内完成,考虑使用MV Log方式.

具体规划及实施步骤如下:

1. exp/imp大表之前,请注意要建立源数据库中的streamdata表的mv log ,建立mv log之后对streamdata的操作(update ,delete,insert)都会被记录在mv log中,由于mv log中记录的是操作,不是数据,所以还需要从mv log refresh来将真正变化的数据部分存在MV 中,所以还需要在目标数据库(Linux系统平台)中建立对应streamdata表变化部分的MV . 还有一点需要注意,mv log中的delete 操作不会被refresh到变化部分的MV, 所以需要一个Trigger来记录源数据库中streamdata表的删除记录。 具体步骤如下:

a. 在源Windows PDM正式数据库上建立streamdataTrigger, 用于纪录删除这个表的纪录时候的Log (log表名称为streamdata_del_log), 然后建立Trigger(简单,就不写了,DIY)

b. 在源Windows PDM正式数据库上建立streamdata 表的MV Log (用于存储导入导出期间更新,插入的数据行) . 可以看到mlog$_streamdata 物化视图日志表。

SQL> create materialized view log on aa.streamdata

c. 在目标库(Linux-Base)上建立DB Link 连接到源PDM(WINNT)正式库 .

SQL>create public database link pdm connect to aa identified by aa using ‘pdm_win’ ;

d. 在目标库(Linux-Base)上建立一个新的Table: aa.streamdata_mv, 用于存储源数据中的数据变化(mv log得来的)

CREATE MATERIALIZED VIEW "AA"."STREAMDATA_MV" ON PREBUILT TABLE REFRESH FAST ON DEMAND AS select * from aa.streamdata@pdm ;

2. 准备开始导出(exp)正式库中 aa.streamdata 的数据 , 导出期间数据库处于运行状态,所以可能有部分纪录会有更新, 插入, 删除动作 . 这些动作产生的行都会被记录到mv log . 在最后刷新时纪录到STREAMDATA_MV,最后作数据同步处理。

Exp脚本例子(子查询导出)

exp "'sys/sys as sysdba'" QUERY="WHERE streamid>=1 and streamid<50000" buffer=8192 tables=aa.streamdata feedback=50 consistent=n compress=n filesize=20G log=pdmstream1 file=(pdmstream1_1,pdmstream1_2)

……… 其它脚本依此类推(streamid为条件) .

导出的时候注意点:

1. 使用 consistent=n

2. 更改参数 : ALTER SYSTEM SET UNDO_RETENTION = 30000;

3. 如果UNDO不够, 需要加大; LOB类型的使用pctversion作为自己的回滚段 .

4. 尽量在系统不繁忙的时候exp .

5. 按照子查询导出 , 避免需要太大undo空间 .

3. Exp出来的dmp文件可以直接导入到Linux-BasePDM数据库, 同时PDM正式数据库可以进行下一个EXP. 同步进行可以节省时间.

4. 导入期间注意清除归档文件, 观察UNDO, TEMP .

5. 停机时间到 , 首先EXP BB用户的数据, 包括数据 . (保证用户AP没有连接到正式DB)

6. 然后开始exp出CC用户下的数据, 包括数据 , 同时开始导入BB用户的数据.

7. 导入CC 用户的数据. 导入同时注意清理归档, UNDO, TEMP变化 .

8. 停机期间 , 导出aaSTREAMDATA以外的其它表, 估计EXP需要时间 2小时,然后导入。

9. 确认其它数据都已经导入完成后, 开始处理STREAMDATE 表的差异部份 .

10. Refresh 源数据库中的mv log , 查看mv log , 看看是否资料已经消失, 然后查看目标数据库中的streamdata_mv 视图, 应该有大量差异资料行(注意delete的数据是不会记录在这个视图中的) . 开始处理差异数据部分,从目标数据库的记录差异表streamdata_mv中取出primary key,然后使用SQL在目标数据库的streamdata(目前数据已经导入)中删除这些数据行,然后将目标库中的streamdata_mv中的差异数据insert 到目标库中的streamdata中。

11. 导入导出期间被删除的纪录被记录在Trigger写入的LOG(log表在源数据库中), 从中找出纪录行, 然后在目标数据库中删除这些行

四.注意事项

1 注意exp/imp时候是连sequences,view,procedure等都imp到目标库

了,由于streamdata大表是在线导入导出的,最后实施的mv log数据同步,那么最开始exp出来的sequence 中的last value在源数据库中可能已经发生变化,所以请注意,可能需要recreate sequences, 即需要从源库中导出sequences脚本(其中含有每个sequences的最新last value)

2. imp数据的时候,注意disable掉目标库中的trigger等。以免出现数据

问题。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-84397/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-84397/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值