去查询一个大表时, 大家都不会忘记Oracle的并行(Parallel)操作, 比如:
CREATE TABLE xxx PARALLEL 4 AS SELECT /*+ PARALLEL(...) */
SELECT /*+ PARALLEL(...) */ FROM ...
但手工并行则易被忘记, 一个朋友花了28小时导出300多G的带BLOB的表, 我的第一反应就是为什么不用并行? 这时是指手工并行. 使用exp的Query参数.
exp ... query=\"where mod(pk,4) = 0\"
exp ... query=\"where mod(pk,4) = 1\"
exp ... query=\"where mod(pk,4) = 2\"
exp ... query=\"where mod(pk,4) = 3\"
由于LOB默认设置是NOCACHE, 因此导出LOB是很慢的, 采用多个进程进行导出, 可以节约很多的时间. 28小时的痛苦时间, 可以缩短为7小时, 或更短.
要想办法偷懒, 这才是DBA的好生活.
留言 (4)
那么, 作为DBA, 你过得幸福吗?
嘿嘿.
Posted by 木匠 | Feb 28, 2008 1:36 AM
我这种做法就当苦中作乐吧.
Posted by anysql | Feb 28, 2008 8:05 AM
关于DBA的好生活,
以前跟Fenng讲过一点, 就是碰到棘手问题(比如一些特定条件下产生的Oracle Bug), 绕过去, 别硬闯.
Posted by 木匠 | Mar 1, 2008 3:32 AM
不懂是什么意思?
where mod(pk,4) = 0,pk是指什么?
Posted by aigo_h | Apr 28, 2008 4:14 PM