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

Compréhension du groupe de journaux redo vs fichier vs membre

Dans ce didacticiel Oracle, nous expliquerons une manière simple de comprendre le groupe de journalisation, le fichier et le membre.

Aujourd'hui, nous allons apprendre le concept de tampon de journalisation dans Oracle. Dans lequel nous apprendrons ce qu'est le tampon de journalisation, comment il fonctionne et quel est son rôle dans l'architecture Oracle.

Si vous vouliez comprendre l'architecture d'Oracle, il est vraiment important de comprendre le fonctionnement du tampon de journalisation. L'article ci-dessous vous aidera également à répondre aux questions d'entretien.

Compréhension du groupe de journalisation par rapport au fichier par rapport au membre

Qu'est-ce qu'un tampon de journalisation ?

Il s'agit d'une petite allocation de mémoire généralement autour de 14 Mo par défaut. C'est un tampon cyclique. Une fois qu'il est plein, il recommence à écrire à partir du haut, il écrase les données une fois qu'il est plein.

Qu'est-ce que l'entrée de rétablissement et le changement de vecteur ?

L'instance de base de données Oracle enregistre toutes les transactions DML/DDL dans le tampon de journalisation de SGA sous la forme d'entrées de journalisation. L'instruction individuelle d'une transaction entraînera une ou plusieurs entrées de rétablissement. Toutes ces entrées de rétablissement sont appelées collectivement un vecteur de modification ou un vecteur de rétablissement.

Chaque entrée redo se compose d'une instruction redo et d'une instruction undo, par exemple :

TABLEAU EMP
Empno Nom

No de département
1 Jhon 10
2 Tony 20
3 Laura 50
4 Tigre 10
5 Scott 10
sql>delete empno from emp where deptno=10;

Dans l'exemple ci-dessus, la table emp a 3 enregistrements pour deptno=10. Ainsi, Oracle créera 3 entrées redo pour l'instruction ci-dessus et ces entrées seront enregistrées dans le tampon redo log. Ces 3 entrées de rétablissement sont collectivement appelées un vecteur de modification ou un vecteur de rétablissement.

Le vecteur de changement n'est rien d'autre qu'un nombre de lignes affectées par une seule opération. Le tampon de journalisation capture les transactions de l'utilisateur et capture également l'effet d'annulation (instruction d'annulation) pour cette transaction.

Fonctionnement du processus LGWR

Étant donné que la taille du tampon de journalisation est petite et ne peut pas augmenter de manière dynamique, ces entrées de journalisation enregistrées doivent être écrites périodiquement sur le disque dans un fichier de journalisation en ligne. Ceci est souvent appelé vidage du tampon de journalisation et le travail d'écriture de ces entrées de journalisation sur le disque est effectué par le processus LGWR.

Lorsque LGWR écrit des entrées de restauration sur le disque ?

LGWR est assez agressif pour écrire ces entrées sur le disque. Vous trouverez ci-dessous les événements lorsque LGWR écrit des entrées de restauration sur le disque.

  • Lorsque la taille du tampon est pleine au 1/3
  • Lorsqu'il y a 1 Mo de vecteurs de modification disponibles dans le tampon de journalisation en attente d'écriture
  • Toutes les 3 secondes
  • Chaque fois qu'un point de contrôle se produit
  • Lorsqu'un utilisateur valide ses transactions

Un paramètre pour définir la taille du tampon de journalisation

log_buffer=x octets
Structure du tampon de journalisation

L'architecture de restauration comprend 3 éléments

  1. Rétablir le fil (logique)
  2. Groupes Redolog (logique)
  3. Fichiers des membres Redolog (physiques)

1. Qu'est-ce que le fil de journalisation ?

  • La création d'un fichier de contrôle est donnée par le paramètre "MAXINSTANCES".
  • Un thread de rétablissement est composé de groupes de rétablissement. Le thread redo doit être activé pour être opérationnel.
  • Dans l'environnement RAC, vous pouvez lier un thread de rétablissement à l'instance particulière à l'aide du paramètre "thread" de init.ora

Dans une base de données non-RAC, il y aurait principalement un thread (thread =1)

2. Comprendre le groupe de journalisation et son état ?

-Lors de la création d'un fichier de contrôle, il est donné comme paramètre "MAXLOGFILES".
-Un groupe de journaux de rétablissement est une collection de fichiers membres de journal de rétablissement identiques.
-Mais pour une meilleure tolérance aux pannes, il est courant de conserver deux fichiers membres de journalisation dans chaque groupe de journalisation.
-Si on est perdu, ça n'a pas d'impact. Les fichiers membres du journal de rétablissement sont identiques (copies miroir)
LGWR écrit en parallèle sur tous les membres d'un groupe de journaux redo donné
À tout moment, le processus LGWR écrit dans un seul groupe de fichiers de journalisation. Le groupe de journalisation est fixe, ce qui signifie que les fichiers membres de journalisation ne peuvent pas croître dynamiquement.
Le groupe de journalisation dans lequel le processus LGWR est en train d'écrire est affiché avec le statut "actuel"
Une fois que le groupe de journaux redo est plein, le processus LGWR basculera vers le groupe de journaux redo suivant.
Le groupe précédent affichera le statut « ACTIF » et après un certain temps, le statut sera « INACTIF »
ACTUELLE => ACTIVE => INACTIVE => ACTUELLE => ACTIVE => INACTIVE …………………………………
ACTUEL status signifie qu'oracle écrit actuellement dans ce tampon
ACTIF Le point de contrôle des entrées redo dans ce tampon est en attente
INACTIF status signifie que le journal de rétablissement a été contrôlé et peut être écrasé immédiatement.
Vous ne pouvez pas modifier la taille du groupe de fichiers de journalisation une fois créé, mais vous supprimez et recréez toujours le groupe de fichiers de journalisation avec des tailles différentes. Vous ne pouvez pas supprimer le groupe de fichiers de journalisation avec le statut "ACTUEL" ou "ACTIF".

Comment changer de groupe de journalisation ?

Normalement, le LGWR bascule automatiquement entre les groupes de journalisation, mais vous pouvez passer manuellement d'un groupe de journalisation à un autre à l'aide de la commande.

sql>alter system switch logfile ;

Chaque fois que LGWR sélectionne un nouveau groupe de journaux redo et il attribue un numéro d'incrémentation monotone à ce groupe de journaux redo appelé "Log sequence number" ou "sequence#". Vous pouvez interroger les métadonnées des groupes de journalisation à l'aide de view :- v$log Les groupes de journalisation sont écrits en utilisant la taille de bloc de disque physique (secteur de 512 octets)

Comment ajouter un nouveau groupe de journaux redo

sql>alter database add logfile group 3 ('/path/to/member1.log', '/path/to/member2.log') size 100m reuse;

Ici, le sens de réutilisation indique, réutiliser les fichiers membre 1.log ou membre2.log s'il existe déjà dans le même chemin.

Comment supprimer un groupe de journaux redo

Vous pouvez supprimer des groupes de journaux redo à condition que l'état ne soit pas CURRENT ou ACTIVE. De plus, après l'application de cette commande, le nombre de groupes de journaux redo disponibles doit être de 2 ou plus.

sql>alter database drop logfile groups 3;

3. Fichiers membres Redo Log (Physique)

Lors de la création d'un fichier de contrôle, il est donné par le paramètre "MAXLOGMEMBERS". Les fichiers membres de journalisation sont disponibles physiquement au niveau du système d'exploitation. La taille du fichier est fixée au moment de la création du groupe de fichiers de journalisation.

Le fichier ne peut pas croître dynamiquement. LGWR écrit en parallèle sur tous les membres d'un groupe de fichiers de journalisation donné.
Les fichiers membres du groupe de journalisation sont identiques. Vous pouvez interroger les informations d'état à partir de la vue v$logfile

Comment ajouter un nouveau membre à un groupe existant ?

sql>alter database add logfile member '/path/to/new/member1.log' to group 3;

Vous pouvez supprimer un membre du groupe à condition qu'il reste un membre et que le statut du groupe ne soit pas à jour

sql>alter database drop logfile member '/path/to/member_to_be_deleted.log';

Pour interroger les détails de commutation de journalisation
vous pouvez interroger v$log-history

sql>select count(*), trunc(first_time) from v$log_history;

groupe pour écraser les entrées de restauration

Pourquoi je vois "point de contrôle incomplet" dans alert.log

Lorsque LGWR arrive dans un groupe de journalisation pour écraser les entrées de journalisation et à ce moment-là, si un point de contrôle de ce groupe est en attente, vous verrez un message dans le journal d'alerte "point de contrôle incomplet". En raison de cela, LGWR ne peut pas écraser le groupe de journalisation immédiatement.

Par conséquent, Oracle déclenchera le "point de contrôle" qui videra les tampons sales causés par les entrées redo sur le disque. Ce n'est qu'après que LGWR peut écraser pour redo buffer. Cela signifie que LGWR doit attendre un certain temps, ce qui n'est pas bon. Pour surmonter cela, ajoutez plus de groupes de journaux de rétablissement et/ou augmentez la taille des groupes de journaux de rétablissement.

Nous espérons que nos informations ci-dessus vous aideront à clarifier votre compréhension du tampon de journalisation.

C'est la fin du tutoriel, compréhension du groupe de journalisation vs fichier vs membre.