Oracle解决exp导出文件过大的问题
先由exp把数据卸出到文件系统, 产生一个.dmp文件, 然后必要时再由imp将数据装入数据库. 对于一般中小型数据库来说, 全数据库的exp所产生的dmp文件可能小于2GB, 但对稍大型的数据库, exp产生的数据动辄数十至上百个GB. 而现时多数操作系统为32位, 其文件系统允许的最大文件为2GB. 这样显然不能由文件系统存放exp产生的数据. 这是问题之一. 另一个问题是随着数据库的不断增大, exp所需时间越来越长以致实际上很难实施. 本文针对以上两个问题讨论相应对策.
管道
管道 是一种伪文件. 它存在于内存中, 用于快速I/O操作. 管道的缓冲区采用先进先出机制, 即写管道进程写到缓冲区头部而读管道进程读取管道尾部. 建立管道的命令为”mknod filename p".
gzip命令
名称
gzip, gunzip, zcat -压缩或解压文件
总览
gzip [ -acdfhlLnNrtvV19 ] [-S suffix] [ name ... ]
gunzip [ -acfhlLnNrtvV ] [-S suffix] [ name ... ]
zcat [ -fhLV ] [ name ... ]
描述
Gzip使用lempel - ziv编码减少指定文件的大小(LZ77)。在可能的情况下,每个文件都被一个扩展名替换.gz,同时保持相同的所有权模式,访问和修改时间。(默认扩展名对于VMS为-gz,对于MSDOS,OS /2 FAT,Windows NT FAT和Atari为Z。) 如果没有指定文件,或者文件名是“-”,则标准输入被压缩到标准输出。Gzip只会尝试压缩常规文件。特别是,它将忽略符号链接。
如果压缩文件名对其文件系统太长,则gzip将其截断。Gzip试图只截断长度超过3个字符文件名称的部分。(部分是由点来分隔的。) 如果名称仅由小部分组成,最长的部分被截断。例如,如果文件名限制在14个字符,那么gzip.msdos.exe被压缩为gzi.msd.exe.gz。在没有限制文件名长度的系统上,名称不会被截断。
。。。。。。
选项
-f --force
强制压缩或解压,即使该文件有多个链接或相应的文件已经存在,或者将压缩的数据从终端读取或写入到终端。如果输入数据没有gzip识别的格式,并且如果选项--stdout也被给出,那么将输入数据复制到标准输出:让zcat表现为cat。
数据流重定向
标准输入(stdin):代码为0,使用<或<<;
标准输出(stdout):代码为1,使用>或>>;
标准错误输出(stderr):代码为2,使用2>或2>>
解决方案
1.建立命名管道
mknod mypipe p
2.结合exp和gzip将导出的dmp文件直接压缩
exp $SWITCH_DBUSER/$SWITCH_DBPASS file=$HOME/file/expdp/mypipe tables=card_bin &
gzip <$HOME/file/expdp/mypipe >$HOME/file/expdp/card_bin.gz
如此即解决了直接导出dmp文件过大的弊端
如何通过备份的数据进行恢复呢
3.解压缩gz文件
gunzip -c card_bin.gz > card_bin.dmp
4.imp导入dmp文件
imp $SWITCH_DBUSER/$SWITCH_DBPASS IGNORE=y file=card_bin.dmp full=y
参考资料
《man gzip》
《鸟哥的Linux私房菜——基础学习篇》
《https://yq.aliyun.com/ziliao/115289》
《http://blog.csdn.net/cnmilan/article/details/40592305》
posted on 2017-12-13 11:25 foreverys 阅读(8844) 评论(0) 编辑 收藏 举报