LOGGING/NOLOGGING pomáhá spravovat povolení přímého zápisu cesty, aby se omezilo generování REDO a UNDO. Je to jeden z několika způsobů, jak kontrolovat křehkou rovnováhu mezi obnovitelností a výkonem.
Základní informace o architektuře Oracle
ZNOVU je to, jak Oracle poskytuje odolnost, "D" v ACID. Když je transakce potvrzena, změny nemusí být nutně uloženy úhledně v datových souborech. To udržuje věci rychlé a umožňuje procesům na pozadí zvládnout nějakou práci. REDO je popis změny. Ukládá se rychle, na více discích, v „němém“ protokolu. Změny jsou rychlé a pokud server ztratí napájení jednu mikrosekundu po návratu potvrzení, může Oracle projít protokoly REDO, aby se ujistil, že se změna neztratí.
ZPĚT pomáhá Oracle zajistit konzistenci, "C" v ACID. Ukládá popis, jak změnu vrátit zpět. Tyto informace může potřebovat jiný proces, který čte tabulku a potřebuje vědět, jakou hodnotu použila být ve starším časovém okamžiku.
Přímý zápis cesty přeskočte REDO, UNDO, mezipaměť a některé další funkce a přímo upravte datové soubory. Toto je rychlá, ale potenciálně nebezpečná možnost v mnoha prostředích, a proto existuje tolik matoucích možností, jak ji ovládat. Přímé zápisy cesty se vztahují pouze na INSERTS a pouze ve scénářích popsaných níže.
Pokud nic neuděláte, výchozí možnost je nejbezpečnější, LOGGING.
Mnoho způsobů, jak řídit zápisy přímé cesty
LOGGING/NOLOGGING je jednou z několika možností řízení přímého zápisu cesty. Podívejte se na tuto tabulku z AskTom abyste pochopili, jak různé možnosti spolupracují:
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 může potlačit všechna tato nastavení. Pravděpodobně existují nějaké další přepínače, o kterých nevím. A samozřejmě existuje mnoho omezení, která brání přímé cestě – spouštěče, cizí klíče, cluster, indexované organizované tabulky atd.
Pro indexy jsou pravidla ještě přísnější. Index bude vždy generovat REDO během příkazů DML. Pouze příkazy DDL, jako je CREATE INDEX ... NOLOGGING
nebo ALTER INDEX ... REBUILD
na indexu NOLOGGING nevygeneruje REDO.
Proč existuje tolik způsobů? Protože obnovitelnost je neuvěřitelně důležitá a různé role mohou mít na věc různé názory. A někdy musí rozhodnutí některých lidí převážit nad ostatními.
Vývojáři rozhodnout na úrovni příkazu, "Režim vkládání". S /*+ APPEND */
se může stát mnoho podivných věcí nápověda a vývojáři si musí pečlivě vybrat, kdy ji použijí.
Architekti rozhodnout na úrovni objektu, "Table Mode". Některé tabulky, bez ohledu na to, jak rychle do nich vývojář může chtít vkládat, musí být vždy obnovitelné.
Správci databáze rozhodnout v režimu databáze nebo tabulkového prostoru, "Archive log" a FORCE LOGGING. Možná se organizace jen nestará o obnovu konkrétní databáze, takže ji nastavte na režim NOARCHIVELOG. Nebo možná má organizace přísné pravidlo, že vše musí být obnovitelné, takže nastavte tabulkový prostor na FORCE LOGGING.