PARALLEL参数需与PARTITION、CLUSTER等协同生效,否则仅是摆设;实际并行度受PARALLEL_MAX_SERVERS、PGA限制、I/O延迟、RAC锁争用等动态压制;非分区表或CLUSTER=N时无法跨节点;COMPRESSION=all与PARALLEL>1冲突致ORA错误;分区表导入须手动拆分分区并多进程执行。
PARTITION 和 CLUSTER 参数不配对,PARALLEL 就是摆设。Oracle 19c 数据泵的并行能力不是“开了就生效”,它依赖底层资源调度策略和对象结构特征,盲目加大 PARALLEL 值反而可能触发降级或报错。
为什么 PARALLEL=8 却只看到 4 个 Worker 进程
这不是参数没写对,而是 oracle 主动限流了。实际并行度由 master 进程根据实时资源水位动态裁决,常见压制原因包括:
-
PARALLEL_MAX_SERVERS当前值低于 8(查v$parameter确认) - 发起作业的实例 PGA 已逼近
PGA_AGGREGATE_LIMIT,每个 Worker 需独立内存区 - ASM 磁盘组延迟 >20ms,Master 检测到 I/O 瓶颈后自动缩减 Worker 数量
- RAC 环境下 GCS 心跳异常或
gc cr block busy等全局锁争用高,抑制跨节点派发
CLUSTER=Y + PARTITION 是跨节点并行的前提
默认 CLUSTER=Y,但仅当目标表是分区表且启用了 PARTITION 属性时,Worker 才可能分散到多个 RAC 节点。否则所有 Worker 强制落在发起作业的本地实例上。
- 若
CLUSTER=N,哪怕 RAC 有 4 个节点也只用 1 个实例 -
PARALLEL_INSTANCE_GROUP设为'inst1'会锁死在单实例;设为'*'或未设置才允许跨节点 - 非分区表即使
CLUSTER=Y,Worker 也不会跨节点——没有分区粒度,无法拆分任务
COMPRESSION=all 和 PARALLEL>1 同时启用会报 ORA-48128/ORA-39155
这不是 Bug,是设计冲突:多个 Worker 并发解析 %U 通配符生成文件名,而压缩流写入依赖原子性文件句柄,RAC 共享存储(如 ACFS/NFS)在高并发创建场景下无法保证顺序。
- 绕过方式一:放弃
%U,改用固定命名 +FILESIZE分卷,例如DUMPFILE=exp_01.dmp,exp_02.dmp - 绕过方式二:两阶段导入——先用
CONTENT=METADATA_ONLY PARALLEL=1导出元数据,再用CONTENT=DATA_ONLY导入数据 - 注意:
COMPRESSION=all在 RAC 上必须配合单 Worker 或显式文件名控制,否则大概率失败
分区表导入时 PARALLEL 失效?得手动拆分分区
如果只导数据不导结构(CONTENT=DATA_ONLY),且表已存在但未分区,impdp 会串行处理每个分区——因为无法把一个分区当作独立段调度。
- 正确做法:先用
SELECT table_name||':'||partition_name FROM user_tab_partitions获取所有schema.table:partition组合 - 按线程数平均分配分区,生成多个 parfile,每个含一组
TABLES=xxx:part1,xxx:part2 - 用多个
impdp进程并行执行,每个绑定一个 parfile - 关键点:不能指望单个
impdp进程靠PARALLEL自动拆分分区;必须由人把分区打散成可并行的逻辑单元
PARALLEL=8,而是确认当前对象是否具备被并行的物理结构、所在实例是否有余量承接、RAC 节点间是否能协同分发任务。这三个条件缺一,PARALLEL 就只是个参数,不是加速器。


















