有一张有2G的表,它有86个FLOAT类型的字段,现在我想把他迁移到别一个服务器上去。在EXP导出时没问题,但在IMP导入里出现以下错误:连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production经由常规路径导出由EXPORT:V09.02.00创建的文件
已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入
. . 正在导入表                "TAHE_SZJT_AC08"
IMP-00009: 导出文件异常结束
IMP-00020: 用于列缓冲区大小 (22) 的长整数列过大
IMP-00028: 上一个表的部分导入已回退: 回退 120372 行
成功终止导入,但出现警告。请教各位大侠这是为什么?怎么解决?

解决方案 »

  1.   

    需要按照一定的条件分开导,大于2.XXXXG大小的文件你的系统 不支持.
      

  2.   

    C:\Documents and Settings\Administrator>expExport: Release 10.1.0.2.0 - Production on 星期二 1月 25 16:07:32 2005Copyright (c) 1982, 2004, Oracle.  All rights reserved.
    Username: scott/tigerConnected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Produc
    tion
    With the Partitioning, OLAP and Data Mining options
    Enter array fetch buffer size: 4096 > 8192
    设置成4096的倍数,尽量的大些试试
      

  3.   

    1,先试一下在imp 时 buffer=5000000 commit=y
    2,还不行,就看看原来表是不是有函数索引,Unsed Columns。如果有删除了在重新导出。
    3,还不行,可能是文件传输时损坏了,把原来文件在考一份过来(最好不要用FTP传)
    4,还不行,可能就是bug了,你该去把该打的补丁都大上再试试了
      

  4.   

    只要把 buffer=99999999 加大写就OK了,根据实际物理内存而顶
    imp user/pass   file=xx   full=y buffer=99999999
      

  5.   

    这里有些资料:
    案例1:http://www.cnoug.org/viewthread.php?tid=36652
    Q:请问各位怎样提高imp导入的速度呀?数据库的文件大小是800M,exp的时候花了7分钟,然后我把文件拷到另一台机子上做imp导入花了一个小时都没有导完,好像死机一样,请问各位怎样提高imp的速度呀?其有一个表的字段是blob类型的。语句是这样的。$imp username/password@sid file=aa.dmp fromuser=aa touser=aa ignore=y buffer=40960000; A:
    800M怎么可能imp这么长时间???我们几百个G的东西也不过1小时内搞定优化,不要动态分配资源(先建好各种空间)
    也可以考虑分步,先把定义ddl导出,改一改(看看那些initial就知道要改了-如果是9i以前的版本),再导入定义.然后再导入数据进一步优化可以考虑不导入索引,把约束关掉;导完数据然后再重建和使约束生效调整share_pool、large_pool,检查SGA,PGAhttp://www.itpub.net/showthread.php?s=&threadid=298089有關提高export/import速度的討論! 
    對於export/import我有以下幾個疑問:
    1.如何使得export更快?
    2.Buffer這個參數的設置,到底有哪些考慮的因數?該如何設置?
    3.commit這個參數到底是=n還是=y好?
    4.在import時,下面哪種方法最快?
     A: 先 imp rows=y constraints=n indexes=n
    然後 imp rows=n constraints=y indexes=yB: 先  imp rows=y constraints=y indexes=n
    然後 imp rows=n constraints=n indexes=yC: 先  imp rows=y constraints=y indexes=n
    然後 imp rows=n constraints=n indexfile=test.idx
     再提取test.idx裡面的內容手動對index進行重建。5.上面indexfile=test.idx的test.idx文件中,會包含這些table的constraints內容嗎
    dx6340
    先imp data, 再创建index, 这样更快。commit=y
    husthxd
    imp rows=n constraints=n indexes=n
    imp rows=y 
    -- 用脚本创建约束和索引
    refrence:
    http://blog.itpub.net/post/11/4651
    http://blog.itpub.net/post/11/41921.imp的buffer在主机内存充裕的情况下越大越好,当然有最大值的限制
    2.如果磁盘空间充裕,undo表空间扩展不成问题的话,用默认值commit=n.
    3.用toad或者其他第三方工具导出约束、索引创建语句。btw:38g的导出文件,设置buffer=1g,imp后创建约束和索引,在8个小时内导入完毕。索引和约束创建1个小时完成。总共只需要10个小时不到完成数据迁移。
    主机是hp n5000,8cpu,8g memory.
    工具是用来提高生产效率的。
    有工具为何不用?
    用toad而不用imp时指定indexfile=test.idx是因为觉得方便。
    没其他更好的理由了。jlandzpa
    1.log_buffer调大
    2.如果是归档模式,先改成非归档.
    3.redo加大biti_rainy
    1.如何使得export更快?
    export direct=y 快2.Buffer這個參數的設置,到底有哪些考慮的因數?該如何設置?内存足够自然大比较好3.commit這個參數到底是=n還是=y好?commit = n 则表示当一个表的数据imp完毕之后才提交,y 表示当设置的buffer 满的时候提交,n需要更多的回滚段,y则如果一个表中途imp失败只能回滚部分数据,重新imp需要处理这个情况。对于性能来说难说有多大的影响。4.在import時,下面哪種方法最快?如果约束和索引是分离的,索引不创建,那 主键和唯一约束如何生效?主键和唯一约束的生效一定是要先建立相关索引的。5.上面indexfile=test.idx的test.idx文件中,會包含這些table的constraints內容嗎?
    纸上得来终觉浅,为何不动手一看
      

  6.   

    怎么变成讨论效率问题了?
    呵呵,我是这样做的
    调大redo log,log_buffer,非归档模式
    IMP 时 rows=y constraints=n indexes=n buffer=4096000 commit=y indexfile=test.idx
    然后调大sort_area_size。(1.5倍最大索引占用空间)
    修改test.idx文件,让索引以nologging方式创建。
    执行test.idx。IMP性能基本最大化了:)
      

  7.   

    缓冲区设的大一些
    使用commit=y
      

  8.   

    谢谢。搞定了,还有一个问题,ORACLE数据库有增量备份、差异备份吗,用EXP可以吗?
      

  9.   

    用EXP可以实现增量备份!但是不推荐使用!如果是专用服务器你就用rman吧!
      

  10.   

    我用oracle817出过此问题,解决方式:
    把此用户的表空间建成一个5G的,再建一个回滚段为5G的就可以了。
      

  11.   

    增量备份还是做一个包比较安全,取得最大行数,加1再insert!
      

  12.   

    你还不如直接copy数据文件,然后用这个文件建立数据库。有记得有人这样做过,