Ошибка constraint violated в Thresholds

sergejh_hr
Дата: 20.12.2012 09:27:00
После упорядочивания таблеспейсов в базе (создание новых, перенос таблиц, удаление старых) начались сыпаться трейсы вида qr1_m000_5789.trc каждые 10 минут. Содержимое:
ktte_threshold_slave: suppressing error 1

Покопав проблему, я пришёл к выводу что на базах, где сыпутся эти трейсы, запрос SELECT * FROM dba_thresholds или SELECT * FROM TABLE (DBMS_SERVER_ALERT.view_thresholds) выдаёт ошибку ORA-00001: unique constraint (SYS.WRI$_ALERT_THRESHOLD_PK) violated.
Такая же ошибка при попытке модифицировать Threshold в DB control: Database Instance -> Tablespaces -> Thresholds, изменить. Затем Apply - и ошибка. В базах где этих ошибок в трейсах нету - запрос из dba_thresholds проходит успешно. Я предположил, что проблема где-то рядом. Что-то связано с мониторингом табличных пространств и уровней предупреждений в них (threshold alerts).

Пакет DBMS_SERVER_ALERT - с закрытым кодом (wrapped pl/sql), найти конкретное место не получится. Содержимое таблицы WRI$_ALERT_THRESHOLD с виду нормальное, повторяющихся записей (якобы нарушающих уникальность ключа) не найдено.

Есть ли какие-нибудь версии куда еще копать?

нашел сходные темы:
/topic/731282
/topic/919340
sergejh_hr
Дата: 20.12.2012 12:29:44
забыл указать версию...
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 (PSU 10.2.0.5.6)
orawish
Дата: 20.12.2012 17:16:30
sergejh_hr,

?
select * from dba_sequences
where SEQUENCE_OWNER='SYS'
and SEQUENCE_NAME like 'WR%ALERT%TH%';
 WRI$_ALERT_THRSLOG_SEQUENCE
sergejh_hr
Дата: 21.12.2012 07:53:06
orawish,
Спасибо, помогло! )
Полез смотреть последовательности - нашел таблицу WRI$_ALERT_THRESHOLD_LOG. Увидел в ней расхождение номеров с последним в sequence. Ну и понял что надо просто очистить этутабличку. И на всякий случай табличку WRI$_ALERT_HISTORY. Сделал им экспорт, затем:
DELETE FROM SYS.WRI$_ALERT_HISTORY;
DELETE FROM SYS.WRI$_ALERT_THRESHOLD_LOG;

после чего ошибка исчезла и трейсы прекратились.
trace.log
Дата: 27.11.2017 15:53:32
sergejh_hr
orawish,
Спасибо, помогло! )
Полез смотреть последовательности - нашел таблицу WRI$_ALERT_THRESHOLD_LOG. Увидел в ней расхождение номеров с последним в sequence. Ну и понял что надо просто очистить этутабличку. И на всякий случай табличку WRI$_ALERT_HISTORY. Сделал им экспорт, затем:
DELETE FROM SYS.WRI$_ALERT_HISTORY;
DELETE FROM SYS.WRI$_ALERT_THRESHOLD_LOG;

после чего ошибка исчезла и трейсы прекратились.


++ и мне помогло.