none
Noção sobre os arquivos: mdf, ldf, e bak RRS feed

  • Pergunta

  • Boa Noite !

    Suponha que em uma base tenha uma tabela tA, e em uma coluna cA executo um:
    UPDATE
     tA SET
     cA = '***'
    
    
    Ou seja, vai substituir todos os valores por *** de tal campo, é isso mesmo.

    Agora, é a dúvida...
    Qual é a diferença de:
    1- fazer o backup (.bak), e restaurar em outro ambiente ?
    2- fazer um Detach (.mdf), e Attachar em outro ambiente ?

    Quanto a OPÇÃO 1:
    Na minha cabeça, a opção 1 é possível ate um RollBack! ........ Ou pelo menos tenho o .ldf (é onde fica os logs) onde posso verificar todos os registros que foi afetado por UPDATE, certo ? E de que forma vasculharia isso para reverter ?

    Quanto a OPÇÃO 2:
    Na minha cabeça não é possível ter acesso aos valores dos registros que sofreram o UPDATE. É isso mesmo ?
    -
    Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew !
    • Editado aNetao quinta-feira, 20 de agosto de 2009 00:14
    • Movido Gustavo Maia Aguiar quinta-feira, 20 de agosto de 2009 17:07 (De:SQL Server - Desenvolvimento Geral)
    quinta-feira, 20 de agosto de 2009 00:13

Todas as Respostas

  • aNetão é o seguinte:

    Quando uma conexão executa uma atualização, o SQL Server altera as páginas em memória e registra a operação no arquivo de LOG, retornando mensagem indicando o sucesso da operação para a conexão. Posteriormente, de modo assíncrono, o arquivo de DADOS é atualizado por dois processos Lazywriter e Checkpoints.

    Até a realização dos processos Lazywriter e Checkpoints o arquivos de dados não terá todas as informações comitadas no arquivo de log.

    Quando o SQL Server atualiza uma página de dados através dos processos citados, o Header da página é atualizado com o LSN correspondente ao registro no LOG que gerou a atualização. Desta maneira o SQL consegue determinar se um registro no LOG já foi aplicado ou não na página de dados

    A porção do arquivo de LOG que contém as informações que ainda não foram sincronizadas com o arquivo de DADOS é chamada de Porção Ativa do Log.

    Portanto se o Servidor SQL for desligado de forma inexperada, os arquivos de DADOS e LOG poderão estar em diferentes estados. Quando o Servidor for reinicializado o SQL Server executa um processo chamado de "Restart Recovery" que verifca a porção ativa de cada log e grava no arquivo de dados, além de descartar as transações não comitadas.

    Desta forma se vc fizer um backup .bak de sua base e a transação já estiver sido comitada, ao restaurar seu banco de dados em outro servidor você terá as alterações realizadas pelo seu update, se vc fizer um Detach (.mdf) e (.ldf), e Attachar em outro ambiente você também terá a informação alterada no update, mas se você fizer apenas o Detach do arquivo (.mdf), e Attachar em outro ambiente e a informação alterada pelo update ainda não tiver sido levada para o arquivo de dados através do Lazywriter ou Checkpoints você NÃO terá as informações da PROÇÃO ATIVA DO LOG (onde estará seu update).

    Porém esta prática de fazer um Detach apenas do (.mdf) e restaurar em outro servidor sem levar o .ldf ou levar a base sem restaurar um backup é uma prática incomun e só é feita em ultimo caso, quando todas as outras alternativas se esgotaram.

    espero que ajude.


    DBA SQL Server MCTS - SQL Server 2005 | ITIL Foundation V2 http://www.bydocs.com
    • Sugerido como Resposta Cleyton Esteves quinta-feira, 20 de agosto de 2009 02:48
    quinta-feira, 20 de agosto de 2009 02:48
  • Boa Noite, Cleyton !

    "Porém esta prática de fazer um Detach apenas do (.mdf) e restaurar em outro servidor sem levar o .ldf ou levar a base sem restaurar um backup é uma prática incomun e só é feita em ultimo caso, quando todas as outras alternativas se esgotaram."

    Bom, suponhamos que se vc me passe um arquivo .mdf - antes vc executasse uma "mascara" no nome das pessoas, substituindo por *** como mencionei acima).

    E se eu Attachasse no meu ambiente (aqui). Não conseguiria descobrir os nomes dessas pessoas que foram substituidas por ***.

    Obrigado!
    -
    Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew !
    sexta-feira, 21 de agosto de 2009 02:28
  • Então normalmente quando se da um detach na base e leva para outro servidor não é feito apenas com o arquivo .mdf, também é levado o arquivo de log, mas no caso de apenas ser atachado o arquivo de dados .mdf caso acha uma porção ativa no log ("que é: transações comitadas no log porém ainda não enviada ao arquivo de dados"), essa porção de informação (alterações, inserções e deleçõres) será perdido, pois estão no arquivo de log que não foi atachado junto com o arquivo de dados, neste caso o SQL irá criar um novo arquivo de log automaticamente.

    Referente a seu exemplo citado acima:

    "suponhamos que se vc me passe um arquivo .mdf - antes vc executasse uma "mascara" no nome das pessoas, substituindo por *** como mencionei acima)"

    E se eu Attachasse no meu ambiente (aqui). Não conseguiria descobrir os nomes dessas pessoas que foram substituidas por ***?

    Não. Primeiro, se a transação do mascaramento tivesse sido comitada, você não conseguiria nem levando o arquivo mdf e ldf e simplesmente atachando-os, neste caso como a informação já foi substituida e confirmada a única forma de recuperar esta informação é se você tiver a mesma em um backup de log feito anteriormente a inserção, ou restaurando um backup de log feito após a alteração a partir de um ponto do tempo onde as alterações ainda não foram realizadas ou ainda se possuir um database snapshot gerado antes da informação ser alterada.

    caso ainda tenha dúvidas fique avontade em comentar.


    DBA SQL Server MCTS - SQL Server 2005 | ITIL Foundation V2 http://www.bydocs.com
    sexta-feira, 21 de agosto de 2009 03:16
  • aNetao, conseguiu esclarecer a dúvida?
    DBA SQL Server MCTS - SQL Server 2005 | ITIL Foundation V2 http://www.bydocs.com
    sábado, 22 de agosto de 2009 01:18