Fazendo backup do SQL DB com mais frequência

10

Atualmente, tenho uma tarefa agendada que é disparada todas as noites às 2 da manhã, que chama SQLCMD.exe e transmite um script .sql para executar o backup (mostrado abaixo). Somos uma empresa muito pequena, com necessidades crescentes devido ao grande crescimento do lado comercial. Perder 1 dia de dados neste momento custaria dezenas de milhares de dólares contra algumas centenas desta vez no ano passado. Até que eu possa migrar essa plataforma de banco de dados para uma solução diferente em que o espelhamento de dados ocorre com redundância importante como o SQL Azure, qual é a melhor coisa que posso fazer para obter backups mais frequentes? Este script abaixo força o banco de dados a ficar offline? Posso executar esse script com usuários interagindo com o banco de dados?

USE CompanyCRM;
GO
BACKUP DATABASE CompanyCRM
TO DISK = 'D:\CRMBackups\CompanyCRMCRM.Bak'
   WITH FORMAT,
      MEDIANAME = 'CompanyCRM_Backup',
      NAME = 'Full Backup of CompanyCRM';
GO

Atualizar

Uau, obviamente, uma comunidade DBA muito mais dedicada aqui do que no SO. Obrigado pelo feedback até agora. A única coisa que falta são os "comos". Eu mostrei o comando SQL acima que estou usando para fazer backups diários, mas os exemplos de backup incremental de log são MIA. Este não é um banco de dados grande, atualmente é executado no SQLExpress. Quando digo HA ou SQL Azure, refiro-me especificamente à arquitetura em vigor que não possuímos como pequena empresa. Esta instância está atualmente em execução no nosso servidor ONLY. Se esse servidor travar, nosso tempo de recuperação se tornará um ponto difícil. É por isso que o SQL Azure se torna atraente.

RSolberg
fonte
Editado minha resposta à sua actualização, espero que ajude

Respostas:

5

EDIT, a partir da sua atualização

Como você disse que pode perder 1 dia de dados, eu colocaria os bancos de dados no modo de recuperação SIMPLES. Você pode então fazer uma CHEIA todas as manhãs e / ou noites. Se você quisesse se cobrir durante o dia, poderia fazer um backup diferencial do banco de dados, um deles apenas em situações de caso. Isso capturará todas as alterações feitas desde o backup completo. Se conheço um período de tempo em que muita entrada está acontecendo, posso lançar esse tipo de backup após a conclusão. Isso pode economizar tempo na recuperação das pessoas, para que elas não precisem fazer entrada de dados extra.

Como esse é o seu único servidor, verifique se você está executando o DBCC CHECKDB nos bancos de dados. Os backups não fazem nenhum bem quando você descobre que eles estão corrompidos (acho que alguém mencionou isso também). Você pode provavelmente encontrar alguns scripts disponíveis para configurar uma tarefa agendada para verificar o erro de SQL ERRORLOG da mensagem DBCC para detectar erros. O SQL Server não avisará nativamente sobre os erros retornados das mensagens DBCC, portanto, a menos que você verifique manualmente cada vez que um script que o faz pode ajudar.

O comando de backup diferencial:


USE CompanyCRM; 
GO 
BACKUP DATABASE CompanyCRM 
   TO DISK = 'D:\CRMBackups\CompanyCRMCRM_diff.Bak'    
WITH FORMAT, DIFFERENTIAL,
MEDIANAME = 'CompanyCRM_Backup',       
NAME = 'Full Backup of CompanyCRM'; 
GO 

fonte
11
@ Shawn: OP disse que "perder 1 dia de dados neste momento custaria dezenas de milhares de dólares contra algumas centenas neste ano no ano passado", onde ele disse que pode perder 1 dia em dados ?!
Marian
8
  • Os backups no SQL Server não interrompem. Ou seja, o banco de dados permanece operacional. Leia a documentação.
  • Faça um backup completo todos os dias, seguido pelos backups de LOG enviados (copiados) (novamente, a documentação possui ... documentação) com mais regularidade - como a cada 15 minutos.
TomTom
fonte
4
Eu acho que o backup é algo para o qual você não precisa de instruções, mas uma leitura completa da documentação - é crítica para os negócios E é - seriamente - importante. Não cozinha ovos estilo. Contrate um profissional.
TomTom
2
Pena que eu não posso votar respostas para baixo neste site ...
RSolberg
11
@RSolberg: a resposta da TomTom é válida, juntamente com os outros conselhos que você já recebeu. Sugiro que você não espere que nenhum dos respondentes mostre realmente a sintaxe básica do backup. Embora eu veja que Shawn teve a gentileza de fazer isso. Projetar uma estratégia de BACKUP não é suficiente. Você precisa emparelhá-lo com uma estratégia RESTORE para que tudo seja válido quando você precisar.
Marian
2
@RSolberg: desculpe por te irritar. Isto não se destina. Mas como essa comunidade não ajudou? Você tem respostas boas e válidas (e comentários). Sua própria mensagem era: "Perder 1 dia de dados neste momento custaria dezenas de milhares de dólares contra algumas centenas desta vez no ano passado". Então, você precisa de uma sólida estratégia de backup e restauração para não chegar lá. Uma estratégia sólida vem de conhecer muito bem o básico. Que vêm da leitura e compreensão do manual. Desculpe se você entendeu mais alguma coisa!
Marian
2
Concordo com o @RSolberg que a maioria das respostas aqui não mostra "como" fazê-lo, mas também porque a pergunta estava faltando em alguns detalhes "o que" você não entendeu Russell. Você precisa nos contar um pouco mais sobre o que precisa, mas concordo que o site aqui não deveria ser sobre "RTFM n00b". Além disso, como você apontou, você tem 10k no Stack Overflow , então certamente entende como sinalizar comentários rudes ou perturbadores. No futuro, você deve fazer isso mais cedo, em vez de transbordar de frustração.
jcolebrand
6

A primeira coisa que você precisa fazer é descobrir quantos dados você pode perder. Até lá, você não terá idéia de quantas vezes fazer backup do banco de dados. Este não é um número que você deveria apresentar. Isso é algo que a empresa (ou o CEO de uma empresa menor) precisaria decidir. O primeiro número com o qual eles retornarão é 0 minutos. O que pode ser feito, mas será muito caro. Na realidade, a menor quantidade de dados para a qual você pode fazer backups é aproximadamente a cada 2 minutos. Se a quantidade de dados alterados no sistema for pequena o suficiente, você poderá fazer backups a cada minuto.

Para fazer backups do log de transações, é necessário fazer com que o banco de dados seja colocado no modo de recuperação COMPLETO.

Se você pode perder 5 minutos em dados, provavelmente desejará fazer backups completos diariamente e backups de log de transações a cada 5 minutos. Se você pode perder 15 minutos em dados, convém fazer backups completos e backups de log de transações a cada 15 minutos.

Outra opção seria fazer backups completos semanais, backups diferenciais diários e backups de log de transações a cada x minutos, como falo acima.

Lembre-se de que quanto mais vezes você precisar fazer backup, mais arquivos precisará restaurar no caso de uma falha no banco de dados ou exclusão de dados. Pode fazer sentido fazer backups diferenciais ao longo do dia para diminuir o tempo necessário para restaurar o banco de dados.

Todos os backups que usam o banco de dados BACKUP e a instrução BACKUP LOG são feitos online e não impedem que os usuários acessem o banco de dados.

Mrdenny
fonte
Na verdade, sou capaz de avaliar a quantidade de dados que podemos perder. As pequenas empresas exigem que as pessoas usem muitos chapéus, já que o CIO costumo me envolver com as decisões da linha de negócios diariamente.
RSolberg 27/09
11
Isso tornará a discussão muito mais curta então.
precisa saber é o seguinte
3

Digamos que você tenha um cenário comercial comum, sendo o seu horário mais movimentado: das 9h às 17h, de segunda a sexta-feira. Então eu sugiro: Backup completo no domingo à noite. Backups diferenciais às 8h, 18h e 1h (para reduzir o tempo de recuperação). Registre backups a cada hora ou dependendo do que sua empresa exige.

Dependendo do seu período de retenção, você deve ter um trabalho de limpeza automática para limpar os arquivos de backup antigos. Tudo isso pode ser criado usando planos de manutenção SQL. Confira este link para o SQL 2005 .

Você deve armazenar seus backups em algum tipo de disco redundante (espelhado) ou pode usar fitas para armazenamento externo. Os usuários podem continuar trabalhando no sistema enquanto os backups são executados.

StanleyJohns
fonte
2

Eu não faria um backup completo todas as noites. Se for um banco de dados grande, isso poderá levar muito tempo, sem mencionar que ocupa muito espaço na mídia. Faça um backup completo todo fim de semana e um backup diferencial todas as noites. Em seguida, faça um backup do log de transações (supondo que seu banco de dados esteja em recuperação total) a cada hora ou a cada meia hora, mas verifique se esses arquivos .bak e .trn residem em um disco separado em caso de falha no disco.

Thomas Stringer
fonte
As tags foram perdidas, este não é um grande banco de dados. Atualmente, está sendo executado em uma instância do SQLExpress.
RSolberg 27/09
11
Dezenas de milhares de dólares, rodando no Express? Interessante!
Andrei Rînea 20/03/2012
Na verdade não. Dependendo do que você armazena (sem textos, sem binários) - são 10 gigabytes de dados. Você pode executar um sistema de contabilidade para uma grande empresa - SÉRIE grande - em 10 gigabytes. Uma loja on-line com 100.000 pedidos por dia pode facilmente ser vendida em 10 gigabytes.
TomTom
1

Você pode sincronizar na nuvem sua pasta de backups à noite para obter armazenamento externo? Como tenho certeza de que se trata de uma empresa de assistência médica, há alguma que seja segura o suficiente para conformidade com o HiPA? Ou talvez apenas super-criptografá-los?

O script coloca pelo menos uma cópia do backup em um compartilhamento de rede? Dessa forma, se a caixa física explodir ...


fonte
Sim para tudo do que foi citado. Na verdade, fazemos backup em uma unidade de rede que é espelhada e copiamos dados desse ambiente em um data center seguro.
RSolberg 27/09