问题描述
代码:
create or replace procedure REBUILD_X_TEXT
IS
err_code NUMBER;
err_msg VARCHAR2(100);
Begin
EXECUTE IMMEDIATE 'ALTER INDEX TWPROD.X_TEXT_ENTITY rebuild parameters(''REPLACE Metadata sync(every "SYSDATE+15/1440")'')';
EXECUTE IMMEDIATE 'ALTER INDEX TWPROD.X_TEXT_ENTITY noparaLLEL';
exception
WHEN OTHERS THEN
err_code := sqlCODE;
err_msg := SUBSTR(sqlERRM,1,100);
DBMS_OUTPUT.put_line('Rebuild index Failed : Error code ' || err_code || ': ' || err_msg);
END REBUILD_X_TEXT;
错误:
连接数据库PROD
ORA-29874:在执行 ODCIINDEXALTER 例程时出现警告
ORA-29960:第 1 行,
DRG-10595:ALTER INDEX X_TEXT_ENTITY 失败
DRG-50857:drvddl.Resubmit_job 中的 oracle 错误
ORA-27486:权限不足
ORA-06512:在“SYS.REBUILD_X_TEXT”,第 7 行
ORA-06512:在第 2 行
进程退出。
与数据库 PROD 断开连接。
解决方法
我假设这是关于文本索引(因为它的名称是 X_TEXT_ENTITY)并且该过程是作为 sys 以外的“普通”用户执行的。
在这种情况下,请检查用户是否具有创建表权限,如果没有,则发出它。 我知道您知道如何向用户授予权限,但我仍会发布该声明,以防有人稍后找到答案。
grant create table on USERNAME;
原因是 Oracle 为每个 TEXT 索引创建了一组表,这也是人们在处理文本索引时看到“ORA-27486:权限不足”的最常见原因。
由于修改索引时出现问题,可能需要玩“alter any table”权限,违反数据库安全。如果安全方面是一个问题,您可能需要检查为该索引创建的表(它们的名称以“DR$INDEX_NAME%”开头)并向执行 REBUILD_X_TEXT 的用户发出“alter table”授权