快速解决方法:使用SQL*Loader时遇到ORA-26065错误,通常是因为直接路径加载(DIRECT=TRUE)忽略了NOT NULL约束或主键冲突。解决方案是先用常规路径加载(DIRECT=FALSE)检查数据,或临时禁用约束:ALTER TABLE your_table DISABLE CONSTRAINT constraint_name; 加载后重新启用:ALTER TABLE your_table ENABLE CONSTRAINT constraint_name; 如果是远程处理,可通过dblink先验证数据一致性。
Oracle社区讨论
ORA-26065: row 123456 of table MYTABLE violates new NOT NULL constraint SYS_C001234 直接路径加载列引用错误。原因是在DIRECT模式下,SQL*Loader跳过了一些约束检查,导致违反NOT NULL或CHECK约束。解决:1. 将DIRECT参数改为FALSE,使用常规路径加载,它会严格检查所有约束。2. 或者,预先检查数据文件,确保所有列非空。远程场景下,可先在源库导出clean数据,再导入目标库。
CSDN博客文章
在使用SQLLDR进行直接路径加载时,报错ORA-26065约束冲突。这是因为直接路径加载(direct=true)绕过了部分约束检查,如NOT NULL。故障修复步骤:1. 修改control文件,设置direct=false; 2. 如果必须用direct,临时disable约束:ALTER TABLE tab1 DISABLE CONSTRAINT pk_tab1; 执行sqlldr后enable。远程处理:使用expdp/impdp代替sqlldr,避免路径加载问题,快速解决数据加载难题。
Oracle官方文档片段
ORA-26065: Invalid substitute column reference. 当直接路径加载时,列引用错误常见于control文件中的列映射不匹配表结构,或数据文件列数不对。修复:检查control文件中的COLUMN定义,确保position或name正确。 对于约束冲突,direct path不会报告所有违反,直到加载结束。建议先用conventional path验证。
Stack Overflow回答
I got ORA-26065 during SQL*Loader direct path load because of a NOT NULL constraint violation. The fix was to either fix the data or disable the constraint temporarily: ALTER TABLE scott.emp DISABLE CONSTRAINT nn_emp_mgr; Then load, then ENABLE VALIDATE. For remote, use database links to insert/select data in batches to handle large loads without direct path issues.
ITPUB论坛帖子
Oracle sqlldr direct=y时报ORA-26065,直接路径加载列引用错误。原因是数据文件中某列为空,但表有NOT NULL约束。解决办法:1. 数据清洗,确保非空。2. control文件中用WHEN子句跳过坏行。3. 远程故障:用UTL_FILE或外部表方式加载,分批处理大文件,避免内存溢出。
博客园经验分享
遇到ORA-26065约束冲突,快速修复:sqlldr control=xxx.ctl direct=false skip=1。或者脚本自动化:sqlplus / as sysdba < FAQ
Q: ORA-26065错误总是出现在哪个场景?
A: 主要在SQL*Loader的direct path加载(direct=true)时,违反NOT NULL、CHECK或REF约束。
Q: 如何远程修复无需登录服务器?
A: 使用Oracle Wallet + sqlplus远程连接,执行disable/enable约束命令,然后重跑sqlldr。
Q: direct=false加载慢怎么优化?
A: 增加并行度(parallel=true),或分文件加载,结合APPEND选项。
Q: 加载后约束如何验证?
A: 执行ALTER TABLE ... ENABLE VALIDATE CONSTRAINTS; 检查DBA_CONSTRAINTS状态。