Estou tentando criar uma estratégia para acompanhar o processo de atualização diária do banco de dados usando o modo de restauração "em espera".
Estou recebendo 24 arquivos de envio de log (para os arquivos de log de transações de cada hora do dia anterior) de um site FTP de terceiros. Eu atualizaria esses 24 arquivos em uma corrida noturna. Recebo esses arquivos originalmente em formatos de arquivo SQB e, em seguida, tenho uma ferramenta e um script para converter esses arquivos SQB em formato de arquivo BAK.
Agora, estou tentando chegar a uma estratégia de plano de backup contínuo.
O banco de dados não precisa ser atualizado ou modificado, mas apenas lido. Eu restauro cada arquivo de log transacional como "standby" o tempo todo e apenas os deixo no modo "standby"?
Estou planejando criar um banco de dados separado para recuperar apenas os dados necessários de algumas tabelas desse banco de dados "somente leitura".
Eu tenho mais uma pergunta. Se eu acidentalmente executar um script para restaurar este banco de dados como modo "NoRecovery or Recovery", existe uma maneira de alterar o modo de volta para "Standby" executando um script ou tenho que restaurar o arquivo bak completo novamente como "Standby" (faça todo o processo novamente)?
Qualquer um funcionará, mas é mais rápido aplicar todos os logs, exceto o último, usando
NORECOVERY
. A última aplicada utilizaSTANDBY
, disponibilizando o banco de dados para acesso somente leitura. O SQL Server precisa fazer um trabalho extra para disponibilizar o banco de dados para leitura em um estado transacionalmente consistente. Em seguida, ele precisa desfazer esse trabalho (usando o arquivo em espera) quando você solicita que ele aplique o próximo backup de log. Resumindo, especificarSTANDBY
desnecessariamente pode realmente atrasar as coisas porque você acaba fazendo e desfazendo parte do processo de recuperação (veja o link de Paul Randal abaixo).No seu caso, isso significaria aplicar 23 backups de log de transações com
NORECOVERY
, depois o 24º comSTANDBY
. No dia seguinte, você faz a mesma coisa.Observe que você precisará garantir que nada esteja conectado ao banco de dados no modo de espera quando for iniciar a próxima sequência de restauração. Isso não deve ser um problema no seu caso, já que você controla todo o acesso ao banco de dados. Se você precisar desconectar outros usuários à força:
Não se esqueça de disponibilizar o banco de dados para outros usuários novamente mais tarde com:
Você pode mudar de
NORECOVERY
paraSTANDBY
e vice-versa, por exemplo:Você não precisa alterar de
STANDBY
paraNORECOVERY
para aplicar o próximo conjunto de backups de log.Uma vez que o banco de dados é recuperado (
WITH RECOVERY
), você não pode voltar e deve iniciar toda a sequência de restauração novamente. Você nunca faria isso no seu cenário.O arquivo em espera será automaticamente excluído (ou reutilizado) na próxima etapa de restauração, mas o SQL Server não bloqueará o arquivo enquanto ele não estiver sendo usado ativamente por um comando de restauração. Trate o arquivo com o mesmo cuidado que você faria com qualquer outro arquivo de banco de dados - se for perdido, o banco de dados também o será.
Recomendo a leitura: