使用全文检索的intermedia索引时遇到ORA03212问题的解决

Bug系统中按反馈描述或处理情况的关键字查询,有时会找不到,但明明有这样的记录.
后来,查到是因为该搜索使用了Oracle的intermedia索引,该索引需要定期重建和收集,但自动任务失效了.

查到那个执行失败的过程,手工执行时出现了如下错误:
ORA-03212 : Temporary Segment Cannot Be Created In Locally-Managed Tablespace
进一步查到是ctx_ddl.sync_index同步索引时出错,
估计是上次转换表空间为本地管理表空间后引起的问题,因为同步全文索引要使用临时段,可能当前用户的临时表空间是本地管理的.
于是上matalink查到Doc ID:  Note:131716.1
Create temporary segment(s) in a permanent locally managed tablespace is not allowed.

也就是说,不能在本地管理的永久性表空间上创建临时段.

找到intermedia的用户CTXSYS,查到它的表空间
Select Temporary_Tablespace From Dba_Users Where Username = 'CTXSYS'
再查他的表空间类型:
Select Extent_Management From Dba_Tablespaces Where Tablespace_Name = 'DRSYS'

果然是这样,那么,指定CTXSYS的临时表空间为其它的临时表空间可以吗,例如:Temp
ALTER USER CTXSYS TEMPORARY Tablespace TEMP;

然后,重新登录再运行,果然就正常了.(不重新登录的话,运行会出错)

最后,经过近10分钟的intermedia索引收集与同步,Bug系统中的搜索功能就能准确的搜到目标了,
不过,这个自动任务是每天执行一次,当天的需要次日才生效.

原文地址:https://www.cnblogs.com/zyk/p/419918.html