如何处理SQL存储过程大数据导入_利用数据泵或外部表

张开发
2026/4/16 20:42:54 15 分钟阅读

分享文章

如何处理SQL存储过程大数据导入_利用数据泵或外部表
Oracle数据泵导入大表卡在LOADING是因直接路径触发索引/约束维护建议禁用约束、排除索引重建、手动分步处理并优先用外部表APPEND提升批量加载性能。Oracle数据泵导入大表时卡在“LOADING”状态数据泵 impdp 导入超千万行表时常卡在 LOADING 阶段十几分钟不动不是挂了是默认启用了直接路径direct_path但触发了大量索引维护和约束检查。尤其当目标表有多个非空约束、外键或函数索引时性能断崖式下跌。实操建议导入前用 ALTER TABLE ... DISABLE CONSTRAINT ALL 临时禁用约束注意记录哪些被禁后续要手动启用加参数 excludeINDEX,CONSTRAINT 跳过索引和约束创建导入完再用 CREATE INDEX 和 ALTER TABLE ... ENABLE CONSTRAINT 分步重建确认是否真需要直接路径如果表有 LOB 字段或触发器direct_path 会自动退化为外部表模式此时加 access_methodexternal_table 反而更可控避免用 REMAP_SCHEMA 同时改 schema 和建索引——这会让数据泵在加载数据时反复查字典视图拖慢进度用外部表替代 INSERT … SELECT 做批量加载想把 CSV 或 Oracle 目录下的文本文件快速灌进表里别写 PL/SQL 循环读行再 INSERT那是百行/秒级用外部表 INSERT /* APPEND */ 能到十万行/秒以上前提是文件格式干净、字段对齐、无乱码。实操建议先建目录对象CREATE DIRECTORY ext_dir AS /u01/data并授 READ 权给用户外部表定义里必须显式指定 REJECT LIMIT UNLIMITED否则一行格式错就全盘失败字符集要对齐若源文件是 UTF-8外部表的 CHARACTERSET UTF8 缺一不可否则中文变 ???不要在外部表上建索引或约束——它只是个“视窗”所有校验得靠导入后的主表承担impdp 进度不更新但 v$session_longops 显示 0%v$session_longops 里看到 OPNAME Loader 且 sofar 0不代表没干活。这是数据泵在预处理阶段解析元数据、分配区、检查空间尤其当 TABLE_EXISTS_ACTIONTRUNCATE 且表上有大索引时truncate 本身就会锁表并等待回滚段清理耗时可能远超实际加载。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能

更多文章