sql >> Databasteknik >  >> RDS >> Oracle

Vad är Ångra och gör om i Oracle-databasen

Många ställer ofta frågorna till mig

Vad är Ångra och gör om i Oracle-databasen ? Vad är det för användning?

Jag försöker rensa bort allt tvivel om det här i inlägget

Vad är Ångra i Oracle?

Ångra lagras i tabellutrymmet Ångra i databasen. Det lagrade före-värdena för ändrade datablock när vi utfärdar en infoga, uppdatera eller ta bort-sats (DML-operation) . När vi utfärdar en DML-sats lagras de ändrade blocken i buffertcache och före-värdena för de ändrade blocken i UNDO-segment. När vi utfärdar ett ROLLBACK-kommando använder det ångra-segmentet för att återställa till tidigare värde .

Det är precis som Ångra i Anteckningar eller Microsoft Word

Ångra för en borttagning är mer för än det för en infogning. Det beror på att ångra för en borttagning  i själva verket är återinfogningen av hela raden. Så den har bevarandevärden för var och en av kolumnerna i raden för att kunna "ångra" borttagningen.
Omvänt är ångra för en infogning en radering av raden av ROWID – vilket inte behöver sparas värdena som raderas.

Ångra ger oss också  läskonsistensen för en användare eftersom han bara kan se de tidigare värdena tills en transaktion genomförs. För att förklara skulle jag ge ett exempel

Användare A startar markören på bordet vid tidpunkten t. Markören kommer att köras ett tag

Användare B börjar uppdatera samma tabell vid tidpunkten t’.

Nu bör användare A få den läskonsekventa versionen av tabellen vid tidpunkten t. Men blocken uppdateras  av användare B efter en tid.

Så Oracle använder Ångra segment för att återställa före-bilden av  uppdatering för dessa block från Ångra segment för att få läskonsekventa vyer

Ångra förstörs inte omedelbart efter bekräftelsen eller återställningen eftersom de kommer att användas i Läs konsekvent mekanism.

De används också i flashback-förfrågningar för att se den gamla säkrade data med ångra återställning.

Hur länge en ångra data som lagras i databasen?
Oracle ger flexibilitet för hur länge ångradata ska lagras med hjälp av parametern undo_retention. Vi kan ställa in undo_management-parametern till automatisk för att Oracle ska hantera ångra-retention (standard), eller till och med ställa in detta värde manuellt och dess värde bör vara större än den tid det tar för den längsta pågående frågan i din databas. Under 11g och framåt justerade Oracle denna parameter automatiskt enligt storleken på ångra tabellutrymmet

Vad är transaktion ?
En transaktion är en samling av SQL Data manipulation Language (DML)-satser som behandlas som en logisk enhet.
Flytande av någon sats resulterar i att transaktionen "ångras". Om alla satser bearbetas, SQLPlus eller programmeringsapplikationen kommer att utfärda ett COMMIT för att göra databasändringar permanenta. Transaktioner commit implicit om en användare kopplar från Oracle normalt.
Onormala frånkopplingar resulterar i transaktionsåterställning. Kommandot ROLLBACK används för att avbryta (inte commit) en transaktion som är i framsteg.

Vad är redo i Oracle?

Redo står för att registrera arbetet vad som har gjorts, så att arbetet inte går förlorat .REDO-loggar används vid återställning. När vi infogar i  databasen gör den följande saker

  1. Infoga raden i bufferten
  2. generera ångra i bufferten
  3. Skriv redo-ändringarna, dvs infoga rader i redo-loggar
  4. Skriv gör om ändringarna för ångra segment i gör om loggarna

Så varje DML-operation som görs i databasen registreras i redo-loggarna i återställningssyfte

Gör om skrivs först i redo-loggbuffert i SGA. Log writer-processen (LGWR) skriver dessa ändringar från "redo log buffer" till att göra om loggfiler på disken

Gör om loggar hjälper till att återställa eventuella dataförluster på grund av mänskliga misstag, OS-fel, hårddiskfel.

Gör om loggar är avgörande  för driften av databasen eftersom den ger feltolerans.

Innan du skriver ändringarna i tabellerna  i datafilen, skriver Oracle först redo-bufferten till redo-loggfilen .

vi har möjlighet att inte logga för viss operation  för att inte generera ombuffertar.

Så fungerar Gör om loggar
Oracle-servern registrerar sekventiellt alla ändringar som görs i databasen i redo-loggbufferten. Gör om-posterna skrivs från redo-loggbufferten till en av online-redo-logggrupperna som kallas den aktuella online-redo-logggruppen av LGWR-processen. LGWR skriver under
följande situationer:
• När en transaktion genomförs
• När loggbufferten blir en tredjedel full
• När det finns mer än en megabyte av ändrade poster i redo-loggbufferten
• Innan DBWn skriver modifierade block i databasens buffertcache till datafilerna
Gör om gör loggar används på ett cykliskt sätt. Varje redo-loggfilgrupp identifieras av ett loggsekvensnummer som skrivs över varje gång loggen återanvänds. LGWR skriver till online redo-loggfilerna sekventiellt. När den aktuella redo-logggruppen online är fylld börjar LGWR skriva till nästa grupp. Detta kallas en loggväxel. När den sista tillgängliga online redo-loggfilen är ifylld, återgår LGWR till den första online redo
logggruppen och börjar skriva igen.

Relaterade artiklar

hur man hittar session som genererar massor av redo
ändra systemväxlingsloggfil v/s arkivlogg aktuell
återskapa gör om loggfiler i Oracle-databasen
intervjufrågor för senior oracle dba


  1. Indexerar MySQL kolumner för främmande nyckel automatiskt?

  2. INTERSECT i MySQL

  3. Hur man får åtkomst till PhpMyAdmin utan cPanel-inloggning

  4. Använder jag JDBC Connection Pooling?