Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Qual é o objetivo da opção logging/nologging no Oracle


LOGGING/NOLOGGING ajuda a gerenciar a habilitação de gravações de caminho direto para reduzir a geração de REDO e UNDO. É uma das várias maneiras de controlar o delicado equilíbrio entre recuperabilidade e desempenho.

Informações básicas da arquitetura Oracle

REFAZER é como a Oracle oferece durabilidade, o "D" em ACID. Quando uma transação é confirmada, as alterações não são necessariamente armazenadas ordenadamente nos arquivos de dados. Isso mantém as coisas rápidas e permite que os processos em segundo plano lidem com algum trabalho. REDO é uma descrição da mudança. Ele é armazenado rapidamente, em vários discos, em um log "burro". As alterações são rápidas e se o servidor perder energia um microssegundo após o retorno do commit, o Oracle pode passar pelos logs REDO para garantir que a alteração não seja perdida.

DESFAZER ajuda a Oracle a fornecer consistência, o "C" em ACID. Ele armazena uma descrição de como reverter a alteração. Essa informação pode ser necessária para outro processo que está lendo a tabela e precisa saber qual o valor usado estar em um momento mais antigo.

Gravações de caminho direto ignore REDO, UNDO, o cache e alguns outros recursos e modifique diretamente os arquivos de dados. Esta é uma opção rápida, mas potencialmente perigosa em muitos ambientes, e é por isso que existem tantas opções confusas para controlá-la. As gravações de caminho direto se aplicam apenas a INSERTS e somente nos cenários descritos abaixo.

Se você não fizer nada, a opção padrão é a mais segura, LOGGING.

As várias maneiras de controlar gravações de caminho direto

LOGGING/NOLOGGING é uma das várias opções para controlar gravações de caminho direto. Veja esta tabela de Pergunte ao Tom para entender como as diferentes opções funcionam juntas:
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 pode substituir todas essas configurações. Provavelmente existem alguns outros switches que eu não conheço. E, claro, existem muitas limitações que impedem o caminho direto - gatilhos, chaves estrangeiras, cluster, tabelas organizadas por índice, etc.

As regras são ainda mais restritivas para índices. Um índice sempre gerar REDO durante instruções DML. Apenas instruções DDL, como CREATE INDEX ... NOLOGGING ou ALTER INDEX ... REBUILD em um índice NOLOGGING não gerará REDO.

Por que existem tantas maneiras? Porque a capacidade de recuperação é incrivelmente importante e diferentes funções podem ter visões diferentes sobre o assunto. E às vezes as decisões de algumas pessoas precisam se sobrepor a outras.

Desenvolvedores decida no nível da instrução, "Modo de inserção". Muitas coisas estranhas podem acontecer com um /*+ APPEND */ dica e os desenvolvedores precisam escolher cuidadosamente quando usá-lo.

Arquitetos decidir no nível do objeto, "Modo Tabela". Algumas tabelas, independentemente de quão rápido um desenvolvedor queira inserir nelas, devem sempre ser recuperáveis.

Administradores de banco de dados decidir no modo de banco de dados ou tablespace, "Archive log" e FORCE LOGGING. Talvez a organização simplesmente não se importe em recuperar um banco de dados específico, então configure-o para o modo NOARCHIVELOG. Ou talvez a organização tenha uma regra estrita de que tudo deve ser recuperável, então defina o espaço de tabela para FORCE LOGGING.