今天开发的兄弟发了个据说是能提高在线分析索引的procedure过来.

在生产系统跑了下,rebuild 1kw记录的表的三个索引,用了1s,真快.

可是别高兴的太早,在log中发现数据库中报权限不足.

ok,把那个存储过程中的那个动态sql的语句单独执行,没问题,权限够的.

然后,作个匿名块,只写了那段动态sql,还是可以执行的,就是丢到procedure中不行.怀疑是procedure中执行ddl的语句的权限没有,但是作drop和truncate都行,就是不能执行我这个alter index index_name rebuild online;

我真的要丢他老母了,nnd,看起来权限没有错呀.到网络上去看看,发现说如果是不用online的话,是可以执行的,ok,我试试,不用online确实可以.

后来想想,online和不用online,不就是要创建个系统临时表吗.

给该用户显式授权grant create any table to user;

再执行,好了.

靠,oracle也真土的,我这用户可是dba权限,郁闷死.



 

4 Comments to “在存储过程中执行rebuild index online的权限问题”


  1. Thoams Zhang — April 27, 2007 @ 7:40 pm

    老经典的问题了|

  2. 木匠 — April 28, 2007 @ 12:14 pm

    今天有学到新知识了, 有帮助.

    不过, 通常一个数据库, 只有一个主schema,
    然后授权给其它用户, elegant.

  3. David.Guo — April 28, 2007 @ 2:08 pm

    木匠说学到新东西,不会是反话吧,哈哈
    俺的db确实只有一个主schema,但是就是他有dba权限,还不能执行那玩意,所以郁闷的说.

  4. hiloo — May 5, 2007 @ 11:12 am

    dba是角色,在procedure中角色是disable的,需要显示授权



Write a comment

You need tologin.