Oracle
 sql >> Database >  >> RDS >> Oracle

Che cos'è Annulla e ripeti nel database Oracle

Molte persone mi fanno spesso le domande

Cos'è Annulla e ripeti nel database Oracle ? A cosa serve?

Sto cercando di chiarire tutti i dubbi al riguardo qui nel post

Cos'è Annulla in Oracle?

Annulla viene archiviato nello spazio tabella Annulla nel database. Memorizza i valori precedenti dei blocchi di dati modificati ogni volta che emettiamo un'istruzione di inserimento, aggiornamento o eliminazione (operazione DML) . Quando emettiamo una qualsiasi istruzione DML, i blocchi modificati vengono archiviati nella cache del buffer e i valori precedenti per quei blocchi modificati nei segmenti UNDO. Ogni volta che emettiamo un comando ROLLBACK, utilizza il segmento di annullamento per tornare al valore precedente.

È proprio come Annulla in Blocco note o Microsoft Word

L'annullamento per un'eliminazione è maggiore di quello per un inserimento. Questo perché l'annullamento per un'eliminazione è in realtà il reinserimento dell'intera riga. Quindi, ha valori di conservazione per ciascuna delle colonne della riga per poter "Annullare" l'eliminazione.
Al contrario, l'annullamento per un inserimento è un'eliminazione della riga da ROWID, che non deve conservare i valori vengono eliminati.

Annulla ci fornisce anche  la coerenza di lettura a un utente poiché può vedere i valori precedenti solo fino al commit di una transazione. Per spiegare, vorrei fare un esempio

L'utente A avvia il cursore di selezione sulla tabella all'ora t. Il cursore funzionerà per un po' di tempo

L'utente B inizia ad aggiornare la stessa tabella all'ora t'.

Ora  l'utente A dovrebbe ottenere la versione di lettura coerente della tabella all'ora t. Ma i blocchi vengono aggiornati  dall'utente B dopo un po' di tempo.

Quindi Oracle utilizza i segmenti Annulla per ripristinare l'immagine precedente dell' aggiornamento per quei blocchi dai segmenti Annulla per ottenere viste coerenti in lettura

Gli annullamenti non vengono eliminati immediatamente dopo il commit o il rollback poiché verranno utilizzati nel meccanismo di lettura coerente.

Vengono anche utilizzati nelle query di flashback per visualizzare i vecchi dati salvati utilizzando undo restore.

Per quanto tempo i dati di annullamento sono archiviati nel database?
Oracle offre flessibilità su quanto tempo devono essere archiviati i dati di annullamento con l'aiuto del parametro undo_retention. Possiamo impostare il parametro undo_management su automatico per Oracle per gestire la conservazione degli annullamenti (impostazione predefinita), o anche impostare questo valore manualmente e il suo valore dovrebbe essere maggiore del tempo impiegato dalla query più lunga nel database. In 11g in poi Oracle ha ottimizzato automaticamente questo parametro in base alle dimensioni del tablespace di annullamento

Che cos'è la transazione ?
Una transazione è una raccolta di istruzioni SQL Data Manipulation Language (DML) trattate come un'unità logica.
L'errore di qualsiasi istruzione comporta l'annullamento della transazione. Se tutte le istruzioni vengono elaborate, SQLPlus o il l'applicazione di programmazione emetterà un COMMIT per rendere permanenti le modifiche al database. Le transazioni si impegnano in modo implicito se un utente si disconnette da Oracle normalmente.
Disconnessioni anomale provocano il rollback della transazione. Il comando ROLLBACK viene utilizzato per annullare (non eseguire il commit) una transazione in progresso.

Che cos'è il ripristino in Oracle?

Redo sta per registrare i lavori che è stato fatto, in modo che il lavoro non vada perso. I registri REDO vengono utilizzati nel ripristino. Ogni volta che inseriamo nel database, fa le seguenti cose

  1. Inserisci la riga nel buffer
  2. genera l'annullamento nel buffer
  3. Scrivi le modifiche di ripristino, ovvero inserisci le righe nei registri di ripristino
  4. Scrivi le modifiche di ripristino per i segmenti di annullamento nei registri di ripristino

Quindi ogni operazione DML eseguita nel database viene registrata nei registri di ripristino a scopo di ripristino

Le operazioni di ripristino vengono prima scritte nel buffer del registro di ripristino in SGA. Il processo di scrittura del registro (LGWR) scrive queste modifiche dal "buffer del registro di ripristino" per ripristinare i file di registro nel disco

I registri di ripristino aiutano a ripristinare qualsiasi perdita di dati dovuta a errori umani, guasti del sistema operativo, guasti del disco rigido.

I log di ripristino sono fondamentali per il funzionamento del database in quanto forniscono tolleranza agli errori.

Prima di scrivere le modifiche alle tabelle  nel file di dati, Oracle scrive prima il buffer di ripristino nel file dei registri di ripristino.

abbiamo la possibilità di non effettuare la registrazione per determinate operazioni  per non generare buffer di ripristino.

Come funzionano i log di ripristino
Il server Oracle registra in sequenza tutte le modifiche apportate al database nel buffer del registro di ripristino. Le voci di ripristino vengono scritte dal buffer del registro di ripristino in uno dei gruppi di registro di ripristino online chiamato gruppo di registro di ripristino in linea corrente dal processo LGWR. LGWR scrive nelle
le seguenti situazioni:
• Quando una transazione viene eseguita
• Quando il buffer del registro di ripristino diventa pieno per un terzo
• Quando è presente più di un megabyte di record modificati nel buffer di redo log
• Prima che DBWn scriva i blocchi modificati nella cache del buffer del database nei file di dati
I redo log vengono utilizzati in modo ciclico. Ogni gruppo di file di log di ripristino è identificato da un numero di sequenza del log che viene sovrascritto ogni volta che il log viene riutilizzato. LGWR scrive sequenzialmente nei file di registro di ripristino online. Quando l'attuale gruppo di log di ripristino online viene riempito, LGWR inizia a scrivere al gruppo successivo. Questo è chiamato interruttore di registro. Quando l'ultimo file di registro di ripristino online disponibile viene riempito, LGWR torna al primo gruppo di registro di ripristino in linea
e ricomincia a scrivere.

Articoli correlati

come trovare la sessione che genera molte operazioni di ripetizione
alterare il file di registro degli switch di sistema rispetto al registro di archivio corrente
ricreare i file di registro delle operazioni di ripristino nel database Oracle
domande di intervista senior oracle dba