Oracle SQL Developer导入200万行CSV遇内存超限,求快速导入方法
解决Oracle SQL Developer导入大CSV文件的“overhead limit exceeded”问题
针对200多万行的CSV文件,SQL Developer图形界面导入出现内存限制报错,推荐以下几种高效导入方案:
方案一:用SQL Developer创建外部表同步数据
外部表是直接映射CSV文件的虚拟表,无需先把数据加载到内存,适合大数据量:
- 连接目标数据库后,右键目标用户 → 导入数据 → 选择CSV文件,导入类型选「外部表」
- 配置参数:指定CSV文件路径(确保数据库服务器能访问该路径,若本地文件需上传到服务器目录),设置字段分隔符、换行符,匹配CSV的字段格式
- 创建外部表后,执行SQL语句将数据同步到实体表:
CREATE TABLE new_target_table AS SELECT * FROM your_external_table;
方案二:使用SQL*Loader命令行工具(最推荐)
这是Oracle官方的高效批量导入工具,完全规避图形界面的内存限制:
- 编写控制文件(示例命名为
csv_load.ctl),内容如下(根据你的CSV字段调整):
LOAD DATA INFILE '/path/to/your/file.csv' -- CSV文件路径(服务器端路径) INTO TABLE target_table -- 目标表名,需提前创建好匹配字段的表 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' -- 匹配CSV的分隔符和引号规则 TRAILING NULLCOLS -- 处理末尾空字段 ( col1, -- 按CSV字段顺序对应表字段 col2, col3, col4 )
- 执行导入命令(替换为你的数据库账号信息):
sqlldr username/password@your_db control=csv_load.ctl log=load.log direct=true rows=10000
direct=true:启用直接路径导入,跳过数据库缓冲区,大幅提升速度rows=10000:设置每次提交的行数,平衡性能和事务开销
方案三:调整SQL Developer导入参数(应急方案)
如果坚持用图形界面导入,可调整参数绕过内存限制:
- 打开SQL Developer,依次点击「工具」→「首选项」→「数据库」→「导入导出」
- 找到批量导入设置,增大「提交批量大小」(比如设为10000),勾选「使用数组插入」
- 重新执行导入,选择「插入模式」,但这种方式速度远不及前两种,仅适合临时应急
注意:INSERT模式本身可行,但SQL Developer图形界面的内存限制导致大数据量下报错,因此优先推荐外部表或SQL*Loader方案。
内容的提问来源于stack exchange,提问作者Mariomaxi
相关产品推荐
相关产品推荐

