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个字符,那么被压缩为。在没有限制⽂件名长度的系统上,名称不会被截断。
。。。。。。
选项
-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/
如此即解决了直接导出dmp⽂件过⼤的弊端
如何通过备份的数据进⾏恢复呢
3.解压缩gz⽂件
gunzip -c > card_bin.dmp
4.imp导⼊dmp⽂件
imp $SWITCH_DBUSER/$SWITCH_DBPASS IGNORE=y file=card_bin.dmp full=y
参考资料
《man gzip》
《鸟哥的Linux私房菜——基础学习篇》
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论