问题描述
你好:
当在过程中使用在线选项重建索引时,我遇到了 “ORA-01031: 权限不足” 错误。
我知道该角色不能在过程中使用,因此向系统授予一些特权 (其DBA'
用户: 系统
特权:
-系统的2个角色
使用ADMIN选项向系统授予AQ_ADMINISTRATOR_ROLE;
将DBA授予具有ADMIN选项的系统;
更改用户系统默认角色全部;
授予系统更改任何索引;
授予对系统进行任何分析;
授权创建任何表到系统;
授予系统创建物化视图;
向系统授予创建会话;
向系统授予创建表;
授予将任何表放到系统;
授予对系统执行任何程序;
授权执行任何程序到系统;
向系统授予全局查询重写;
授予系统选择任何字典;
向系统授予选择任何表;
在任何表格下授予系统;
使用管理选项向系统授予无限的表空间;
-系统的41个对象特权
将 <所有者.tablename> 上的SELECT授予系统;
我的程序:
创建或替换过程系统。重建索引是
开始
立即执行 'alter index 重建在线';
结束GatherIndexStats;
/
我可以使用系统在sqlplus中重建索引。但是当我运行以下内容时:
SQL>开始
2系统。重建索引;
3提交;
4端;
5/
开始
*
第1行的错误:
ORA-01031: 权限不足
ORA-06512: 在 “系统。重建索引”,第32行
ORA-06512: 在2号线
SQL>
我搜索了很多,但仍然不知道授予系统哪种特权。
有人能帮忙吗?
提前谢谢。
当在过程中使用在线选项重建索引时,我遇到了 “ORA-01031: 权限不足” 错误。
我知道该角色不能在过程中使用,因此向系统授予一些特权 (其DBA'
用户: 系统
特权:
-系统的2个角色
使用ADMIN选项向系统授予AQ_ADMINISTRATOR_ROLE;
将DBA授予具有ADMIN选项的系统;
更改用户系统默认角色全部;
授予系统更改任何索引;
授予对系统进行任何分析;
授权创建任何表到系统;
授予系统创建物化视图;
向系统授予创建会话;
向系统授予创建表;
授予将任何表放到系统;
授予对系统执行任何程序;
授权执行任何程序到系统;
向系统授予全局查询重写;
授予系统选择任何字典;
向系统授予选择任何表;
在任何表格下授予系统;
使用管理选项向系统授予无限的表空间;
-系统的41个对象特权
将 <所有者.tablename> 上的SELECT授予系统;
我的程序:
创建或替换过程系统。重建索引是
开始
立即执行 'alter index
结束GatherIndexStats;
/
我可以使用系统在sqlplus中重建索引。但是当我运行以下内容时:
SQL>开始
2系统。重建索引;
3提交;
4端;
5/
开始
*
第1行的错误:
ORA-01031: 权限不足
ORA-06512: 在 “系统。重建索引”,第32行
ORA-06512: 在2号线
SQL>
我搜索了很多,但仍然不知道授予系统哪种特权。
有人能帮忙吗?
提前谢谢。
专家解答
不要在系统中创建对象!
如果您希望管理员用户进行这样的维护操作,请创建自己的。然后授予它您需要的特权。
不管怎样,继续你的问题。要在PL/SQL中执行命令,您需要直接授予特权。不是通过角色。
因此,您的过程的所有者需要 “alter any index” 特权 (或拥有索引):
另外,值得一问。你为什么要建立一个程序来做到这一点?重建索引真的有必要吗?
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1860329900346402725
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_question_id:2913600659112
如果您希望管理员用户进行这样的维护操作,请创建自己的。然后授予它您需要的特权。
不管怎样,继续你的问题。要在PL/SQL中执行命令,您需要直接授予特权。不是通过角色。
因此,您的过程的所有者需要 “alter any index” 特权 (或拥有索引):
SQL> create user u identified by u; User created. SQL> grant connect to u; Grant succeeded. SQL> create table u.t (x int); Table created. SQL> create index u.i on u.t(x); Index created. SQL> SQL> create or replace procedure p is 2 begin 3 execute immediate 'alter index u.i rebuild'; 4 end p; 5 / Procedure created. SQL> SQL> exec p; BEGIN p; END; * ERROR at line 1: ORA-01418: specified index does not exist ORA-06512: at "CHRIS.P", line 3 ORA-06512: at line 1 SQL> alter index u.i rebuild; Index altered. SQL> conn sys/xxxx as sysdba Connected. SQL> grant alter any index to chris; Grant succeeded. SQL> conn chris/xxxx Connected. SQL> exec p; PL/SQL procedure successfully completed. SQL> drop user u cascade; User dropped.
另外,值得一问。你为什么要建立一个程序来做到这一点?重建索引真的有必要吗?
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1860329900346402725
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_question_id:2913600659112
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




