You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在非表所在表空间创建Oracle Text Context索引报错求助

Oracle Text Context索引创建错误排查(ORA-29855/DRG-11000)

问题场景

需要在与表ATTACH不同的表空间IDX中,针对BLOB类型字段ATTACH_BIN创建Context类型的Oracle Text索引,执行的SQL语句如下:

CREATE INDEX ATT_INDEX ON ATTACH(ATTACH_BIN)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS ('DATASTORE CTXSYS.DEFAULT_DATASTORE SYNC(EVERY trunc(sysdate + 1))') TABLESPACE IDX;

报错信息

执行后触发以下错误:

ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
DRG-11000: invalid keyword (
ORA-06512: at "CTXSYS.DRUE", line 186
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 320
00000 -  "error occurred in the execution of ODCIINDEXCREATE routine"
*Cause:    Failed to successfully execute the ODCIIndexCreate routine.

错误原因

DRG-11000错误直接指向参数语法非法,具体问题出在SYNC参数的写法上:

  • Oracle Text的SYNC子句中,EVERY后面必须跟时间间隔表达式(如"1" DAY),不能直接嵌套PL/SQL函数(trunc(sysdate + 1))。
  • 原语句中SYNC(EVERY trunc(sysdate + 1))的语法不符合Oracle Text参数规范,导致解析失败。

解决方法

1. 修正SYNC参数语法

根据需求选择以下合法的SYNC写法:

  • 每日自动同步一次:使用时间间隔表达式
CREATE INDEX ATT_INDEX ON ATTACH(ATTACH_BIN)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS ('DATASTORE CTXSYS.DEFAULT_DATASTORE SYNC(EVERY "1" DAY)') 
TABLESPACE IDX;
  • 指定每日凌晨1点同步:使用SCHEDULE子句(基于Oracle Scheduler语法)
CREATE INDEX ATT_INDEX ON ATTACH(ATTACH_BIN)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS ('DATASTORE CTXSYS.DEFAULT_DATASTORE SYNC(SCHEDULE ''FREQ=DAILY;BYHOUR=1'')') 
TABLESPACE IDX;

注意:SCHEDULE字符串需要用双单引号转义,避免与外层参数的单引号冲突。

2. 额外注意事项

  • 确保表空间IDX已存在,且当前用户拥有在该表空间创建索引的权限。
  • 若ATTACH_BIN字段存储的是非纯文本格式的文档(如PDF、Word),需额外配置FILTER CTXSYS.AUTO_FILTER参数,否则可能无法正确索引内容:
CREATE INDEX ATT_INDEX ON ATTACH(ATTACH_BIN)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS ('DATASTORE CTXSYS.DEFAULT_DATASTORE FILTER CTXSYS.AUTO_FILTER SYNC(EVERY "1" DAY)') 
TABLESPACE IDX;

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:56:13