服务器 频道

如何加快imp速度

  【IT168 服务器学院】EXPORT:

          增加 BUFFER (eg. 2800000)
          停止所有应用(不一定现实)
          export文件不在ORACLE使用的驱动器上
          不要export到NFS文件系统

  
  IMPORT:
          建立一个indexfile,在数据import完成后在建立索引
          将import文件放在不同的驱动器上
          增加DB_BLOCK_BUFFERS
          增加LOG_BUFFER
          用非归档方式运行ORACLE:
                  --如果有个大的日志文件当然也会提高速度,不过临时加大太烦琐
         ALTER DATABASE NOARCHIVELOG;
          建立大的表空间和大的回滚段,OFFLINE其他回滚段,回滚段的大小为最大表的1/2
          使用 COMMIT=N
          使用ANALYZE=N

  另外可以用单用户模式导入
  或者用管道模式直接导入导出来提高imp/exp的性能

  管道的使用方法
  在源机器之上(称之为SRC)执行导出:
  mknod /dev/p_exp p
  在目的机器之上(称之为TRGT)执行导出:
  mknod /dev/p_imp p
  在两个机器上通过l s命令确保两个管道都已被创建。
  2) 将“导入管道(在SRC之上)”复制到“导入管道(在TRGT之上)”。可以使用任何允
  许远程复制的命令(例如rcp)。本例通过rsh使用dd命令。
  在TRGT之上:
  rsh src dd if=/dev/p_exp > /dev/p_imp
  3) 启动导出进程。
  在SRC之上:
  exp userid=username file=/dev/p_exp full=y direct=y
  4) 启动导入进程。
  在TRGT之上:
  imp userid=username file=/dev/p_imp buffer=???? full=y
       
  另外一种增加导出/导入吞吐量的方法是使用单任务模式的导出和导入实用工具。在UNIX上,缺省情况下
  imp/exp都是以双任务模式链接的(换句话说,创建了一个影子进程,利用它隔离Oracle内核代码和导出/导入代码,
  又就是说这些代码变成私有,不再给共享了)。使用单任务的导出/导入使用工具可以增加整个吞吐量大致为0~20%。
  但是,以单任务模式链接的实用工具会消耗更多的内存,因为Oracle可执行代码不再被所有后台进程和前台进程共享。
  单任务可执行代码的名字与常规的双任务可执行代码一样,除了前者拥有“st”后缀之外(所以单任务的exp变为expst,
  单任务的imp变为impst)。
  单任务模式的实用工具需要通过下面的
  命令显式地链接:
  cd $ORACLE_HOME/rdbms/lib
  make -f ins_rdbms.mk expst     
  make -f ins_rdbms.mk impst
  -- ins_rdbms.mk要根据oracle版本来决定

  这个我自己也没有试过,大家可以测试一下,把性能比较发上来;)
  

0
相关文章