6f429244e498457b8400e72e4af683b0 Alberto Blog: ORA-25228: TIMEOUT OR END-OF-fetch during message dequeue FROM SYS.ALERT_QUEUE

martedì 4 settembre 2012

ORA-25228: TIMEOUT OR END-OF-fetch during message dequeue FROM SYS.ALERT_QUEUE

Dopo una analisi di tutti i log relativi OEM mi sono imbattuto nel file emagent.trc.
In questo file trace ho trovato un errore ripetuto moltissime volte: ORA-25228: TIMEOUT OR END-OF-fetch during message dequeue FROM SYS.ALERT_QUEUE.
Come prima cosa ho fatto una verifica nel Metalink per un rapido controllo .
Infatti si tratta del Bug 6484482.
Quest'ultimo si verifica quando il trigger "after servererror" contiene errori di codice SQL, ossia non sta funzionando come dovrebbe e scrivendo nella tabella "log_servererr" genera degli errori:

2007-09-18 12:15:14 Thread-134875 ERROR vpxoci: Error on dequeue from SYS.ALERT_QUE: ORA-00604:error occurred at recursive SQL level 1
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 30
ORA-25228: timeout or end-of-fetch during message dequeue from SYS.ALERT_QUEUE


Il metalink fornisce anche la soluzione così:
SQL> select trigger_name from dba_triggers where trigger_type = 'AFTER EVENT' and triggering_event ='ERROR ';
TRIGGER_NAME
LOG_ERRORS


Nel mio caso per poi disabilitarlo con
ALTER TRIGGER LOG_ERRORS DISABLE;

Facendo ripartire i DB e l'agent non dovrebbero più esserci questi errori, ma  trovando questa risoluzione un pò radicale anche perchè il trigger nel caso mio è utile al posto di disabilitarlo ho provveduto a modificarlo inserendo:

if ora_login_user not in ('DBSNMP','SYSMAN') then...

else...

End if;

In questo modo il trigger resta valido per tutti a parte gli utenti DBSNMP e SYSMAN, proprio quelli di OEM.
Nel mio caso ho trovato questa soluzione ottimale.

Nessun commento:

Posta un commento