欢迎光临
我们一直在努力

导出大表到pipe并压缩

在用exp导出时,如果表很大,比如几个G,甚至几十个G,而本地磁盘又没有足够的空间存储dmp文件.
那我们可以用pipe+gzip(or compress) 方式进行导出, 在导入时用pipe+ gunzip(or uncompresss)进行.
示例如下:

—————导出过程———————–

SQL> select count(*) from FORUM_PRIVMSGS_TEXT; 

  COUNT(*)

———-

  11339706 

SQL> select bytes/(1024*1024) from user_segments where segment_name=’FORUM_PRIVMSGS_TEXT’; 

BYTES/(1024*1024)

—————–

             5859

 

这个表占用空间近 6GB, 如果直接导出,担心本地磁盘没有足够的空间存储.

–创建pipe

$mknod /disk1/p1 p

$mknod /disk1/p2 p

$mknod /disk1/p3 p

$mknod /disk1/p4 p

$mknod /disk1/p5 p

$mknod /disk1/p6 p

如果是用root创建的,则要让oracle可写.

 

–后台执行压缩

$gzip -c </disk1/p1 >/disk1/1.dmp.gz &

$gzip -c </disk1/p2 >/disk1/2.dmp.gz &

$gzip -c </disk1/p3 >/disk1/3.dmp.gz &

$gzip -c </disk1/p4 >/disk1/4.dmp.gz &

$gzip -c </disk1/p5 >/disk1/5.dmp.gz &

$gzip -c </disk1/p6 >/disk1/6.dmp.gz &

 

–compress.par(导出参数文件)

userid=username/passwd

tables=(FORUM_PRIVMSGS_TEXT)

log=/disk1/FORUM_PRIVMSGS_TEXT.log

file=(

/disk1/p1,

/disk1/p2,

/disk1/p3,

/disk1/p4,

/disk1/p5,

/disk1/p6)

rows=y

indexes=n

compress=n

constraints=n

grants=n

filesize=1024M

feedback=5000

 

–运行导出

$nohup exp parfile=compress.par > FORUM_PRIVMSGS_TEXT.out 2>&1 &

 

–监控导出过程

$tail -f FORUM_PRIVMSGS_TEXT.out  (or FORUM_PRIVMSGS_TEXT.log)

 

 

———————–导入过程————————–

–不同的地方:

gunzip -c >/disk1/p1</disk1/1.dmp.gz &

gunzip -c >/disk1/p2</disk1/2.dmp.gz &

 

 

等exp/imp过程结束后,后台运行的gzip/gunzip过程会自动结束.

创建的pipe直接 rm即可.

 

几点说明:

1, 为了加快导出速度,如果没有lob,可以指定direct=y

2, 可以设置buffer=一个比较大的值,不过如果有LONG, LOB, BFILE, REF, ROWID, LOGICAL ROWID, or

DATE 等数据类型,则每次导出一行; 并且buffer与direct不兼容,只能用于conventional path export.

3, compress=n,是为了避免在import时在ts中找不到一个足够大的extent. 如果表空间创建时是uniform   size,是不会造成fragement,所以不必指定compress=y(default).

4, aix中压缩时建议使用 compress -c,因为没有gzip工具

5, 在imp到另一个用户时,如果事先未创建表,你需要指定目标用户的缺省表空间,取消在其它表空间上的quota

未经允许不得转载:SRE空间 » 导出大表到pipe并压缩

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

oracle