我的一个同事在用sqlldr导入数据的时候报错:
SQL*Loader-951: 呼叫一次/加载初始化错误
ORA-00604: error occurred at recursive SQL level 1
ORA-01031: insufficient privileges
他找到我后跟我描述了上述情况,我问他"错误能重现吗?",他说可以。
"那就好办了,我肯定给你把问题解决了",我回答到。
这里定位上述问题的方法是典型的处理类似问题的方法,早就被用烂了。
直接执行alter system set events '604 trace name ERRORSTACK level 4';
然后让他再次导入数据后再执行alter system set events '604 trace name ERRORSTACK off';
执行完后去查看生成的trace文件,这个trace文件中别的不用看,直接以'sql'作为关键字去查询上述trace文件,可以看到有如下内容:
Cursor#2(110571850) state=SYNTAX curiob=
curflg=d fl2=0 par=0 ses=700000081822ae0
sqltxt(
hash=
parent=7000000752d4e48 maxchild=01 plk=700000076845330 ppn=n
我同事是用ipra这个用户来执行sqlldr的,我并没有给ipra用户lock any table的权限,所以执行到上述语句的时候会出问题。
解决方法就是给ipra赋上lock any table的权限就OK了。
Leave a comment