我们的Oracle 11.2.0.3数据库中有几个类型为CTXCAT的Oracle Text索引。 Oracle Enterprise Manager的进程每8分钟运行一次,并转储有关多年未存在的索引的错误,例如跟踪文件$ ORACLE_HOME / node_SID / sysman / log / emagent.trc中的这个:
==================================================================
2013-08-13 05:51:09,882 Thread-1079278176 WARN vpxoci: OCI Error -- ErrorCode(20000): ORA-20000: Oracle Text error:
DRG-10502: index PRODUCTION.IX2_WEB_SESSION_DETAIL does not exist
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.CTX_REPORT", line 534
ORA-06512: at line 48
SQL = "/* OracleOEM */
DECLARE
TYPE data_cursor_type IS REF CURSOR;
data_c"...
LOGIN = dbsnmp/<PW>@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=node-vip)(PORT=1521))(CONNECT_DATA=(SID=ORCL1)))
2013-08-13 05:51:09,882 Thread-1079278176 ERROR fetchlets.sql: ORA-20000: Oracle Text error:
DRG-10502: index PRODUCTION.IX2_WEB_SESSION_DETAIL does not exist
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.CTX_REPORT", line 534
ORA-06512: at line 48
2013-08-13 05:51:09,882 Thread-1079278176 ERROR engine: [rac_database,ORCL,textIndexStats] : nmeegd_GetMetricData failed : ORA-20000: Oracle Text error:
DRG-10502: index PRODUCTION.IX2_WEB_SESSION_DETAIL does not exist
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.CTX_REPORT", line 534
ORA-06512: at line 48
2013-08-13 05:51:09,882 Thread-1079278176 WARN collector: <nmecmc.c> Error exit. Error message: ORA-20000: Oracle Text error:
DRG-10502: index PRODUCTION.IX2_WEB_SESSION_DETAIL does not exist
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.CTX_REPORT", line 534
ORA-06512: at line 48
==================================================================
我接受了一次疯狂的攻击并按类型CONTEXT的名称创建了一个新索引(CTXCAT不起作用),错误停止了一段时间。我删除了那个索引,然后开始得到以下内容,这与我在尝试创建类型为CTXCAT的索引时看到的错误相同:
==================================================================
2013-08-30 02:13:07,129 Thread-1075751520 WARN vpxoci: OCI Error -- ErrorCode(20000): ORA-20000: Oracle Text error:
DRG-11119: operation is not supported by this index type
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.CTX_REPORT", line 534
ORA-06512: at line 48
SQL = "/* OracleOEM */
DECLARE
TYPE data_cursor_type IS REF CURSOR;
data_c"...
LOGIN = dbsnmp/<PW>@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=node-vip)(PORT=1521))(CONNECT_DATA=(SID=ORCL1)))
2013-08-30 02:13:07,129 Thread-1075751520 ERROR fetchlets.sql: ORA-20000: Oracle Text error:
DRG-11119: operation is not supported by this index type
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.CTX_REPORT", line 534
ORA-06512: at line 48
2013-08-30 02:13:07,130 Thread-1075751520 ERROR engine: [rac_database,ORCL,textIndexStats] : nmeegd_GetMetricData failed : ORA-20000: Oracle Text error:
DRG-11119: operation is not supported by this index type
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.CTX_REPORT", line 534
ORA-06512: at line 48
2013-08-30 02:13:07,130 Thread-1075751520 WARN collector: <nmecmc.c> Error exit. Error message: ORA-20000: Oracle Text error:
DRG-11119: operation is not supported by this index type
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.CTX_REPORT", line 534
ORA-06512: at line 48
==================================================================
我做了一些调查,发现在任何CTXCAT类型索引上调用ctx_report.index_stats(ctxcat_indexname)给了我完全相同的错误,直到行号。
随之而来的是更多的调查,因为在谷歌上寻找textIndexStats并没有太多。我终于在输出列表中找到了它: emctl状态代理调度程序| grep textIndexStats
但是dba_scheduler_jobs的select *中没有任何内容匹配textIndexStats,所以我不清楚接下来要去哪里看,并且想知道如何防止再次发生。
答案 0 :(得分:1)
我能够解决这个问题,并决定回答我自己的问题,因为其他人可能会遇到这个问题而且遇到了同样的问题。我仍然不知道是什么造成的,但它是固定的。
进一步的研究指出了以下链接,其中包含足够的提示,指出我正确的方向。 http://docs.oracle.com/cd/B14099_19/manage.1012/b16242/emctl.htm
第2.7.6节“重新评估度量标准集合”包含有关存储企业管理器度量标准的文件的信息。为避免死链接,我将在此处复制该文章的一些摘录:
1. Go to $ORACLE_HOME/sysman/admin/metadata directory, where $ORACLE_HOME is the Oracle Home of the Management Agent.
2. Locate the XML file for the target type. For example, if you are interested in the host metric 'Filesystem Space Available(%)' metric, look for the host.xml file.
我实际上在这个目录中grep了textIndexStats,并在名为database.xmlp的文件中找到它。我在以下行中找到了很多信息:
<Metric NAME="textIndexStats" TYPE="RAW" IS_METRIC_LONG_RUNNING="TRUE" >
最有用的信息来自嵌入CDATA的SQL,其中包括以下行:
cursor idx_cur IS
select owner,job_name,comments
from dba_scheduler_jobs where job_name like 'EM_IDX_STAT_JOB%' and
upper(owner) = 'DBSNMP';
idx_rec idx_cur%ROWTYPE;
BEGIN
OPEN idx_cur;
FETCH idx_cur into idx_rec;
guid := :1;
IF idx_cur%FOUND THEN
dbms_lob.createtemporary(statData,false);
dbms_lob.createtemporary(sizeData,false);
dbms_lob.createtemporary(objectsData,false);
idx_name := substr(idx_rec.comments,1,instr(idx_rec.comments,'|')-1);
这很明显,DBS_sMPduler_jobs中的DBSNMP用户的注释列正在解析不存在的索引名称,其作业名称为“EM_IDX_STAT_JOB%”。
运行上面光标中使用的相同查询,在调度程序表中显示了许多记录。显然,它们不是真正的调度程序条目,但用于对此脚本进行排队,该脚本将数据插入到sysman.mgmt_text_index_stats中。调度程序表中有许多CTXCAT和缺失的索引。显然,调度程序表中的行仅在成功时被删除,并且不正确的条目将会挂起多年。
要解决此问题,我以DBSNMP用户身份运行以下命令:
BEGIN
for idx_rec in (
select owner,job_name,comments
from dba_scheduler_jobs
where job_name like 'EM_IDX_STAT_JOB%' and upper(owner) = 'DBSNMP')
LOOP
DBMS_SCHEDULER.DROP_JOB( idx_rec.job_name );
END LOOP;
END;
/
这消除了SPAM跟踪日志文件的问题。如果无法添加CTXCAT索引,或者在那里处理它们时会很好。我希望这能帮助下一个DBA,因为我花了太多时间在它上面。