在数据处理与迁移过程中,将.dat
文件导入Oracle数据库是常见的需求,尤其当企业需要整合历史数据或外部系统数据时,以下是一套经过验证的标准化操作流程,兼顾效率与安全性,供技术人员或IT管理者参考。
前期准备:数据与环境的标准化检查
解析文件结构
使用文本编辑器(如Notepad++)或命令行工具(Linux下可用head
/tail
)确认.dat
文件格式:
数据库环境适配
*核心导入方法:SQLLoader专业级配置
步骤1:编写控制文件(.ctl)**
LOAD DATA CHARACTERSET ZHS16GBK --按需调整字符集 INFILE '/path/data.dat' BADFILE '/logs/data.bad' DISCARDFILE '/logs/data.dsc' APPEND INTO TABLE target_table FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS ( col1 INTEGER EXTERNAL, col2 CHAR "TRIM(:col2)", col3 DATE "YYYY-MM-DD HH24:MI:SS" )
关键参数说明:
APPEND
/REPLACE
:数据追加或清空后插入 TRAILING NULLCOLS
:处理字段缺失值 步骤2:启动并行加载(提升大文件效率)
sqlldr userid=scott/tiger control=load.ctl parallel=true direct=true
优化技巧:
DIRECT=TRUE
启用直接路径加载,绕过缓冲区 ROWS=50000
调整每次提交行数平衡I/O与内存 步骤3:日志分析与异常处理
检查.log
文件中的加载统计:
Table TARGET_TABLE: 50230 Rows successfully loaded. 12 Rows not loaded due to data errors. 0 Rows not loaded because all WHEN clauses were failed.
对.bad
文件的数据错误需修正后重新加载。
替代方案:外部表技术实现实时访问
若需持续读取更新数据,可创建外部表映射:
CREATE TABLE ext_table ( col1 NUMBER, col2 VARCHAR2(50) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY data_dir ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE FIELDS TERMINATED BY '|' MISSING FIELD VALUES ARE NULL ) LOCATION ('data.dat') ) REJECT LIMIT UNLIMITED;
优势:
企业级场景增强方案
LOAD DATA ... ( raw_field "validate_email(:raw_field)" )
BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'NIGHTLY_LOAD', job_type => 'EXECUTABLE', job_action => '/scripts/load_data.sh', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ=DAILY;BYHOUR=2' ); END;
避坑指南:高频问题解决方案
| 问题现象 | 排查方向 | 修复方案 |
|—————————|———————————–|———————————–|
| ORA-01722无效数字 | 空字符串转换数值型 | 使用DECODE(:col,'',NULL,:col)
|
| ORA-01843无效月份 | 日期格式不匹配 | 显式定义"TO_DATE(:col,'DD-MON-RR')"
|
| ORA-12899列值过长 | 源数据包含尾随空格 | 增加TRIM()
或扩展字段长度 |
引用说明
本文操作规范参考: