Устранить ошибку DRG-11119 в emagent.trc в Oracle 11.2
В нашей базе данных Oracle 11.2.0.3 есть несколько индексов Oracle Text типа CTXCAT. Процесс из 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
==================================================================
Я немного поработал и обнаружил, что вызов ctx_report.index_stats (ctxcat_indexname) для любого индекса типа CTXCAT дал мне точно такую же ошибку, вплоть до номеров строк.
За этим последовали новые споры, так как поиск textIndexStats в Google мало что дал. Я наконец нашел его в списке вывода: emctl status agent scheduler | grep textIndexStats
но ничего в select * from dba_scheduler_jobs не соответствует textIndexStats, поэтому мне было неясно, где искать дальше, и хотелось бы знать, как предотвратить повторение.
1 ответ
Я смог решить проблему и решил ответить на свой вопрос другим, которые могут столкнуться с этой проблемой и столкнуться с той же стеной, что и я. Я до сих пор не знаю, что вызвало это, но это исправлено.
Дальнейшие исследования указали мне на следующую ссылку, которая содержала достаточно подсказок, чтобы указать мне правильное направление. http://docs.oracle.com/cd/B14099_19/manage.1012/b16242/emctl.htm
Раздел 2.7.6 "Переоценка метрических коллекций" содержал информацию о файлах, в которых хранятся метрики Enterprise Manager. Чтобы избежать неработающих ссылок, я скопирую некоторые выдержки из этой статьи здесь:
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'd для textIndexStats в этом каталоге и нашел его в файле с именем database.xmlp. Я нашел много информации в следующей строке:
<Metric NAME="textIndexStats" TYPE="RAW" IS_METRIC_LONG_RUNNING="TRUE" >
Наиболее полезная часть информации поступила от SQL, встроенного в CDATA, который включал следующие строки:
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);
Это делает очевидным, что несуществующее имя индекса было проанализировано из столбца комментариев в dba_scheduler_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;
/
Это устранило проблему файла журнала трассировки СПАМА. Было бы хорошо, если бы индексы CTXCAT не могли быть добавлены или чтобы они обрабатывались изящно, когда они там. Я надеюсь, что это поможет следующему администратору в будущем, потому что я потратил слишком много времени на это.