Oracle
 sql >> Base de données >  >> RDS >> Oracle

Qu'est-ce que Annuler et rétablir dans la base de données Oracle

Beaucoup de gens me posent souvent des questions

Qu'est-ce que Annuler et Rétablir dans la base de données Oracle ? À quoi ça sert ?

J'essaie de lever tous les doutes à ce sujet ici dans le post

Qu'est-ce que l'annulation dans Oracle ?

Undo est stocké dans l'espace de table Undo de la base de données. Il stocke les valeurs avant des blocs de données modifiés chaque fois que nous émettons une instruction d'insertion, de mise à jour ou de suppression (opération DML) . Lorsque nous émettons une instruction DML, les blocs modifiés sont stockés dans le cache tampon et les valeurs avant pour ces blocs modifiés dans les segments UNDO. Chaque fois que nous émettons une commande ROLLBACK, elle utilise le segment d'annulation pour revenir à la valeur précédente.

C'est comme Annuler dans le Bloc-notes ou Microsoft Word

L'annulation d'une suppression est plus importante que celle d'une insertion. En effet, l'annulation d'une suppression correspond en fait à la réinsertion de la ligne entière. Ainsi, il a des valeurs de conservation pour chacune des colonnes de la ligne pour pouvoir "annuler" la suppression.
Inversement, l'annulation d'une insertion est une suppression de la ligne par ROWID - qui n'a pas à conserver les valeurs en cours de suppression.

Undo nous fournit également  la cohérence de lecture pour un utilisateur car il ne peut voir les valeurs précédentes que jusqu'à ce qu'une transaction soit validée. Pour expliquer, je donnerais un exemple

L'utilisateur A démarre le curseur de sélection sur la table à l'instant t .Le curseur s'exécutera pendant un certain temps

L'utilisateur B commence à mettre à jour la même table à l'instant t'.

À présent, l'utilisateur A doit obtenir la version cohérente en lecture de la table à l'instant t. Mais les blocs sont mis à jour par l'utilisateur B après un certain temps.

Oracle utilise donc les segments d'annulation pour restaurer l'image avant la mise à jour de ces blocs à partir des segments d'annulation afin d'obtenir des vues cohérentes en lecture

Les annulations ne sont pas détruites immédiatement après la validation ou la restauration car elles seront utilisées dans le mécanisme cohérent de lecture.

Ils sont également utilisés dans les requêtes flashback pour voir les anciennes données validées à l'aide de l'annulation de la restauration.

Combien de temps les données d'annulation sont-elles stockées dans la base de données ?
Oracle offre une flexibilité quant à la durée de stockage des données d'annulation à l'aide du paramètre undo_retention. Nous pouvons définir le paramètre undo_management sur automatique pour qu'Oracle gère la rétention des annulations (par défaut), ou même définir cette valeur manuellement et sa valeur doit être supérieure au temps pris par la requête la plus longue dans votre base de données. Dans 11g Onward Oracle a réglé ce paramètre automatiquement selon la taille du tablespace d'annulation

Qu'est-ce qu'une transaction ?
Une transaction est une collection d'instructions en langage de manipulation de données SQL (DML) traitées comme une unité logique.
L'échec d'une instruction entraîne l'annulation de la transaction. Si toutes les instructions sont traitées, SQLPlus ou le l'application de programmation émettra un COMMIT pour rendre les modifications de la base de données permanentes. Les transactions sont implicitement validées si un utilisateur se déconnecte normalement d'Oracle.
Des déconnexions anormales entraînent l'annulation de la transaction. progrès.

Qu'est-ce que refaire dans Oracle ?

Redo signifie enregistrer les travaux ce qui a été fait, afin que le travail ne soit pas perdu. Les journaux REDO sont utilisés dans la récupération. Chaque fois que nous insérons dans la base de données, cela fait les choses suivantes

  1. Insérer la ligne dans le tampon
  2. générer l'annulation dans le tampon
  3. Écrire les changements de rétablissement, c'est-à-dire insérer des lignes dans les journaux de rétablissement
  4. Écrire les changements de rétablissement pour les segments d'annulation dans les journaux de rétablissement

Ainsi, chaque opération DML effectuée dans la base de données est enregistrée dans les journaux redo à des fins de récupération

Les redo sont d'abord écrits dans le tampon de journalisation de SGA. Le processus d'écriture de journal (LGWR) écrit ces modifications du "tampon de journalisation" dans les fichiers de journalisation du disque

Les journaux de rétablissement aident à restaurer toute perte de données due à une erreur humaine, une défaillance du système d'exploitation ou une défaillance du disque dur.

Les journaux redo sont essentiels au fonctionnement de la base de données, car ils offrent une tolérance aux pannes.

Avant d'écrire les modifications dans les tables du fichier de données, Oracle écrit d'abord le tampon redo dans le fichier redo logs .

nous avons l'option de non-journalisation disponible pour certaines opérations afin de ne pas générer de tampons de rétablissement.

Fonctionnement des journaux de rétablissement
Le serveur Oracle enregistre de manière séquentielle toutes les modifications apportées à la base de données dans le tampon de journalisation. Les entrées de journalisation sont écrites à partir du tampon de journalisation vers l'un des groupes de journalisation en ligne appelé groupe de journalisation en ligne actuel par le processus LGWR. LGWR écrit dans
les situations suivantes :
• Lorsqu'une transaction est validée
• Lorsque le tampon de journalisation est plein au tiers
• Lorsqu'il y a plus d'un mégaoctet d'enregistrements modifiés dans le tampon de redo log
• Avant que le DBWn n'écrive les blocs modifiés dans le cache du tampon de la base de données dans les fichiers de données
Les redo logs sont utilisés de manière cyclique. Chaque groupe de fichiers de journalisation est identifié par un numéro de séquence de journal qui est écrasé chaque fois que le journal est réutilisé. LGWR écrit séquentiellement dans les fichiers de journalisation en ligne. Lorsque le groupe de journaux de rétablissement en ligne actuel est rempli, LGWR commence à écrire dans le groupe suivant. C'est ce qu'on appelle un commutateur de journalisation. Lorsque le dernier fichier de journalisation en ligne disponible est rempli, LGWR retourne au premier groupe de
journalisation en ligne et recommence à écrire.

Articles connexes

comment trouver une session générant beaucoup de redo
modifier le système basculer le fichier journal contre le journal d'archives actuel
recréer les fichiers redo log dans la base de données Oracle
questions d'entretien senior oracle dba