I denne Oracle-tutorial vil vi forklare en enkel måde at forstå loggruppen om igen vs. fil vs. medlem.
I dag skal vi lære begrebet redo log buffer i Oracle. Hvor vi vil få at vide, hvad der er redo log buffer, hvordan det virker, og hvad er dets rolle i Oracle-arkitekturen.
Hvis du ønskede at forstå Oracle-arkitektur, er det virkelig vigtigt at forstå, hvordan gentag-logbufferen fungerer. Nedenstående artikel hjælper dig også med at tackle interviewspørgsmål.
Forståelse af gentag loggruppe vs fil vs medlem
Hvad er en gentag-logbuffer?
Det er en lille hukommelsesallokering typisk omkring 14mb som standard. Det er en cyklisk buffer. Når den er fuld, begynder den igen at skrive fra toppen, den overskriver dataene, når den er fuld.
Hvad er genindtastningen og skift vektoren?
Oracle-databaseinstansen registrerer alle DML/DDL-transaktioner i SGA's redo-logbuffer i form af redo-indtastninger. Den enkelte erklæring i en transaktion vil resultere i en eller flere genindtastninger. Disse alle redo-indtastninger kaldes tilsammen en ændringsvektor eller redovektor.
Hver redo-indtastning består af redo-sætning og fortryd-sætning, for eksempel:
TABEL EMP
Empno | Navn | Afd.nr. |
---|---|---|
1 | Jhon | 10 |
2 | Tony | 20 |
3 | Laura | 50 |
4 | Tiger | 10 |
5 | Scott | 10 |
sql>delete empno from emp where deptno=10;
I ovenstående eksempel har emp-tabellen 3 poster for deptno=10. Så Oracle vil oprette 3 redo-indgange for ovenstående sætning, og disse poster vil blive registreret i redo-logbuffer. Disse 3 genindtastninger kaldes tilsammen en ændringsvektor eller redovektor.
Ændringsvektoren er intet andet end et antal berørte rækker af en enkelt operation. Redo-logbuffer fanger brugerens transaktioner, og den fanger også en annullationseffekt (fortryd-erklæring) for den transaktion.
Arbejdning af LGWR-processen
Da størrelsen af redo-log-bufferen er lille, som ikke kan vokse dynamisk, skal disse registrerede redo-indtastninger periodisk skrives til disken i en online-redo-logfil. Dette kaldes ofte flushing af redo log buffer, og jobbet med at skrive disse redo poster til disken udføres af LGWR processen.
Når LGWR skriver gentag-indgange til disken?
LGWR er ret aggressiv til at skrive disse poster til disk. Nedenfor er de hændelser, når LGWR skriver redo-indgange til disken.
- Når bufferstørrelsen er 1/3 fuld
- Når der er 1 MB ændringsvektorer til rådighed i gentag-logbufferen, der afventer skrivning
- Hvert 3. sekund
- Når der opstår et kontrolpunkt
- Når en bruger foretager sine transaktioner
En parameter til at indstille størrelsen på gentag-logbuffer
log_buffer=x bytes
Struktur af Redo Log Buffer
Gendan-arkitekturen består af 3 ting
- Gentag tråd (logisk)
- Redolog-grupper (logiske)
- Redolog-medlemsfiler (fysiske)
1. Hvad er gentag-logtråden?
- Mens oprettelsen af en kontrolfil gives af parameteren "MAXINSTANCES".
- En gendan-tråd består af gen-tag-grupper. Gentag-tråden skal være aktiveret for at være operationel.
- I RAC-miljøet kan du binde en redo-tråd til den bestemte instans ved at bruge init.ora-parameteren "thread".
I en ikke-RAC-database vil der for det meste være én tråd (tråd =1)
2. Forstår du Redo-loggruppen og dens status?
-Når du opretter en kontrolfil, angives den som parameteren "MAXLOGFILES".
-En redo-log-gruppe er en samling af identiske redo-log-medlemsfiler.
-Men for bedre fejltolerance er det almindeligt at beholde to redo-log-medlemsfiler i hver redo-log-gruppe.
-Hvis man går tabt, påvirker det ikke. Gentag-logmedlemsfilerne er identiske (spejlkopier)
LGWR skriver parallelt til alle medlemmer af en given redo-loggruppe
På ethvert givet tidspunkt skriver LGWR-processen kun til én gentag-loggruppe. Gentag-log-gruppen er fast, hvilket betyder, at gen-log-medlemsfilerne ikke kan vokse dynamisk.
Gentag-loggruppen, som LGWR-processen i øjeblikket skriver i, ses med status "aktuel"
Når gentag-loggruppen er fuld, skifter LGWR-processen næste gentag-loggruppe.
Den forrige gruppe vil vise status "AKTIV", og efter et stykke tid vil status være "INAKTIV"
AKTIV => AKTIV => INAKTIV => AKTIV => AKTIV => INAKTIV …………………………………
AKTUELT status betyder, at orakel i øjeblikket skriver i denne buffer
AKTIV Kontrolpunkt for gentag-indtastninger i denne buffer afventer
INAKTIV status betyder, at gentag-loggen er blevet kontrolleret og kan overskrives med det samme.
Du kan ikke ændre størrelsen på gentag-loggruppen, når den først er oprettet, men du dropper og genskabte altid gentag-loggruppen med forskellige størrelser. Du kan ikke droppe gentag-loggruppen med status "AKTIV" eller "AKTIV".
Hvordan skifter man en gentag-loggruppe?
Normalt skifter LGWR automatisk mellem gentag-log-grupperne, men du kan manuelt skifte fra én gen-log-gruppe til en anden ved at bruge kommandoen.
sql>alter system switch logfile ;
Hver gang LGWR henter en ny redo-loggruppe, og den tildeler et monotont stigende nummer til den gentag-loggruppe kaldet "Log-sekvensnummer" eller "sekvens#". Du kan forespørge på metadataene for redo-loggrupperne ved hjælp af view:- v$log Redo-loggrupperne skrives ved hjælp af fysisk diskblokstørrelse (sektor på 512 bytes)
Sådan tilføjer du en ny gentag-loggruppe
sql>alter database add logfile group 3 ('/path/to/member1.log', '/path/to/member2.log') size 100m reuse;
Heri betyder genbrug, genbrug filen medlem 1.log eller medlem2.log filen, hvis den allerede eksisterer i samme sti.
Sådan dropper du gentag-loggruppe
Du kan droppe gentag-loggrupper, forudsat at status ikke er AKTIV eller AKTIV. Også efter at have anvendt denne kommando skal antallet af tilgængelige loggrupper for gentag være 2 eller flere.
sql>alter database drop logfile groups 3;
3. Gentag Log medlemsfiler (fysisk)
Når du opretter en kontrolfil, er den givet af parameteren "MAXLOGMEMBERS". Gentag-logmedlemsfilerne er tilgængelige fysisk på OS-niveau. Størrelsen på filen er fastsat på tidspunktet for oprettelse af gentag-loggruppe.
Filen kan ikke vokse dynamisk. LGWR skriver parallelt til alle medlemmer af en given redo-loggruppe.
Medlemsfilerne i gentag-loggruppen er identiske. Du kan forespørge om statusoplysningerne fra visningen v$logfile
Hvordan tilføjer man et nyt medlem til en eksisterende gruppe?
sql>alter database add logfile member '/path/to/new/member1.log' to group 3;
Du kan droppe et medlem fra gruppen, forudsat at der er ét medlem tilbage, og gruppestatus ikke er aktuel
sql>alter database drop logfile member '/path/to/member_to_be_deleted.log';
For at forespørge på omskiftningsdetaljerne i loggen for om
du kan forespørge v$log-historie
sql>select count(*), trunc(first_time) from v$log_history;
gruppe for at overskrive gentag-indtastningerne
Hvorfor jeg ser "checkpoint not complete" i alert.log
Når LGWR ankommer til en redo-loggruppe for at overskrive gentag-indtastninger, og på det tidspunkt, hvis et kontrolpunkt fra den gruppe afventer, vil du se en meddelelse i alarmloggen "checkpoint not complete" På grund af dette kan LGWR ikke overskrive gentag-loggruppen med det samme.
Derfor vil Oracle udløse "kontrolpunktet", som vil tømme beskidte buffere forårsaget af genindtastninger til disken. Først efter dette kan LGWR overskrive for at gentage buffer. Det betyder, at LGWR skal vente et stykke tid, hvilket ikke er godt. For at overvinde skal du enten tilføje flere redo-log-grupper og/eller øge størrelsen på redo-log-grupper.
Vi håber, at vores ovenstående detaljer vil hjælpe dig med at rydde din forståelse af redolog-bufferen.
Dette er slutningen på selvstudiet, forståelse af redo-loggruppe vs fil vs medlem.