In questo tutorial di Oracle, spiegheremo in modo semplice la comprensione del gruppo di log di ripristino rispetto al file rispetto al membro.
Oggi impareremo il concetto di redo log buffer in Oracle. In cui impareremo cos'è il redo log buffer, come funziona e qual è il suo ruolo nell'architettura Oracle.
Se si desidera comprendere l'architettura Oracle, è davvero importante comprendere il funzionamento del buffer di redo log. L'articolo di seguito ti aiuterà anche ad affrontare le domande del colloquio.
Comprensione del gruppo di log di ripristino rispetto al file rispetto al membro
Cos'è un buffer del registro di ripristino?
Si tratta di una piccola allocazione di memoria in genere di circa 14 MB per impostazione predefinita. È un buffer ciclico. Quando è pieno ricomincia a scrivere dall'alto, sovrascrive i dati una volta che è pieno.
Qual è la voce ripeti e cambia vettore?
L'istanza del database Oracle registra tutte le transazioni DML/DDL nel buffer del registro di ripristino di SGA sotto forma di voci di ripristino. Il singolo estratto conto in una transazione risulterà in una o più voci di ripristino. Tutte queste voci di ripristino sono chiamate collettivamente vettore di modifica o vettore di ripristino.
Ogni voce redo è composta da istruzioni redo e undo, ad esempio:
TABELLA EMP
Empno | Nome | Dipartimento |
---|---|---|
1 | Giovanni | 10 |
2 | Tony | 20 |
3 | Laura | 50 |
4 | Tigre | 10 |
5 | Scott | 10 |
sql>delete empno from emp where deptno=10;
Nell'esempio sopra, la tabella emp ha 3 record per deptno=10. Quindi Oracle creerà 3 voci di ripristino per l'istruzione di cui sopra e queste voci verranno registrate nel buffer di registro di ripristino. Queste 3 voci di ripetizione sono chiamate collettivamente vettore di modifica o vettore di ripetizione.
Il vettore di modifica non è altro che un numero di righe interessate da una singola operazione. Il buffer del registro di ripristino acquisisce le transazioni dell'utente e acquisisce anche l'effetto di annullamento (istruzione di annullamento) per quella transazione.
Funzionamento del processo LGWR
Poiché la dimensione del buffer del registro di ripristino è piccola e non può crescere dinamicamente, queste voci di ripristino registrate devono essere scritte periodicamente sul disco in un file di registro di ripristino in linea. Questo è spesso chiamato svuotamento del buffer del registro di ripristino e il lavoro di scrittura di queste voci di ripristino sul disco viene eseguito dal processo LGWR.
Quando LGWR scrive le voci di ripristino su disco?
LGWR è piuttosto aggressivo nello scrivere queste voci su disco. Di seguito sono riportati gli eventi in cui LGWR scrive voci di ripristino su disco.
- Quando la dimensione del buffer è piena per 1/3
- Quando sono disponibili 1 MB di vettori di modifica nel buffer del registro di ripristino in attesa di scrittura
- Ogni 3 secondi
- Ogni volta che si verifica un checkpoint
- Quando un utente esegue il commit delle sue transazioni
Un parametro per impostare la dimensione del buffer del registro di ripristino
log_buffer=x byte
Struttura del Redo Log Buffer
L'architettura redo comprende 3 cose
- Ripeti thread (logico)
- Gruppi Redolog (logici)
- File membri Redolog (fisici)
1. Qual è il thread del log di ripristino?
- Durante la creazione di un file di controllo è dato dal parametro “MAXISTANCES”.
- Un thread di ripristino è composto da gruppi di ripristino. Il thread di ripristino deve essere abilitato per essere operativo.
- Nell'ambiente RAC, puoi associare un thread di ripristino a un'istanza particolare utilizzando il parametro init.ora "thread".
In un database non RAC, ci sarebbe principalmente un thread (thread =1)
2. Capire il gruppo Redo log e il suo stato?
-Durante la creazione di un file di controllo viene fornito come parametro “MAXLOGFILES”.
-Un gruppo di registro di ripristino è una raccolta di file membri del registro di ripristino identici.
-Ma per una migliore tolleranza agli errori è comune mantenere due file membri del registro di ripristino in ogni gruppo di registro di ripristino.
-Se uno è perso, non ha alcun impatto. I file dei membri del registro di ripristino sono identici (copie speculari)
LGWR scrive in parallelo a tutti i membri di un determinato gruppo di redo log
In un dato momento il processo LGWR scrive in un solo gruppo di log di ripristino. Il gruppo del registro di ripristino è corretto significa che i file dei membri del registro di ripristino non possono crescere dinamicamente.
Il gruppo redo log in cui sta attualmente scrivendo il processo LGWR viene visualizzato con lo stato "corrente"
Una volta che il gruppo del registro di ripristino è pieno, il processo LGWR cambierà il gruppo del registro di ripristino successivo.
Il gruppo precedente mostrerà lo stato "ATTIVO" e dopo qualche tempo lo stato sarà "INATTIVO"
CORRENTE => ATTIVA => NON ATTIVA => CORRENTE => ATTIVA => NON ATTIVA ……………………………………
ATTUALE status significa che Oracle sta attualmente scrivendo in questo buffer
ATTIVO Il checkpoint delle voci di ripristino in questo buffer è in sospeso
INATTIVO status significa che il registro di ripristino è stato sottoposto a checkpoint e può essere sovrascritto immediatamente.
Non è possibile modificare la dimensione del gruppo del registro di ripristino una volta creato, ma si elimina e si ricrea sempre il gruppo del registro di ripristino con dimensioni diverse. Non è possibile eliminare il gruppo di log di ripristino con stato "ATTUALE" o "ATTIVO".
Come cambiare un gruppo di log di ripristino?
Normalmente l'LGWR passa automaticamente da un gruppo di registro di ripristino all'altro, ma puoi passare manualmente da un gruppo di registro di ripristino a un altro usando il comando.
sql>alter system switch logfile ;
Ogni volta che LGWR preleva un nuovo gruppo di registri di ripristino e assegna un numero che aumenta in modo monotono a quel gruppo di registri di ripristino chiamato "Numero di sequenza del registro" o "Numero di sequenza". Puoi interrogare i metadati dei gruppi di log di ripristino utilizzando view:- v$log I gruppi di log di ripristino vengono scritti utilizzando la dimensione del blocco del disco fisico (settore di 512 byte)
Come aggiungere un nuovo gruppo di log di ripristino
sql>alter database add logfile group 3 ('/path/to/member1.log', '/path/to/member2.log') size 100m reuse;
Qui il significato di riutilizzo dice, riutilizza il file membro 1.log o membro2.log se esiste già nello stesso percorso.
Come eliminare il gruppo di log di ripristino
È possibile eliminare i gruppi di log di ripristino a condizione che lo stato non sia CORRENTE o ATTIVO. Inoltre dopo aver applicato questo comando il numero di gruppi di redo log disponibili dovrebbe essere 2 o più.
sql>alter database drop logfile groups 3;
3. Ripeti i file dei membri del registro (fisico)
Durante la creazione di un file di controllo è dato dal parametro “MAXLOGMEMBERS”. I file dei membri del registro di ripristino sono disponibili fisicamente a livello di sistema operativo. La dimensione del file è fissata al momento della creazione del gruppo di redo log.
Il file non può crescere dinamicamente. LGWR scrive in parallelo a tutti i membri di un determinato gruppo di redo log.
I file dei membri nel gruppo dei registri di ripristino sono identici. Puoi interrogare le informazioni sullo stato dalla vista v$logfile
Come si aggiunge un nuovo membro a un gruppo esistente?
sql>alter database add logfile member '/path/to/new/member1.log' to group 3;
Puoi eliminare un membro dal gruppo a condizione che rimanga un membro e lo stato del gruppo non sia attuale
sql>alter database drop logfile member '/path/to/member_to_be_deleted.log';
Per interrogare i dettagli di commutazione del registro di ripristino
puoi interrogare v$log-history
sql>select count(*), trunc(first_time) from v$log_history;
gruppo per sovrascrivere le voci di ripristino
Perché vedo "checkpoint non completo" in alert.log
Quando LGWR arriva a un gruppo del registro di ripristino per sovrascrivere le voci di ripristino ea quel punto, se un checkpoint di quel gruppo è in sospeso, vedrai un messaggio nel registro degli avvisi "punto di controllo non completato" Per questo motivo LGWR non può sovrascrivere immediatamente il gruppo del registro di ripristino.
Quindi Oracle attiverà il "checkpoint" che cancellerà i buffer sporchi causati dalle voci di ripristino sul disco. Solo dopo questo LGWR può sovrascrivere per rifare il buffer. Significa che LGWR deve aspettare un po' di tempo, il che non va bene. Per superare, aggiungi più gruppi di registri di ripristino e/o aumenta la dimensione dei gruppi di registri di ripristino.
Ci auguriamo che i dettagli di cui sopra ti aiutino a chiarire la tua comprensione del buffer del registro di ripristino.
Questa è la fine del tutorial, la comprensione del gruppo di log di ripristino rispetto al file rispetto al membro.