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

Hvad er formålet med logging/nologging mulighed i Oracle

LOGGING/NOLOGGING hjælper med at administrere aktivering af direkte stiskrivning for at reducere genereringen af ​​REDO og UNDO. Det er en af ​​flere måder at kontrollere den delikate balance mellem genvindelighed og ydeevne.

Oracle Architecture-baggrundsoplysninger

GENGØR er, hvordan Oracle giver holdbarhed, "D" i ACID. Når en transaktion er begået, bliver ændringerne ikke nødvendigvis gemt pænt i datafilerne. Det holder tingene hurtigt og lader baggrundsprocesser klare noget arbejde. REDO er en beskrivelse af ændringen. Det gemmes hurtigt, på flere diske, i en "dum" log. Ændringer er hurtige, og hvis serveren mister strøm et mikrosekund efter, at commit er returneret, kan Oracle gennemgå REDO-logfilerne for at sikre, at ændringen ikke går tabt.

UNDO hjælper Oracle med at give konsistens, "C"et i ACID. Den gemmer en beskrivelse af, hvordan ændringen kan fortrydes. Disse oplysninger kan være nødvendige for en anden proces, der læser tabellen og skal vide, hvad værdien brugte at være på et ældre tidspunkt.

Direkte sti skriver spring over REDO, UNDO, cachen og nogle andre funktioner, og modificer datafiler direkte. Dette er en hurtig, men potentielt farlig mulighed i mange miljøer, hvorfor der er så mange forvirrende muligheder for at kontrollere den. Direkte stiskrivning gælder kun for INSERTS, og kun i scenarierne beskrevet nedenfor.

Hvis du ikke gør noget, er standardindstillingen den sikreste, LOGGING.

De mange måder at kontrollere direkte stiskrivning på

LOGGING/NOLOGGING er en af ​​flere muligheder for at styre direkte stiskrivning. Se denne tabel fra SpørgTom for at forstå, hvordan de forskellige muligheder alle arbejder sammen:

Table Mode    Insert Mode     ArchiveLog mode      result
-----------   -------------   -----------------    ----------
LOGGING       APPEND          ARCHIVE LOG          redo generated
NOLOGGING     APPEND          ARCHIVE LOG          no redo
LOGGING       no append       ARCHIVE LOG          redo generated
NOLOGGING     no append       ARCHIVE LOG          redo generated
LOGGING       APPEND          noarchive log mode   no redo
NOLOGGING     APPEND          noarchive log mode   no redo
LOGGING       no append       noarchive log mode   redo generated
NOLOGGING     no append       noarchive log mode   redo generated

FORCE LOGGING kan tilsidesætte alle disse indstillinger. Der er sikkert nogle andre kontakter jeg ikke er klar over. Og selvfølgelig er der de mange begrænsninger, der forhindrer direkte sti - triggere, fremmednøgler, klynge, indeksorganiserede tabeller osv.

Reglerne er endnu mere restriktive for indekser. Et indeks vil altid generere REDO under DML-sætninger. Kun DDL-sætninger, såsom CREATE INDEX ... NOLOGGING eller ALTER INDEX ... REBUILD på et NOLOGGING-indeks vil ikke generere REDO.

Hvorfor er der så mange måder? Fordi inddrivelse er utrolig vigtig, og forskellige roller kan have forskellige syn på sagen. Og nogle gange skal nogle menneskers beslutninger tilsidesætte andre.

Udviklere beslutte på erklæringsniveauet "Indsæt tilstand". Mange mærkelige ting kan ske med en /*+ APPEND */ tip, og udviklere skal vælge omhyggeligt, hvornår de vil bruge det.

Arkitekter beslutte på objektniveau "Tabeltilstand". Nogle tabeller, uanset hvor hurtigt en udvikler ønsker at indsætte i dem, skal altid kunne gendannes.

Databaseadministratorer beslutte i database- eller tablespace-tilstand, "Arkivlog" og FORCE LOGGING. Måske er organisationen bare ligeglad med at gendanne en bestemt database, så sæt den til NOARCHIVELOG-tilstand. Eller måske har organisationen en streng regel om, at alt skal kunne gendannes, så sæt tablespacet til FORCE LOGGING.



  1. Opret flere Postgres-forekomster på samme maskine

  2. Hvad er forskellen mellem præcision og skala?

  3. Sådan hentes dropdown-værdierne fra databasen og vises i jsp

  4. Metadata vedrørende PL/SQL-posttyper på pakkeniveau