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
- Indsæt rækken i bufferen
- generer fortrydelsen i bufferen
- Skriv gentag-ændringerne, dvs. indsæt rækker i fortryd-logfiler
- 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