Erreurs ORA-00338 et ORA-00312 signalées dans l'alert log
S'applique à
Oracle Server - Enterprise Edition - Version 11.2.0.1 et ultérieures
Les informations de ce document s'appliquent à toutes les plateformes.
Symptômes
Les erreurs ci-dessous sont signalées à répétition dans l'alert log d'un nœud RAC.
Notez que le problème concerne aussi bien les bases de données RAC que non RAC.
ORA-00338: log <Log_Number> of thread <thread_number> is more recent than control file
ORA-00312: online log <Log_Number> thread <thread_number>: 'redo.log'
Cause
L'erreur ORA-00338 indique normalement qu'un fichier de contrôle (control file) incorrect est peut-être utilisé :
00338, 00000, "log %s of thread %s is more recent than control file"
// *Cause: The control file change sequence number in the log file is
// greater than the number in the control file. This implies that
// the wrong control file is being used. Note that repeatedly causing
// this error can make it stop happening without correcting the real
// problem. Every attempt to open the database will advance the
// control file change sequence number until it is great enough.
// *Action: Use the current control file or do backup control file recovery to
// make the control file current. Be sure to follow all restrictions
// on doing a backup control file recovery.
L'erreur est signalée lorsque le numéro de séquence du journal est supérieur au numéro de séquence du fichier de contrôle. Le processus qui détecte cette situation inscrit les entrées dans l'alert log.
Compte tenu de la cause habituelle de cette erreur, vérifiez d'abord que le bon fichier de contrôle est utilisé.
Dans ce cas précis, les mises à jour du fichier de contrôle n'arrivaient pas à suivre le rythme des changements de journal (log switches), soit 5 à 6 par minute. L'écart entre les numéros de séquence des journaux provenait des changements de redo log excessifs survenus avant l'erreur. Notez que des messages "Log file switch (checkpoint incomplete)" étaient aussi signalés.
Dans ce cas, le client a indiqué que les changements de journal rapides étaient forcés par les 'storage side backup settings', autrement dit que sa solution de sauvegarde lançait à un rythme élevé des commandes 'alter system switch log file'.
Solution
Après avoir vérifié que le bon fichier de contrôle est utilisé, vous pouvez résoudre le problème en réduisant les changements de redo log explicites trop rapprochés.
Si les changements de journal ne sont pas forcés manuellement ou par une application (comme dans ce cas), vous pouvez effectuer les vérifications et actions ci-dessous :
Vérifiez que la taille des redo logs convient à la charge de travail.
Le document ci-dessous présente un exemple de redimensionnement des fichiers redo log
Note 1035935.6 - Example of How To Resize the Online Redo Logfiles
Après avoir ajusté la taille des fichiers redo log, surveillez l'alert log de votre base de données pour déterminer le délai entre les changements de journal. Oracle recommande un changement de redo log toutes les 20 à 30 minutes.
REMARQUE :
Vous pouvez utiliser la colonne OPTIMAL_LOGFILE_SIZE de la vue V$INSTANCE_RECOVERY pour déterminer la taille recommandée de vos online redo logs. Ce champ indique, en mégaoctets, la taille de fichier redo log jugée optimale selon la valeur actuelle de FAST_START_MTTR_TARGET. Si ce champ affiche constamment une valeur supérieure à la taille de votre plus petit online log, configurez tous vos online logs pour qu'ils aient au moins cette taille.
Vérifiez quelle session génère beaucoup de redo.
Le document ci-dessous explique comment trouver la session qui génère beaucoup de données redo ou d'archives :
Note 167492.1 - SQL: How to Find Sessions Generating Lots of Redo or Archive logs