我以前做过这样的东西,在数据量很大的时候,确实特别慢,你在导入的时候,不要指定direct=y,这样,就可以在CMD窗口看到进度
可以采用的方法是:分批处理,每次处理一个表,或者是通过写query将数据分成若干部分来导入

解决方案 »

  1.   

    谢谢mfc168(闶阆)兄的回答,可是imp参数里面没有query参数,而是在exp里面有这个参数啊。再就是我导人的文件里面只有一个表,在这个表里面有2000多万条,当导入到500多万条的时候cpu就占用到100%,无法再进行下去。这与数据库配置是否有关系?再就是direct参数也是只有exp有啊。是否还有其它的解决方法?
      

  2.   

    你在imp的时候,表空间是否够用?
    在exp的时候,采用query参数,确定只导出部分数据(例如:where id<5000000),根据不同的条件形成几个文件,分别导入……还有一种比较笨的方法:通过其他软件,如:ACCESS或者PB的数据库工具来实现,可以直接通过接口连接处理数据,或者是通过这些工具将数据文件导出为SQLLDR的格式,然后使用SQLLDR来导入数据我以前做过人口数据,处理过上亿的数据,这方面积累很多经验,我想肯定可以帮你解决这个问题的:)
      

  3.   

    我的表空间肯定够用的,那个dmp文件有800多M,那个表空间还有2个G空用。你提到的分别导入,但是目前我犯了一个错误就是我把这个原来的表已经drop掉了,目前只剩下一个dmp文件,所以不能分批导入。是否还有其他的办法可行?
      

  4.   

    如果是其他问题,应该是根本导不进去,照你所说,是在500万左右的时候出现问题,那么就是一个容限问题了,首先是表空间是否够用,其次是数据文件是否占满了磁盘空间;你可以试一下重新建立一个用户及更大的表空间(前提是你的物理硬盘足够大),重新导入
    如果还不行,考虑换一下系统,我们以前在处理200万以下数据的时候使用WIN,在大数据量的时候,采用小型机,SUN450等
    我自己曾经研究过那个DMP文件,它是可识别的,根据自定义的格式存储,包括头文件(存表结构及字段信息),然后是数据文件(按照自己规定的分隔符来分隔数据)
      

  5.   

    我想不是容限问题,因为另外一台比我还差的机器装有同样的系统,数据库版本也一摸一样,她就可以容纳2千万的记录,dmp文件就是从她那里产生,但是现在原来的table已经不在了,(让我欢喜让我忧),我的新机器没有理由比她差,我想知道dmp=841m,是否导入到数据库也会占用相同数量级的空间,以你的经验做imp的时候系统需要使用的资源瓶颈可能是哪里?我觉得需要调整数据库的参数改善性能,可否提供DMP文件的有关知识
    谢谢你
      

  6.   

    表空间要远远大于你的DMP文件,这个是肯定的,那个文件格式是和你的数据库相关的,比较复杂,我当初是这样研究的:建立一个数据库,一个简单的表,只有2,3条记录,将它EXP出来,研究,然后,再建立一个表,再弄几条记录,再EXP……
    这样,不断地增加表,增加数据量,设置不同的字段类型,你就会了解它的格式了我是VC程序员,ORACLE用了两年多,刚到这个版块几天,我来CSDN也仅仅几个月而已,在这里学到了很多知识!
      

  7.   

    加參數BUFFER= ...
    COMMIT=YTRY'
      

  8.   

    我用的导数命令是:
    imp scott/tiger@orcdb file=c:\cis.dmp tables=d_cis log=c:\cis_log buffer=7000 recordlength=32 feedback=10000 commit=y
    还是停在504万条cpu不干活了,cpu怎么了?谢谢回答
      

  9.   

    没理由的,我经常进行千万级的数据导入到处也没问题,每一次都要近200G,你可以不导入索引,indexes=n,我怀疑是你的索引问题,可以导入数据后在建立索引,还有问题在解决。
    由于索引也会占用空间,所以必须将表空间大一些,你扩展到6g,表空间自动扩展设为512m,记得硬盘一定要远大于6g,如果停止可以imp界面多按几次回车,通常会有用的^_^。