解决Oracle中Exp/Imp大量数据处理问题

Oracle的exp/imp是许多用户经常使用的两个工具。 它们常被用来做数据库的逻辑备份,数据库重组和数据转移等工作。 先由exp把数据卸出到文件系统, 产生一个。dmp文件, 然后必要时再由imp将数据装入数据库。

对于一般中小型数据库来说, 全数据库的exp所产生的dmp文件可能小于2GB, 但对稍大型的数据库, exp产生的数据动辄数十至上百个GB. 而现时多数操作系统为32位, 其文件系统允许的最大文件为2GB. 这样显然不能由文件系统存放exp产生的数据。 这是问题之一。 另一个问题是随着数据库的不断增大, exp所需时间越来越长以致实际上很难实施。 本文针对以上两个问题讨论相应对策。

我们以UNIX为例首先看看如何超越2GB限制。 这需利用UNIX的通用技术, 如管道(named pipe), 数据拷贝工具dd以及数据压缩(compress)。 下面分别讨论这几种技术。

。管道 是一种伪文件。 它存在于内存中, 用于快速I/O操作。 管道的缓冲区采用先进先出机制, 即写管道进程写到缓冲区头部而读管道进程读取管道尾部。 建立管道的命令为“mknod filename p".

。dd 允许我们从一个设备拷贝数据到另一个设备。

。compress 为UNIX数据压缩工具。

实施exp之前, 我们可先检查所产生dmp文件的大小。 以下步骤既可实现,

1. 生成管道:

$ mknod /tmp/mypipe p

2. exp结果输出到该管道

$ exp file=/tmp/mypipe <……其它exp选项> &

3. 读取管道并把结果输出到管道, 只为查看数据量:

$ dd if=/tmp/mypipe of=/dev/null

结果返回exp (。dmp)文件大小, 单位为块(512 bytes)。

现在我们可以着手讨论具体方法,

1. 文件压缩

2. 直接exp到磁带

3. 综合方法

首先看文件压缩方法。 利用文件压缩我们可尽量避免dmp文件大小超过2GB限制。 我们利用UNIX的管道技术, 具体步骤如下,

1. 启动compress进程, 使之从管道读取数据并输出到磁盘文件。

$ mknod /tmp/exp_pipe p

$ compress < /tmp/exp_pipe > export.dmp.Z &

2. exp到管道。

$ exp file=/tmp/exp_pipe …… &

imp时情况类似。

再看看直接exp到磁带上的方法。

$ exp file=/dev/rmt/0m volsize=4G

$ imp file=/dev/rmt/0m volsize=4G

最后看看exp到裸设备上的方法,

$ exp file=/dev/rdsk/c0t3d0s0 volsize=4G

imp类似。以上方法都可使我们避免2GB限制。

下面讨论如何缩短exp索需时间的问题。 目前多数用户会采用exp到磁带的方法只因没有足够的剩余硬盘空间。 而整个exp过程所花时间的大部分都在写磁带上。 通过我们上面对UNIX工具的讨论, 我们可以做到先exp到管道, 再将管道数据压缩后输出到磁带上。 这样写磁带的数据量可大大减少, 从而在相当程度上缩短写磁带时间。 另外从Oracle内部角度讲, 从7.3版开始, Oracle允许用户做direct path export, 即跳过Oracle

$ make -f $ORACLE_HOME/rdbms/lib/oracle.mk expst

$ make -f $ORACLE_HOME/rdbms/lib/oracle.mk impst

以上步骤产生的可执行文件expst (exp single task)和impst与exp/imp用法完全相同。 使用它们比使用exp/imp可节省多至30%的时间。 但在使用它们时千万要注意一点, 即一定要保证在使用expst/impst时不能有任何其他用户在使用Oracle数据库, 否则数据库会产生不可预知的后果甚至毁坏。

时间: 2024-08-24 17:00:18

解决Oracle中Exp/Imp大量数据处理问题的相关文章

oracle中exp,imp的使用详解_oracle

基本语法和实例:      1.EXP:       有三种主要的方式(完全.用户.表)       1.完全:           EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y           如果要执行完全导出,必须具有特殊的权限       2.用户模式:           EXP SONIC/SONIC    BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC           这

oracle中 exp/imp导出导入数据库例子

导出前先查看系统的NLS_LANG设置: echo $NLS_LANG AMERICAN_AMERICA.ZHS16CGB231280 select userenv('language') from dual; AMERICAN_AMERICA.ZHS16GBK 这两个值不同会报错: EXP-00091: Exporting questionable statistics 问题产生的原因: linux下用户环境变量语言集和oracle数据库中的环境变量语言集不同. 解决办法: 将linux下用户

oracle排除表导出-关于oracle中exp导出问题

问题描述 关于oracle中exp导出问题 今天在客户现场,公司要求我把客户的一个库所有数据导出来,在数据导出时,库里面有些数据量非常大的表是不需要导出的,我想问问,怎么用exp导出命令去排除不需要的表,然后导出数据. 解决方案 http://wenku.baidu.com/link?url=FebpEqd3DwpV1fXYrT3EWVE2CakJXqebJ5a9H1RE5OyyksV2y4Ql1xUjhFSRvj5teDpeYmsUbBjDBk06PVfTeXWi3ESpZcxknX4UoIe

Oracle 管道 解决Exp/Imp大量数据处理问题_oracle

先由exp把数据卸出到文件系统, 产生一个.dmp文件, 然后必要时再由imp将数据装入数据库. 对于一般中小型数据库来说, 全数据库的exp所产生的dmp文件可能小于2GB, 但对稍大型的数据库, exp产生的数据动辄数十至上百个GB. 而现时多数操作系统为32位, 其文件系统允许的最大文件为2GB. 这样显然不能由文件系统存放exp产生的数据. 这是问题之一. 另一个问题是随着数据库的不断增大, exp所需时间越来越长以致实际上很难实施. 本文针对以上两个问题讨论相应对策. 我们以UNIX为

探索Oracle之 EXP/IMP过程中的字符集问题

1. 问题描述:        数据库之间的数据迁移是一个很常见的作业,EXP/IMP工具是一个常用的数据迁移及转化工具,因其导出文件具有平台无关性,所以在跨平台迁移中,最为常用.但在实际操作过程中,涉及到源数据库,客户端,目标数据库三方面的字符集问题.操作人员对三者之间的字符集转换过程不了解,而冒然使用EXP/IMP命令,往往在迁移过程中报错终止,或是在没有报错的情况下成功导入,但其背后却存在隐患,在查询时经常显示乱码.   2.解决方法        2.1 源端数据库(1)→EXP客户端(

oracle中exp dmp文件损坏怎么恢复

创建exp dmp文件并使用dd破坏  代码如下 复制代码 SQL> create table t_xifenfei as select * from dba_objects; Table created. SQL> select count(*) from t_xifenfei;   COUNT(*) ----------      90915 [oracle@localhost ~]$ exp chf/xifenfei@pdb1 file=/tmp/t_xifenfei.dmp table

Oracle的EXP/IMP版本支持列表

oracle EXP/IMP一般EXPORT时使用地版本,IMPORT时使用与目标库相同的IMP工具 10.1.09.2.09.0.18.1.78.1.68.1.58.0.x7.3.x10.1.0EXP10EXP920EXP901EXP817EXP816EXP815N/AN/A9.2.0EXP920EXP920EXP901EXP817EXP816EXP815EXP80xN/A9.0.1EXP901EXP901EXP901EXP817EXP816EXP815EXP80xN/A8.1.7EXP817

oracle中exp跳过某些表导出数据

有一个需求,某个用户有很多张表,但是只能使用exp导出,而且想跳过其中某几张表,其他对象包括依赖关系都需要.针对这样的情况,通过分析exp的视图脚本,在exu10tabs视图进行修改,跳过某些表即可 修改exu10tabs视图 本测试为11.2.0.4版本,不同版本数据库,可能视图名称和语句有一定出入,请别照搬,exu10tabs在$ORACLE_HOME/rdbms/admin/catexp.sql中 CREATE OR REPLACE VIEW exu10tabs (            

oracle exp&amp;imp字符集设置与乱码

         在oracle使用exp/imp进行数据迁移时,需要注意xshell.exp/imp字符集.数据库字符集的设置,否则,一旦发生字符集转换而出现中文数据乱码,将前功尽弃.相较而言,oracle数据库比较人性化,万不得已时,可以调整数据库字符集.下面举一个调整数据库字符集.exp/imp字符集.xshell字符集避免中文乱码的例子.        首先,源库exp导出时数据库字符集是ZHS16GBK,NLS_LANG分别为空.AMERICAN_AMERICA.ZHS16GBK.