上一篇
场景引入:
凌晨3点,运维小张盯着屏幕上堆积如山的CSV文件头皮发麻——明天业务部门急需这批数据入库,手动写INSERT语句?怕是敲到天亮也完不成!这时,他想起DBA老王的叮嘱:"试试SQL*Loader,比咖啡还提神!"
Oracle的SQL*Loader(简称sqlload
)是专为批量数据导入设计的命令行工具,能闪电般将文本文件(CSV、TXT等)塞进数据库表里,速度堪比数据界的"传送带" 🚀。
核心优势:
-- 示例:员工数据导入(control.ctl) LOAD DATA INFILE 'employees.csv' INTO TABLE emp FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (empno, ename, sal, hiredate DATE 'YYYY-MM-DD')
📌 关键点:
INFILE
指定数据文件路径 TERMINATED BY
定义分隔符(逗号/制表符等) 执行命令:
sqlldr userid=scott/tiger control=control.ctl log=load.log
场景:数据文件里的性别是"M/F",表里需要存成"男/女"
-- 控制文件片段 (..., gender "DECODE(:gender, 'M', '男', 'F', '女')" )
💡 类似Excel的IF函数,实时转换数据格式
BADFILE 'bad_emp.bad' -- 错误数据存到单独文件 DISCARDFILE 'discard.txt' -- 不符合条件的数据 ERRORS 1000 -- 允许的最大错误数
⚠️ 即使1万条里999条出错,也能保住正确数据!
DIRECT=TRUE -- 直通模式(绕过SQL层) ROWS=50000 -- 每5万条提交一次 PARALLEL=TRUE -- 并行加载(企业版功能)
🚀 实测:1GB数据导入从30分钟→3分钟!
CHARACTERSET ZHS16GBK
TRIM
函数 DATE '2025-08-01'
和"to_date(:hiredate,'YYYY-MM-DD')"
两种写法效果不同 -- 动态表名加载(2025年新特性) INTO TABLE emp_2025 WHEN year='2025' -- 文件内嵌数据(不用单独文件) BEGINDATA 101,"张三",5000,2025-01-15
根据Oracle 23c文档,SQL*Loader现已支持:
✅ JSON文件直接解析加载
✅ 云存储(OSS/S3)文件路径识别
✅ 与Data Pump联动实现断点续传
本文由 休梦秋 于2025-08-01发表在【云服务器提供商】,文中图片由(休梦秋)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/501471.html
发表评论