Pular para o conteúdo

Fóruns Banco de dados Oracle BD em “NOARCHIVELOG” e pedindo archive p/ recuperar… BD em “NOARCHIVELOG” e pedindo archive p/ recuperar…

#105113
Ricardo Portilho Proni
Participante

    Isto é muito comum, e perfeitamente explicável.

    Suponhamos que uma grande carga de dados (um UPDATE longo, por exemplo) estava em execução.
    Este DML utilizou o primeiro log, utilizou o segundo, foi para o terceiro, e aí girou de volta para o primeiro, que foi sobrescrito, como é a operacção normal do ORacle.
    Isto é feito pelo LGWR. Enquanto isso, o o DBWR grava os dados do DB_CACHE_SIZE (cache sujo) nos DATAFILEs, em um tempo diferente do LGWR. o LGWR é mais rápido, pois é mais rápido gravar nos Redo Logs, sequenciais, e o Redo Log precisa estar íntegro, ele é a vida do Oracle. Por isso o LOG_BUFFER é pequeno comparado com o DB_CACHE_SIZE.
    Enquanto isto estava acontecendo, o servidor foi desligado. Quando o Oracle for religado, ele irá comparar o conteúdo dos Redo Logs com os DATAFILEs e CONTROLFILE: o que tiver um COMMIT será deixado nos DATAFILEs, o que não tiver será removido. E o que tinha que estar nos DATAFILEs (teve COMMIT) e não está lá, será buscado dos Redo Logs / Archives. Isto é o RECOVER, e deve ter ocorrido esta segunda situação com você.

    É por isso que Archive é importante, mesmo para homologação / desenvolvimento, se você não pode se dar ao luxo de voltar ao último backup frio.
    Se não quer mesmo utilizar Archives, utilize mais Redo Logs do que sua maior gravação concorrente, e você pode se proteger destas situações.