以前做过的数据迁移都是同平台的,跨平台迁移的数据量一般也不大,不知道跨平台迁移大数据库时有没有比较好的办法,比如下面的案例:
源数据库:windows ;oracle 9 i
目标数据库:linux ;oracle 9i(版本同上)
数据库大小:exp导出后的导出文件不小于40g
时间限制:小于6小时导入导出方式一定可以实现迁移,但是6个小时的时间肯定不够;
不知道冷备在跨平台时还能用不,或者还有没有别的办法

解决方案 »

  1.   

    前一段时间做过一个同平台数据迁移,简单的使用exp/imp就实现了,dmp文件30几G(含大量的图片),整个过程没用多长时间
      

  2.   

    文件格式不一样,直接冷备份应该是不行的,40g的dmp文件就更大了考的话也慢啊
      

  3.   

    可以考虑一边导一边压缩的方式导出,然后一边解压一边导入的方式导入,这种方法应该会快一些,
    导出:mknod temp.dmp p
    compress < temp.dmp > BK.dmp.Z &
    exp user/pass@bill file=temp.dmp log=exp.log
    rm temp.dmp
    导入:mknod temp.dmp p
    uncompress < BK.dmp.Z > temp.dmp &
    imp user/pass fromuser=aaa touser=xxx file=temp.dmp BUFFER=3072000 grants=N indexes=N ignore=y CONSTRAINTS=N log=imp_old.log
    rm temp.dmp
    另外,导出前可以将一些无用的大的临时表删除。
      

  4.   

    如果要迁移的数据库中没有long或long raw之类的字段,源和目标数据库之间的网络连接很快,我会考虑先用exp/imp转所有对象的定义,并在目标库中删除大表的索引和所有外键约束,然后目标库建dblink连接源库,写个脚本,将源库中的记录insert到目标库,insert时加append提示,执行insert后再重建删除的索引和外键约束。注意,在exp时要加compress=n的参数。
      

  5.   

    如果机器性能好的话 IMP EXP 是没问题的 ,冷备份可能不行可以考虑用表空间传输,  用eygle 的办法 需要换一下文件头
      

  6.   

    我的建议是升级到ORACLE10G,然后使用EXPDP/IMPDP.这样应该可以吧?
      

  7.   

    不知道用oracle带的工具制作一个数据库的模板,然后用模板重建数据库怎么样,不知道格式一样不一样
      

  8.   

    如果是多用户的,可以一个个用户分别exp, 在imp, 那样等于同时做,可以快些如果只有一个用户,可用 exp TABLES=(T1:P1,T1:P2) 导出部分table, 分别imp, 这样也会节省点时间
      

  9.   

    看来9i版本还是低了,如果是10g的话就可以考虑用传输表空间的方式了
    1 使表空间为只读: alter tablespace users read only;
    2 导出表空间。在操作系统提示符下执行: exp tablespaces=users transport_tablespace=y file=exp_ts_users.dmp 
    exp_ts_users.dmp 文件只包含元数据(不是表空间 USERS 的内容)因此它将非常小。 
    3 在10g目标服务器上转化文件格式4 导入表空间
      

  10.   

    1. 导入导出方式肯定可以的,我的理解6个小时应该没有问题的,根据你的描述.
    2. 使用RMAN,但对目标数据库的性能要求很高.
      

  11.   

    直接重建数据库的方法:
    1 关数据库,把所有redo log/datafile/spfile/全部拷贝过去。
    2 把源库的controlfile trace出来。
    3 在linux下建一个相同的实例,修改spfile重新指定controlfile位置。
    4 修改controlfile trace文件,重新指定每个文件的位置。
    5 在linux下找一个已有数据库的datafile ooo,要求块大小一样的。用dd命令把所有数据文件的第一个块用linux下的那个文件的代替:dd infile=ooo outfile=... blocksize=8k(块大小) count=1。dd的参数记不清,具体用的时候查下。 
    6 重建controlfile,打开数据库
    7 如果打不开,就open到mount
    8 recovery database
    9 alter database open resetlogs;
    7、8、9 可能不需要,如果能直接打开的话,原理:
    1 32位的linux和windows是同高低字节的机器,所以oracle数据文件的差别仅是第一个数据块上记录的一些信息不同,改了之后就能用了,可传输表空间也是类似原理。
    2 spfile里有控制文件的位置,修改成linux里的位置
    3 控制文件里有数据文件的位置,也要修改成linux里的位置,然后重建控制文件。