ORA-0*(600?|7445|4[0-9][0-9][0-9])[^0-9]

Le seuil « Warning » par défaut de la « Generic Alert Log Error » metric d’Oracle GridControl est « ORA-0*(600?|7445|4[0-9][0-9][0-9])[^0-9] ». Mais qu’est-ce que ca veut dire?

  • « ORA- » signifie que le début de la chaîne que l’on cherche est « ORA-« 
  • « 0* » (zéro suivi d’un asterisk) signifie qu’ensuite vous avez « 0 » un certain nombre de fois; ce nombre allant d’aucune à un nombre illimité d’occurences. Un 0 suivit de * n’est donc pas forcément présent !
  • Les parenthèses « ( » avec le pipe « | » signifient plusieurs alternatives, i.e. l’un des choix possibles
  • « 0? » (zero suivi d’un point d’interrogation) signifie que vous avez « 0 » 1 fois ou zéro fois. Autrement dit « 600? » correspond à 600 ou à 60 !
  • [0-9] signifie tous les caractères compris entre 0 est 9, soit tous les chiffres. Autrement dit « 4[0-9][0-9][0-9] » signifie tous les nombre entre 4000 et 4999.
  • Enfin ^ signifie « différent de »; [^0-9] signifie donc n’importe quel caractère en dehors des chiffres compris entre 0 et 9. Pour tester une exception, ajoutez un caractère comme par exemple un deux-points « : » ou un espace  » « .

Pour tester l’expression, vous pouvez utiliser quelque chose comme ce qui suit avec Oracle 10g :

select 1
from dual
where regexp_like('ORA-07445:',
'ORA-0*(600?|7445|4[0-9][0-9][0-9])[^0-9]');

ou si vous préférez, utilisez Perl:

perl -e "if ( 'ORA-07445:'
=~ /ORA-0*(600?|7445|4[0-9][0-9][0-9])[^0-9]/ )
{print "match n"}
else {print "no match n"}"