Bonjour,
Nous avons effectué une migration de Oracle 12c vers Oracle 19c (19.10.0.0.0) récemment. Depuis une requête en particulier plante régulièrement. Il s'agit d'un update sur une table avec une jointure sur d'autres tables dans le where via une clause EXISTS et une sous requête. La requête est banale et fonctionnait très bien depuis 2 ans en 12c.
En l'occurrence, ça plante particulièrement quand la sous-requête n'a qu'une ligne à exploiter (table principale issue d'un xmlelement) et ne renvoie rien (donc aucune mise à jour ne se fait).
En outre, le problème semble aléatoire même lorsque ces conditions sont remplies. Cette requête appelée des milliers de fois par heure dans un contexte de PROD plante environ 1 fois sur 3 et 1 jour sur 3 (les 2 autres jours, aucun plantage et les jours ou ça plante, 2 fois sur 3 ça marche sans explication).
On a changé le EXISTS par un IN pour la jointure via sous requête (ce qui est moins bien pour les perfs...) et depuis ça remarche à tous les coups.
Il semble donc y avoir un bug dans la 19c qui plante sur une certaine structure de requête UPDATE WHERE EXISTS et selon des conditions que je n'ai pas réussi à clairement identifier (sous requête renvoie 0 ligne Ok ; mais pourquoi certains jours et certains appels et pas d'autres ??? Peut être en lien avec le traffic sur la BDD).
Je n'ai malheureusement pas le code erreur d'Oracle car l'exception est cachée et rendue générique (encore une fois en contexte de PROD). Et je n'ai pas d'environnement de test avec exactement la même version d'Oracle sur lequel on reproduirait le problème.
Est-ce que quelqu'un aurait entendu parler de ce genre de bug en 19c pour m'aider à y voir plus clair et savoir quel patch appliquer ?
Merci d'avance,
Seb
Partager