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

Hvad er Fortryd og fortryd i Oracle-databasen

Mange mennesker stiller mig ofte spørgsmålene

Hvad er Fortryd og fortryd i Oracle-databasen ? Hvad bruger den?

Jeg forsøger at fjerne al tvivl om det her i indlægget

Hvad er Fortryd i Oracle?

Fortryd er gemt i Fortryd tablespace i databasen. Det lagrede før-værdierne for ændrede datablokke, hver gang vi udsteder en insert-, update- eller delete-sætning (DML-operation) . Når vi udsteder en DML-sætning, gemmes de ændrede blokke i buffercache og før-værdierne for de ændrede blokke i UNDO-segmenter. Hver gang vi udsteder en ROLLBACK-kommando, bruger den fortryd-segmentet til at rulle tilbage til forrige værdi.

Det er ligesom det samme som Fortryd i Notesblok eller Microsoft Word

Fortryd for en sletning er mere for end for en indsættelse. Det er fordi fortrydelsen for en sletning faktisk er genindsættelse af hele rækken. Så den har bevarelsesværdier for hver af kolonnerne i rækken for at kunne "Fortryd" sletningen.
Omvendt er fortrydelsen for en indsættelse en sletning af rækken af ​​ROWID - hvilket ikke behøver at bevare værdierne slettes.

Fortryd giver os også læsekonsistensen til en bruger, da han kun kan se de tidligere værdier, indtil en transaktion er begået. For at forklare vil jeg give et eksempel

Bruger A starter markøren på bordet på tidspunktet t. Markøren vil køre i nogen tid

Bruger B begynder at opdatere den samme tabel på tidspunktet t’.

Nu bør bruger A få den læsekonsistente version af tabellen på tidspunktet t. Men blokkene bliver opdateret  af bruger B efter nogen tid.

Så Oracle bruger Fortryd-segmenter til at gendanne før-billedet af  opdatering for disse blok fra Fortryd-segmenter for at få læst konsistente visninger

Fortryd bliver ikke ødelagt umiddelbart efter commit eller rollback, da de vil blive brugt i Læs konsistent mekanisme.

De bruges også i flashback-forespørgsler for at se de gamle forpligtede data ved hjælp af fortryd gendannelse.

Hvor længe en fortryd data gemt i databasen?
Oracle giver fleksibilitet med hensyn til, hvor længe fortryd-data skal lagres ved hjælp af undo_retention-parameteren. Vi kan indstille undo_management-parameteren til automatisk for Oracle til at administrere fortryd-retention (standard), eller endda indstille denne værdi manuelt, og dens værdi bør være større end den tid, det tager den længst kørende forespørgsel i din database. I 11g og frem indstillede Oracle denne parameter automatisk i henhold til størrelsen på fortryd tablespacet

Hvad er transaktion ?
En transaktion er en samling af SQL-datamanipulationssprog (DML)-sætninger, der behandles som en logisk enhed.
Svigt i en sætning resulterer i, at transaktionen "fortryddes".Hvis alle sætninger behandles, vil SQLPlus eller programmeringsapplikation vil udstede en COMMIT for at gøre databaseændringer permanente. Transaktioner implicit commit, hvis en bruger afbryder forbindelsen til Oracle normalt.
Unormale afbrydelser resulterer i transaktionsrulning. Kommandoen ROLLBACK bruges til at annullere (ikke commit) en transaktion, der er i fremskridt.

Hvad er redo i Oracle?

Redo står for registrering af værkerne, hvad der er blevet udført, så arbejdet ikke går tabt. Når vi indsætter i  databasen, udfører den følgende ting

  1. Indsæt rækken i bufferen
  2. generer fortrydelsen i bufferen
  3. Skriv gentag-ændringerne, dvs. indsæt rækker i fortryd-logfiler
  4. Skriv fortryd-ændringerne for fortryd-segmenter i fortryd-logfilerne

Så hver DML-operation, der udføres i databasen, registreres i redo-logfilerne til gendannelsesformål

Redo skrives først i redo log buffer i SGA. Log writer (LGWR) processen skriver disse ændringer fra "redo log buffer" til redo log filer på disken

Redo logs hjælper med at gendanne ethvert datatab på grund af menneskelige fejl, OS-fejl, harddiskfejl.

Redo-logfiler er afgørende  for driften af ​​databasen, da den giver fejltolerance.

Før du skriver ændringerne til tabellerne  i datafilen, skriver Oracle først redo-bufferen til redo-logfilen .

vi har mulighed for ingen logning tilgængelig for visse operationer  for ikke at generere gen-buffere.

Sådan fungerer Redo-logfiler
Oracle-serveren registrerer sekventielt alle ændringer, der er foretaget i databasen, i gentag-logbufferen. Gentag-indtastningerne skrives fra redo-log-bufferen til en af ​​online-redo-log-grupperne kaldet den aktuelle online-redo-loggruppe af LGWR-processen. LGWR skriver under
følgende situationer:
• Når en transaktion commiter
• Når gentag-logbufferen bliver en tredjedel fuld
• Når der er mere end en megabyte af ændrede poster i Redo-logbufferen
• Før DBWn skriver modificerede blokke i databasebufferens cache til datafilerne
Gendan-logs bruges på en cyklisk måde. Hver gentag-logfilgruppe identificeres af et log-sekvensnummer, der overskrives, hver gang loggen genbruges. LGWR skriver til online-redo-logfilerne sekventielt. Når den aktuelle online-redo-loggruppe er udfyldt, begynder LGWR at skrive til den næste gruppe. Dette kaldes en log-switch. Når den sidste tilgængelige online-redo-logfil er udfyldt, vender LGWR tilbage til den første online-redo
log-gruppe og begynder at skrive igen.

Relaterede artikler

hvordan man finder session, der genererer masser af redo
ændre systemskift logfil v/s arkiv log aktuel
genopret redo logfiler i Oracle database
senior oracle dba interview spørgsmål


  1. SQL MELLEM Operatør for begyndere

  2. Ændring af SYS-adgangskode i RAC

  3. Udfør produktanalyse ved hjælp af SQL Server Full-Text Search. Del 1

  4. Hvordan importerer man eksisterende *.sql-filer i PostgreSQL 8.4?