Sql 无法删除并重新创建oracle文本索引
我无法删除并重新创建oracle文本索引Sql 无法删除并重新创建oracle文本索引,sql,oracle,oracle11g,oracle-text,Sql,Oracle,Oracle11g,Oracle Text,我无法删除并重新创建oracle文本索引 SQL> drop index "WBR"."CTX_t1"; Index dropped SQL> SQL> CREATE INDEX "WBR"."CTX_t1" 2 ON WBR.t1(ASSET_XML) 3 INDEXTYPE IS "CTXSYS"."CONTEXT" 4 PARAMETERS ('DATASTORE CTXSYS.DIRECT_DATASTORE SECTION GROUP CTXS
SQL> drop index "WBR"."CTX_t1";
Index dropped
SQL>
SQL> CREATE INDEX "WBR"."CTX_t1"
2 ON WBR.t1(ASSET_XML)
3 INDEXTYPE IS "CTXSYS"."CONTEXT"
4 PARAMETERS ('DATASTORE CTXSYS.DIRECT_DATASTORE SECTION GROUP CTXSYS.AUTO_SECTION_GROUP SYNC (every "SYSDATE+10/1440")')
5 ;
CREATE INDEX "WBR"."CTX_t1"
ON WBR.t1(ASSET_XML)
INDEXTYPE IS "CTXSYS"."CONTEXT"
PARAMETERS ('DATASTORE CTXSYS.DIRECT_DATASTORE SECTION GROUP CTXSYS.AUTO_SECTION_GROUP SYNC(every "SYSDATE+10/1440")')
ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
DRG-10507: duplicate index name: CTX_t1
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 366
即使删除了cintext索引,我也可以在CTXSYS.CTX_索引中看到该条目
作业和内部表仍在数据库中:
DR$CTX_t1$I
DR$CTX_t1$J--job
DR$CTX_t1$K
DR$CTX_t1$N
DR$CTX_t1$R
DR$CTX_t1$X
有什么建议吗?1)检查是否存在同名的其他对象(可能不区分大小写)
如果是,就放弃它
2) 尝试使用FORCE选项删除索引
drop index "WBR"."CTX_t1" FORCE;
如果没有帮助:
3) 请与Oracle支持部门联系对于那些在创建索引期间和drop index语句之后出现稍有不同错误(我使用Oracle 12c)的用户,这基本上不是一个答案:
ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
DRG-50857: oracle error in drvxtab.create_index_tables
ORA-00955: name is already used by an existing object
ORA-06512: at "CTXSYS.DRUE", line 171
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 316
在删除索引和从CTXSYS表中清除相关数据之间似乎有一个时间差(或其他原因)(但我不需要任何commit语句)。因此,对我来说,再次执行drop索引并再次运行相同的create语句解决了这个问题(第二次create运行正常)这似乎是oracle上的一个bug。我们有一个脚本,可以从生产数据库刷新质量数据库。为了解决这个问题,我们在刷新开始之前执行这个PL/SQL脚本
/**
* Correctif bug sur la suppression d'index full text:
* Unable to recreate an Oracle Text index as the database continually throws a "DRG-10507: duplicate index name" error
* http://ask4dba.blogspot.com/2016/11/drg-10507-in-creating-text-index-after.html
* https://www.ibm.com/support/pages/unable-recreate-oracle-text-index-database-continually-throws-drg-10507-duplicate-index-name-error
**/
DECLARE
LR$IDX_ID NUMBER(15);
LR$IDX_NAME VARCHAR2(255);
LR$SCHEMA VARCHAR2(255);
CURSOR C1 IS
select IDX_ID, IDX_NAME, usr.USERNAME from CTXSYS.DR$INDEX
join all_users usr on usr.USER_ID = IDX_OWNER#
where IDX_NAME in ('IDX_EDI_EMISSION_MSG_EAI', 'IDX_EDI_EMISSION_MSG', 'IDX_EDI_RECEPTION_MSG', 'IDX_EDI_RECEPTION_MSG_TMS');
BEGIN
DBMS_OUTPUT.put_line('DEBUT de la suppression des index fulltext' );
OPEN C1;
LOOP
FETCH C1 INTO LR$IDX_ID, LR$IDX_NAME, LR$SCHEMA;
EXIT WHEN C1%NOTFOUND;
BEGIN
BEGIN
DBMS_OUTPUT.put_line('Suppression (drop) de l''index '|| LR$SCHEMA || '.' || LR$IDX_NAME );
execute immediate 'DROP INDEX ' || LR$SCHEMA || '.' || LR$IDX_NAME;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('Erreur Oracle #'||TO_CHAR(SQLCODE)||' : '||SQLERRM(SQLCODE));
DBMS_OUTPUT.put_line('L''index ' || LR$IDX_NAME ||' n''existe pas : ' || LR$IDX_ID);
END;
DBMS_OUTPUT.put_line('Suppression des lignes de l''index ' || LR$IDX_ID);
delete from ctxsys.dr$index_value where IXV_IDX_ID = LR$IDX_ID;
delete from ctxsys.dr$index_object where IXO_IDX_ID = LR$IDX_ID;
delete from ctxsys.dr$index where idx_id = LR$IDX_ID;
commit;
END;
END LOOP;
CLOSE C1;
COMMIT;
End ;
/
[1] Oracle文本:
创建或更改索引失败,DRG-50857、ORA-27486(文档ID 2497828.1)
将create
作业授予用户,然后尝试创建索引,它应该可以工作
我遇到过将索引同步参数从
('sync(on commit)
更改为('sync(EVERY“SYSDATE+15/1440”))
,因为这将自动使用Oracle作业,架构应具有创建作业权限。您需要在删除索引后提交更改。没有帮助。在发出DDL后提交?是否尝试跳过“(引号)?发布从dba\u objects where up(object\u name)中选择所有者、object\u name、object\u type的结果类似于“%CTX_T1%”;
和您的Oracle版本。您是与用户WBR连接还是与其他用户连接?我不是以WBR用户身份登录的。我正在从另一个模式尝试上述任务…在遇到错误时…我甚至尝试从DBA模式执行相同的操作,但失败了。同样的错误。我也尝试了FORCE子句。即使这样也不起作用g、 相同错误这是正确的解决方案(WO)如何解决因索引名称重复而导致的重建帮助搜索索引错误?(文档ID 1369248.1)
/**
* Correctif bug sur la suppression d'index full text:
* Unable to recreate an Oracle Text index as the database continually throws a "DRG-10507: duplicate index name" error
* http://ask4dba.blogspot.com/2016/11/drg-10507-in-creating-text-index-after.html
* https://www.ibm.com/support/pages/unable-recreate-oracle-text-index-database-continually-throws-drg-10507-duplicate-index-name-error
**/
DECLARE
LR$IDX_ID NUMBER(15);
LR$IDX_NAME VARCHAR2(255);
LR$SCHEMA VARCHAR2(255);
CURSOR C1 IS
select IDX_ID, IDX_NAME, usr.USERNAME from CTXSYS.DR$INDEX
join all_users usr on usr.USER_ID = IDX_OWNER#
where IDX_NAME in ('IDX_EDI_EMISSION_MSG_EAI', 'IDX_EDI_EMISSION_MSG', 'IDX_EDI_RECEPTION_MSG', 'IDX_EDI_RECEPTION_MSG_TMS');
BEGIN
DBMS_OUTPUT.put_line('DEBUT de la suppression des index fulltext' );
OPEN C1;
LOOP
FETCH C1 INTO LR$IDX_ID, LR$IDX_NAME, LR$SCHEMA;
EXIT WHEN C1%NOTFOUND;
BEGIN
BEGIN
DBMS_OUTPUT.put_line('Suppression (drop) de l''index '|| LR$SCHEMA || '.' || LR$IDX_NAME );
execute immediate 'DROP INDEX ' || LR$SCHEMA || '.' || LR$IDX_NAME;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('Erreur Oracle #'||TO_CHAR(SQLCODE)||' : '||SQLERRM(SQLCODE));
DBMS_OUTPUT.put_line('L''index ' || LR$IDX_NAME ||' n''existe pas : ' || LR$IDX_ID);
END;
DBMS_OUTPUT.put_line('Suppression des lignes de l''index ' || LR$IDX_ID);
delete from ctxsys.dr$index_value where IXV_IDX_ID = LR$IDX_ID;
delete from ctxsys.dr$index_object where IXO_IDX_ID = LR$IDX_ID;
delete from ctxsys.dr$index where idx_id = LR$IDX_ID;
commit;
END;
END LOOP;
CLOSE C1;
COMMIT;
End ;
/