执行重建索引查询时出错(ORA-29874 和 ORA-29960)

Posted

技术标签:

【中文标题】执行重建索引查询时出错(ORA-29874 和 ORA-29960)【英文标题】:getting error while executing the rebuild index queries (ORA-29874 and ORA-29960) 【发布时间】:2021-03-09 11:57:28 【问题描述】:

代码:

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 断开连接。

【问题讨论】:

删除 WHEN OTHERS 并让错误按照 oracle 的设计向堆栈传播。你为什么还要这样做?索引从重建中受益是非常罕见的。 richardfoote.wordpress.com/2007/12/11/…. 正在连接到数据库 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 断开连接。 嗨 Heena,哪个用户执行了 REBUILD_X_TEXT 过程?是系统吗? 是的,我正在使用 SYS 用户,但它给出的错误是权限不足 【参考方案1】:

我假设这是关于一个文本索引(因为它的名称是 X_TEXT_ENTITY)并且该过程正在作为 sys 以外的“普通”用户执行。

在这种情况下,请检查用户是否具有创建表权限,如果没有,请发出。 我知道您知道如何向用户授予权限,但我仍然会发布声明以防有人稍后找到答案。

grant create table on USERNAME;

原因是Oracle为每个TEXT索引创建了一组表,这是人们在处理文本索引时看到“ORA-27486:权限不足”的最常见原因。

由于更改索引时出现问题,您可能需要使用“更改任何表”权限,这违反了数据库安全性。如果安全方面是一个问题,您可能需要检查为该索引创建的表(它们的名称以“DR$INDEX_NAME%”开头)并向执行 REBUILD_X_TEXT 的用户发出“alter table”授权

【讨论】:

我尝试这样做仍然错误仍然存​​在,这也是域索引 @HeenaShaikh 这个用户可以在没有 plsql 的情况下单独执行“ALTER INDEX TWPROD.X_TEXT_ENTITY ...”语句吗? 单独语句也出现错误 SQL 错误:ORA-29874:执行 ODCIINDEXALTER 例程时出现警告 ORA-29960:第 1 行,DRG-10595:ALTER INDEX X_TEXT_ENTITY 失败 DRG-50857:oracle 错误在 drvddl.Resubmit_job ORA-27486: 权限不足 29874. 00000 - “执行 ODCIINDEXALTER 例程时出现警告” *原因:从 ODCIIndexAlter 例程返回警告。 *操作:检查例程是否已正确编码检查用户定义的警告日志表以获取更多详细信息。 我最后的想法是重新创建索引。如果这没有帮助 - 我没有想法

以上是关于执行重建索引查询时出错(ORA-29874 和 ORA-29960)的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 索引重建手册

Sql 查询过慢,尝试重建索引

SQL Server通过整理索引碎片和重建索引提高速度

SQL SEVER数据库重建索引的方法

Sql server 创建索引后,只有查询后重建才会生效,不知为啥?

查询重建域索引