解决权限不足错误一例

| No Comments | No TrackBacks

我的一个同事在用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=11059f580

 curflg=d fl2=0 par=0 ses=700000081822ae0

 sqltxt(7000000802c8400)=LOCK TABLE "MAS"."MASPFL" IN EXCLUSIVE MODE NOWAIT

  hash=300c90847af8f1fc8c7542a4610c2ec8

  parent=7000000752d4e48 maxchild=01 plk=700000076845330 ppn=n

 

我同事是用ipra这个用户来执行sqlldr的,我并没有给ipra用户lock any table的权限,所以执行到上述语句的时候会出问题。

 

解决方法就是给ipra赋上lock any table的权限就OK了。

 

可能有朋友会问,为什么这里sqlldr在对表mas.maspfl执行导入数据操作的时候需要加exclusive的表锁,很简单,因为所对应的control文件里必然是有direct=Y

No TrackBacks

TrackBack URL: http://dbsnake.com/cgi-bin/mt/mt-tb.cgi/44

Leave a comment