sql >> Database >  >> RDS >> Oracle

Wat is Ongedaan maken en opnieuw doen in de Oracle-database?

Veel mensen stellen me vaak de vragen

Wat is Ongedaan maken en opnieuw doen in de Oracle-database ? Waarvoor wordt het gebruikt?

Ik probeer alle twijfel hierover hier in de post weg te nemen

Wat is ongedaan maken in Oracle?

Ongedaan maken wordt opgeslagen in de tabelruimte Ongedaan maken in de database. Het heeft de vorige waarden van gewijzigde gegevensblokken opgeslagen wanneer we een insert-, update- of delete-instructie uitgeven (DML-bewerking). Wanneer we een DML-instructie uitgeven, worden de gewijzigde blokken opgeslagen in de buffercache en de voor-waarden voor die gewijzigde blokken in UNDO-segmenten. Telkens wanneer we een ROLLBACK-commando geven, gebruikt het het segment Ongedaan maken om terug te gaan naar de vorige waarde.

Het is hetzelfde als Ongedaan maken in Kladblok of Microsoft Word

Het ongedaan maken voor een verwijdering is meer voor dan voor een invoeging. Dat komt omdat het ongedaan maken voor een verwijdering in feite het opnieuw invoegen van de hele rij is. Het heeft dus bewaarwaarden voor elk van de kolommen van de rij om het verwijderen ongedaan te kunnen maken.
Omgekeerd is het ongedaan maken voor een invoeging een verwijdering van de rij door ROWID - die niet hoeft te behouden de waarden worden verwijderd.

Ongedaan maken biedt ons ook  de leesconsistentie voor een gebruiker, aangezien hij alleen de vorige waarden kan zien totdat een transactie is doorgevoerd. Om het uit te leggen, zou ik één voorbeeld geven

Gebruiker A start de selectiecursor op de tafel op tijd t. De cursor zal enige tijd lopen

Gebruiker B begint dezelfde tabel op tijd t' bij te werken.

Nu zou gebruiker A de consistente leesversie van de tabel moeten krijgen op tijdstip t. Maar de blokken worden na enige tijd geüpdatet door gebruiker B.

Oracle gebruikt dus Undo-segmenten om de eerdere afbeelding van  update voor die blokkering van Undo-segmenten te herstellen om de leesconsistente weergaven te krijgen

Ongedaan maken worden niet onmiddellijk na het vastleggen of terugdraaien vernietigd, omdat ze worden gebruikt in het consistente leesmechanisme.

Ze worden ook gebruikt in flashback-query's om de oude vastgelegde gegevens te bekijken met behulp van herstel ongedaan maken.

Hoe lang worden gegevens in de database ongedaan gemaakt?
Oracle biedt flexibiliteit over hoe lang gegevens ongedaan moeten worden gemaakt met behulp van de parameter undo_retention. We kunnen de parameter undo_management instellen op automatisch voor oracle om retentie ongedaan te maken (standaard), of deze waarde zelfs handmatig instellen en de waarde ervan moet groter zijn dan de tijd die nodig is voor de langstlopende query in uw database. In 11g verder heeft Oracle deze parameter automatisch afgestemd volgens de grootte van de tabelruimte voor ongedaan maken

Wat is transactie ?
Een transactie is een verzameling van SQL-instructies voor de gegevensmanipulatietaal (DML) die als een logische eenheid worden behandeld.
Als een instructie mislukt, wordt de transactie "ongedaan gemaakt". Als alle instructies worden verwerkt, kan SQLPlus of de programmeertoepassing zal een COMMIT geven om databasewijzigingen permanent te maken. Transacties worden impliciet vastgelegd als een gebruiker normaal de verbinding met Oracle verbreekt.
Abnormale verbroken verbindingen resulteren in het terugdraaien van transacties. vooruitgang.

Wat is opnieuw doen in Oracle?

Redo staat voor het vastleggen van de werken wat is gedaan, zodat werk niet verloren gaat. REDO-logboeken worden gebruikt bij herstel. Telkens wanneer we de database invoegen, doet het de volgende dingen

  1. Voeg de rij in de buffer in
  2. genereer het ongedaan maken in de buffer
  3. Schrijf de wijzigingen voor opnieuw uitvoeren, d.w.z. voeg rijen in in logbestanden voor opnieuw uitvoeren
  4. Schrijf de wijzigingen voor opnieuw uitvoeren voor segmenten voor ongedaan maken in de logbestanden voor opnieuw uitvoeren

Dus elke DML-bewerking die in de database wordt uitgevoerd, wordt voor hersteldoeleinden vastgelegd in de herhalingslogboeken

Redo wordt eerst geschreven in redo log buffer in SGA. Het log writer (LGWR) proces schrijft deze wijzigingen van ‘redo log buffer’ om logbestanden opnieuw uit te voeren op schijf

Logboek opnieuw uitvoeren helpt bij het herstellen van gegevensverlies als gevolg van menselijke fouten, OS-fouten, defecten aan de harde schijf.

Logboeken voor opnieuw uitvoeren zijn van cruciaal belang voor de werking van de database, omdat deze fouttolerantie bieden.

Voordat u de wijzigingen naar de tabellen in het gegevensbestand schrijft, schrijft Oracle eerst de buffer voor opnieuw uitvoeren naar het logbestand voor opnieuw uitvoeren.

we hebben de optie om geen logboekregistratie beschikbaar te maken voor bepaalde bewerkingen  om geen buffers voor opnieuw uitvoeren te genereren.

Hoe Redo-logboeken werken
De Oracle-server registreert opeenvolgend alle wijzigingen die in de database zijn aangebracht in de logboekbuffer voor opnieuw uitvoeren. De herhalingsvermeldingen worden vanuit de logboekbuffer voor opnieuw uitvoeren naar een van de online logboekgroepen voor opnieuw uitvoeren geschreven die door het LGWR-proces de huidige online logboekgroep voor opnieuw uitvoeren worden genoemd. LGWR schrijft onder
de volgende situaties:
• Wanneer een transactie wordt vastgelegd
• Wanneer de buffer voor opnieuw uitvoeren voor een derde vol is
• Wanneer er meer dan een megabyte aan gewijzigde records is in de redo-logbuffer
• Voordat de DBWn gewijzigde blokken in de databasebuffercache naar de gegevensbestanden schrijft
Redo-logs worden op een cyclische manier gebruikt. Elke logboekbestandsgroep opnieuw uitvoeren wordt geïdentificeerd door een logboekvolgnummer dat wordt overschreven telkens wanneer het logboek opnieuw wordt gebruikt. LGWR schrijft achtereenvolgens naar de online logbestanden voor opnieuw uitvoeren. Wanneer de huidige online logboekgroep voor opnieuw uitvoeren is gevuld, begint LGWR met schrijven naar de volgende groep. Dit wordt een log-switch genoemd. Wanneer het laatst beschikbare online redo-logbestand is gevuld, keert LGWR terug naar de eerste online redo
log-groep en begint opnieuw te schrijven.

Verwante artikelen

hoe een sessie te vinden die veel opnieuw doet
het logbestand van de systeemwissel wijzigen v/s archieflog huidig
logbestanden opnieuw maken in de Oracle-database
senior oracle dba-interviewvragen


  1. Hoe verander ik het datumformaat van MM/DD/YYYY naar YYYY-MM-DD in PL/SQL?

  2. SQL Server-query - groepsgewijze vermenigvuldiging

  3. Hoe werk ik met zeer nauwkeurige decimalen in PHP

  4. Hoe een specifieke waarde zoeken in alle tabellen (PostgreSQL)?