Question

Supposons une instance Oracle doit être récupéré après une catastrophe. Est-ce que les séquences se réinitialisés à l'état initial, ou le dernier état enregistré, ou sont mises en cache des valeurs conservées?

Merci beaucoup. : -)

Était-ce utile?

La solution

Les valeurs de sequnce sont stockés dans le $ de SYSTEM.SEQ (je crois) table, et un cache est maintenu en mémoire des valeurs suivantes à être utilisé, avec la taille de ce cache étant fonction de la valeur d'antémémoire pour la séquence .

Lorsque le cache est épuisé la table $ SEQ est mis à jour à une nouvelle valeur (d'une manière non conforme -.-À-dire sans contrôle de transacton de session utilisateur application) et dire ensuite 100 valeurs (si CACHE = 100) lecture de la mémoire.

Supposons que vous utilisez une séquence avec une taille de cache de 20. Lorsque vous sélectionnez une certaine valeur de la séquence, disons 1400, la table SEQ $ est mis à jour à une valeur de 1420. Même si vous rollback votre transaction la SEQ $ a encore cette valeur jusqu'à ce que les 20 valeurs de séquence suivante ont été utilisées, à ce moment SEQ $ est mis à jour à 1440. Si vous avez alors juste valeur utilisée 1423 et un accident d'exemple se produit, alors que le système redémarre la prochaine valeur être lu de la sequnce sera 1440.

Alors, oui l'intégrité de la séquence sera conservée et le nombre ne sera pas « réédité ». Notez que la même pour un arrêt progressif - lorsque vous redémarrez, vous obtiendrez une nouvelle valeur de 1440 dans l'exemple ci-dessus. Les séquences ne sont pas garantis espace libre dans la pratique pour cette raison (aussi parce que l'utilisation d'une valeur et puis rouler ne restaure pas en arrière cette valeur dans le cache).

Autres conseils

Non que j'ai une expérience avec cela, mais je suppose que beaucoup d'une reprise à un état de numéro de changement de système cohérent redonnerait aussi la séquence au dernier état enregistré. Tout le reste serait assez inutile en termes de récupération.

En ce qui concerne les valeurs mises en cache, ce sont (peuvent être) perdu, même lorsque l'instance arrête des bas d'une manière ordonnée (*): Les instances cache un certain nombre de valeurs de séquence en mémoire (SGA) au lieu d'aller à la base de données à chaque fois. séquence non utilisée des valeurs que l'instance a réservé peut « disparaître », vous laissant avec des lacunes dans la séquence.

(*) la documentation 8i mentionne que cela peut se produire avec des instances parallèles (RAC), auquel cas la séquence peut même ne pas être strictement ascendant (mais encore unique), disent 10g docs que cela arrive en cas de défaillance d'instance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top