在10G之前,甚至在10G的Oracle环境中,有很多数据量不大,重要性不太高的系统依然采用EXP/IMP逻辑导出备份方式,或者,作为辅助备份方式。
通常情况下,我们都是这样操作的:
1.exp导出
2.gzip压缩
3.gzip解压
4.imp导入
这样操作有如下两个不好的地方:
1.占用大量磁盘空间,磁盘剩余空间必须大于导出的,未压缩的文件大小加上压缩后的文件大小。如果设置计划任务,每日定时导出的话,很有可能因为磁盘空间不足导致备份失败。由于这种备份方式磁盘使用率的剧烈抖动,即使有监控工具,也不能很好的提供趋势分析
2.系统资源浪费,在导出时,大部分都在等待IO。而压缩时,又大部分等待CPU,整体利用率不高。
那么,有没有办法直接导出成压缩文件?并直接从压缩文件导入呢?
EXP导出:
$ mknod p p
$ gzip < p > test.dmp.gz & exp system/xxxx tables=TEST buffer=31457280 CONSISTENT=Y COMPRESS=N file=p
[3] 24532
Export: Release 10.2.0.5.0 - Production on 星期四 1月 19 10:27:45 2012
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, Data Mining and Real Application Testing options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的表通过常规路径...
当前的用户已更改为 SYSTEM
. . 正在导出表 TEST导出了 1875063 行
成功终止导出, 没有出现警告。
[1] Done gzip < p > test.dmp.gz
[2]- Done gzip < p > test.dmp.gz
[3]+ Done gzip < p > test.dmp.gz
$ rm -rf p
IMP导入:
$ mknod p p
$ gunzip < test.dmp.gz > p & imp system/xxx file=p full=y buffer=31457280
[2] 24572
Import: Release 10.2.0.5.0 - Production on 星期四 1月 19 10:29:16 2012
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, Data Mining and Real Application Testing options
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 SYSTEM 的对象导入到 SYSTEM
. . 正在导入表 "TEST"导入了 1875063 行
成功终止导入, 没有出现警告。
[1] Done gzip < p > test.dmp.gz
[2]+ Done gunzip < test.dmp.gz > p