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

2016-02-19 14:50 1 1 收藏

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的解决Oracle中Exp/Imp大量数据处理问题,过去的都会过去,迎接崭新的开始,释放更美好的自己。

【 tulaoshi.com - 编程语言 】

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

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

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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  。管道 是一种伪文件。 它存在于内存中, 用于快速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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  $ 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数据库, 否则数据库会产生不可预知的后果甚至毁坏。

来源:https://www.tulaoshi.com/n/20160219/1608108.html

延伸阅读
跟 微软的数据库产品不一样, Oralce 把 '' 空的string 自动替换为 Null 所以下面的代码你可能考虑不一样的结果.create table suppliers( supplier_idnumber,supplier_name varchar2(100)); Next, we'll insert two records into this table.insert into suppliers (supplier_id, supplier_name ) values ( 10565, null );insert into supplie...
标签: SQLServer
  在用Oracle 8.0/2000的机器上安装时,语言请选择English(用户的机器选择Simplified Chinese),然后再用Regedit进行注册表编辑,选取“我的电脑”中的“HKEY_LOCAL_MACHINE”下的“Software→Oracle”,选取Oracle下HOME2的NLS_LANG,其缺省值为:AMERICAN_AMERICA.WE8ISO8859P1,按“编辑”下的“修改”,键入Server端NLS_LANG的值,可...
标签: SQLServer
在应用系统中,尤其在联机事务处理系统中,对数据查询及处理速度已成为衡量应用系统成败的标准。而采用索引来加快数据处理速度也成为广大数据库用户所接受的优化方法。 在良好的数据库设计基础上,能有效地使用索引是SQL Server取得高性能的基础,SQL Server采用基于代价的优化模型,它对每一个提交的有关表的查询,决定是否使用索引或用哪一个...
二、数据处理 数据连接建立后,可以用openrecordset方法打开一个记录集,并可用dbgrid控件和data控件方便地浏览整个记录集。如果使用表类型(table-type)记录对象,则对应的是一个实际存在的数据库表,在多用户环境下,其它用户对数据的修改会立即反映到表中;如果使用动态集类型(dynaset-type)记录对象,则对应的既可以是一个表中...
在监控、诊断、处理数据库性能问题的时候,时间信息往往是非常重要的判断依据。有时候可能我们会使用一些比例来判断性能,但是使用比例而不使用时间往往会将我们带向错误的方向。 在以前的版本中,Oracle的时间计量单位是厘秒,使用厘秒最显而易见的问题就是可能有些操作是小于厘秒的。看上去这似乎不太常见,但是实际上在操作系统上...

经验教程

846

收藏

49
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部