Agendar e automatizar backups de bancos de dados do SQL Server Express

Versão original do produto: SQL Server
Número original do KB: 2019698

Resumo

SQL Server Express não inclui SQL Server Agent, portanto, você não pode agendar trabalhos de backup ou planos de manutenção da maneira que puder em outras edições SQL Server. Para automatizar backups no SQL Server Express, combine três componentes: o procedimento armazenado sp_BackupDatabases, o utilitário de linha de comando sqlcmd e o Agendador de Tarefas do Windows. Este artigo apresenta as etapas para configurar backups completos, diferenciais e de log de transações agendados de bancos de dados do SQL Server Express. Ele também explica como confirmar se um backup agendado foi executado.

Este artigo aplica-se somente às edições SQL Server Express. Ele não se aplica a SQL Server Express LocalDB.

Por que SQL Server Express não pode agendar backups com SQL Server Agent

SQL Server Agent é o componente que executa trabalhos agendados e planos de manutenção e não está incluído no SQL Server Express. Para obter uma comparação completa do que cada edição inclui, consulte Edições e recursos compatíveis de SQL Server.

Sem SQL Server Agent, você ainda pode fazer backup de um banco de dados expresso SQL Server sob demanda usando qualquer uma das seguintes ferramentas:

Para executar esses backups em um agendamento em vez de sob demanda, use Windows Agendador de Tarefas como o mecanismo de agendamento, conforme descrito nas etapas a seguir. Para obter informações sobre tipos de backup e estratégia, consulte Backup e restauração de bancos de dados SQL Server.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Uma instância em execução do SQL Server Express. Os exemplos neste artigo usam a instância nomeada padrão. .\SQLEXPRESS
  • Participação na função fixa de servidor sysadmin nessa instância, o que é necessário para criar um procedimento armazenado no banco de dados master.
  • Uma pasta ou unidade local com espaço livre suficiente para armazenar os arquivos de backup. Os exemplos usam D:\SQLBackups.
  • Permissão para criar tarefas agendadas no computador que executa SQL Server Express.

Etapa 1: Criar o procedimento armazenado sp_BackupDatabases

sp_BackupDatabasesé um procedimento armazenado fornecido Microsoft que executa o comando apropriado BACKUP em um banco de dados ou em cada banco de dados online na instância. Você o cria uma vez no master banco de dados.

Baixe o script de SQL_Express_Backups.sql e salve-o localmente, por exemplo, como C:\Temp\SQL_Express_Backups.sql. Em seguida, crie o procedimento armazenado usando o SSMS ou sqlcmd.

Criar o procedimento armazenado usando o SSMS

  1. Abra o SSMS e conecte-se à instância do SQL Server Express. No nome do servidor, insira .\SQLEXPRESSe selecione Conectar.
  2. Selecione Arquivo>Aberto>, selecione o arquivo SQL_Express_Backups.sql que você salvou e, em seguida, selecione Abrir.
  3. Confirme se a lista de banco de dados na barra de ferramentas mostra master. O script começa com USE [master], portanto, ele direciona o banco de dados correto automaticamente.
  4. Selecione Executar (ou pressione F5). O painel Mensagens relata Commands completed successfully.

Criar o procedimento armazenado usando sqlcmd

Execute o seguinte comando de um prompt de comando:

sqlcmd -S .\SQLEXPRESS -E -i "C:\Temp\SQL_Express_Backups.sql"

Confirme se o procedimento armazenado foi criado

Execute a consulta a seguir na instância. Ele retornará uma linha se o procedimento armazenado existir:

SELECT name, create_date
FROM master.sys.procedures
WHERE name = 'sp_BackupDatabases';

parâmetros de sp_BackupDatabases

O procedimento armazenado aceita os seguintes parâmetros:

Parâmetro Obrigatório Description
@backupLocation Sim A pasta que recebe os arquivos de backup, por exemplo D:\SQLBackups\. A pasta já deve existir.
@backupType Sim O tipo de backup: F para completo, D para diferencial ou L para log de transações.
@databaseName No O banco de dados para fazer backup. Se você omitir esse parâmetro, o procedimento armazenado faz backup de todos os bancos de dados online na instância, exceto os bancos de dados excluídos pelo script.

O procedimento armazenado nunca faz backup tempdb. Ele também ignora os bancos de dados de exemplo Northwind, pubs e AdventureWorks para todos os tipos de backup, e ignora master em backups diferenciais e de log porque esses tipos de backup não são compatíveis com o banco de dados master.

Importante

Os nomes de banco de dados excluídos são codificados no script. Se você tiver um banco de dados que use um desses nomes, o procedimento armazenado o ignorará sem relatar um erro. Para fazer backup desse tipo de banco de dados, edite as listas DELETE @DBs WHERE DBNAME IN (...) no script antes de criar o procedimento armazenado.

Etapa 2: Instalar o utilitário sqlcmd

O sqlcmd utilitário permite executar instruções Transact-SQL, procedimentos armazenados do sistema e arquivos de script da linha de comando. Ele é instalado com o SSMS e também está disponível como um download autônomo para computadores que não têm SSMS. Para instalá-lo, consulte Baixar e instalar o utilitário sqlcmd.

Para confirmar se sqlcmd está instalado e disponível, execute sqlcmd -? em um prompt de comando.

A pasta que contém o sqlcmd executável geralmente é adicionada à variável de Path ambiente quando você instala SQL Server ou as ferramentas autônomas. Se sqlcmd -? informar que o comando não é reconhecido, adicione a pasta à variável Path ou especifique o caminho completo para o utilitário no arquivo em lote.

Etapa 3: Criar o arquivo em lote Sqlbackup.bat

Em um editor de texto, crie um arquivo em lote chamado Sqlbackup.bat. Copie o texto de um dos exemplos a seguir para esse arquivo, dependendo do seu cenário.

Considere os seguintes pontos antes de escolher um exemplo:

  • Cada exemplo usa D:\SQLBackups como espaço reservado. Altere o caminho para a unidade e a pasta de backup que você deseja usar em seu ambiente e verifique se a pasta existe.
  • Se você usar a Autenticação do SQL Server, a senha será armazenada em texto sem criptografia no arquivo em lote. Restrinja o acesso à pasta que contém o arquivo em lote somente para usuários autorizados.

Exemplo 1: backups completos de todos os bancos de dados usando Windows Autenticação

REM Sqlbackup.bat
sqlcmd -S .\SQLEXPRESS -E -b -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='F'"

Exemplo 2: backups diferenciais de todos os bancos de dados usando a Autenticação do SQL Server

REM Sqlbackup.bat
sqlcmd -U <YourSQLLogin> -P <StrongPassword> -S .\SQLEXPRESS -b -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='D'"

Observação

Para executar backups, o login deve ser membro da função de banco de dados fixa db_backupoperator ou db_owner em cada banco de dados do qual você faz backup, ou membro da função de servidor fixa sysadmin. Para obter mais informações, consulte funções no nível do banco de dados.

Exemplo 3: Backups de log de transações de todos os bancos de dados usando Windows Autenticação

REM Sqlbackup.bat
sqlcmd -S .\SQLEXPRESS -E -b -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='L'"

Os backups de log de transações exigem o modelo de recuperação completo ou bulk-logged e exigem pelo menos um backup completo anterior. Para obter mais informações, confira Modelos de recuperação () (SQL Server).

Exemplo 4: backup completo de um único banco de dados usando a Autenticação Windows

REM Sqlbackup.bat
sqlcmd -S .\SQLEXPRESS -E -b -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @databaseName='USERDB', @backupType='F'"

Para fazer um backup diferencial de USERDB, altere o @backupType parâmetro para D. Para fazer um backup de log de transações, altere-o para L.

A opção -b faz com que sqlcmd seja encerrado e retorne um valor DOS ERRORLEVEL de 1 quando ocorre um erro do SQL Server com nível de severidade superior a 10. Sem -b, sqlcmd retorna 0 mesmo quando o backup falha e o Agendador de Tarefas relata a tarefa como bem-sucedida.

Antes de continuar, execute Sqlbackup.bat manualmente em um prompt de comando e confirme se os arquivos de backup aparecem na pasta de backup. Corrigir erros agora é mais fácil do que diagnosticá-los posteriormente por meio do Agendador de Tarefas.

Etapa 4: Agendar o arquivo em lote no Agendador de Tarefas Windows

Siga estas etapas para executar Sqlbackup.bat em um agendamento:

  1. No computador que está executando o SQL Server Express, selecione Iniciar e digite Agendador de Tarefas na caixa de texto.

    Captura de tela dos resultados da pesquisa do Windows que mostra o aplicativo para desktop Agendador de Tarefas listado em

  2. Em Melhor correspondência, selecione Agendador de Tarefas para iniciá-lo.

  3. No Agendador de Tarefas, clique com o botão direito do mouse no Agendador de Tarefas (Local) e selecione Criar Tarefa Básica.

  4. Insira um nome para a nova tarefa (por exemplo, SQLBackup) e selecione Avançar.

  5. Selecione Diariamente para o gatilho de tarefa e selecione Avançar.

  6. Defina a recorrência como um dia e selecione Avançar.

  7. Selecione Iniciar um programa como a ação e selecione Avançar.

  8. Selecione Procurar, selecione o arquivo Sqlbackup.bat que você criou na Etapa 3: Criar o arquivo em lote Sqlbackup.bat e, em seguida, selecione Abrir.

  9. Marque a caixa de seleção Abrir a caixa de diálogo Propriedades para esta tarefa ao clicar em Concluir e, em seguida, selecione Concluir.

  10. Na guia Geral , examine as opções de segurança e confirme o seguinte para a conta listada em Ao executar a tarefa, use a seguinte conta de usuário:

    • A conta tem pelo menos permissões de leitura e execução para executar o sqlcmd utilitário.
    • Se o arquivo em lote usar Windows Autenticação, a conta terá permissão para fazer backup dos bancos de dados SQL Server.
    • Se o arquivo em lote usar a Autenticação do SQL Server, o login do SQL Server no arquivo em lote terá permissão para fazer backup dos bancos de dados.
  11. Ajuste as configurações restantes para corresponder aos seus requisitos e selecione OK.

Dica

Como teste, execute Sqlbackup.bat em um prompt de comando iniciado por você com a mesma conta de usuário que é proprietária da tarefa. Esta etapa confirma que a conta tem as permissões necessárias antes da execução do agendamento.

Para obter mais informações sobre as opções de agendamento, consulte o Agendador de Tarefas.

Verificar se o backup agendado foi executado

Após a primeira execução agendada, confirme se o backup foi bem-sucedido:

  • Verifique a pasta de backup para novos arquivos .bak (backups completos e diferenciais) ou arquivos .trn (backups de log de transações). O procedimento armazenado adiciona um carimbo de data e hora a cada nome de arquivo.

  • No Agendador de Tarefas, selecione Biblioteca do Agendador de Tarefas, selecione sua tarefa e examine a coluna Resultado da Última Execução . Esta coluna mostra o código de saída retornado pelo arquivo em lote. Como os exemplos usam a opção -b, um valor de 0x1 significa que o comando de backup falhou. Para obter outros valores, consulte o erro do Agendador de Tarefas e as constantes de êxito.

  • Consulte o histórico de backup na instância:

    SELECT database_name, type, backup_start_date, backup_finish_date, physical_device_name
    FROM msdb.dbo.backupset AS bs
    INNER JOIN msdb.dbo.backupmediafamily AS bmf
        ON bs.media_set_id = bmf.media_set_id
    ORDER BY backup_start_date DESC;
    

    Essas tabelas fazem parte do histórico de backup que SQL Server mantém no msdb banco de dados. Para obter mais informações, consulte o histórico de backup e informações de cabeçalho (SQL Server).

Importante

Sempre confirme se os arquivos de backup existem e se o histórico de backup contém linhas recentes. Uma tarefa que o Agendador de Tarefas relata como bem-sucedida não é a prova de que o backup foi bem-sucedido.

Requisitos e limitações desse método de backup

Lembre-se dos seguintes requisitos e limitações ao usar o procedimento neste artigo:

  • O serviço Agendador de Tarefas deve estar em execução quando a tarefa está agendada para ser iniciada. Recomendamos que você defina o tipo de inicialização desse serviço como Automático para que o serviço seja executado mesmo após uma reinicialização.
  • A unidade que recebe os backups deve ter espaço livre suficiente. Limpe arquivos antigos na pasta de backup regularmente para que você não fique sem espaço em disco. O sp_BackupDatabases procedimento armazenado não exclui arquivos de backup antigos.
  • O procedimento armazenado faz backup somente dos bancos de dados que estão online. Ele ignora silenciosamente bancos de dados que estejam offline, em restauração ou indisponíveis por qualquer outro motivo.
  • Esse método não substitui SQL Server Agent. Ele não tem histórico integrado de execuções, lógica de nova tentativa nem alertas de falha. Examine o histórico de backup regularmente ou atualize para uma edição que inclua SQL Server Agent se você precisar desses recursos.