SQL Server Express é a versão gratuita, porém bastante limitada, do SQL Server. Por ser gratuito e amplamente utilizado, softwares com baixa necessidade de armazenamento e processamento de dados costumam adotar o SQL Server Express como parte da solução de software.
No entanto, é muito comum as rotinas de manutenção – principalmente o backup – serem negligenciados nesta edição do SQL Server, porque o SQL Agent – processo responsável pela automatização de tarefas – não está disponível no SQL Express. Para tornar o processo automático devemos recorrer a outras alternativas de gerenciamento de tarefas como o Task Scheduler do Windows ou crontab se o SQL Server estiver instalado no Linux.
Para efetuar o backup, precisamos criar um script customizado para realizar essa ação de acordo com nossas necessidades. Recomendo a adoção da solução de manutenção de banco de dados do Ola Hallengren, um rico pacote de scripts com procedimentos que facilitam a manutenção do banco de dados. Neste pacote temos scripts para auxiliar ações de backup, desfragmentação de índices, atualizações de estatísticas e verificação de integridade do banco de dados. No site é possível fazer o download dos scripts individualmente, ou fazer o download com a solução completa MaintenanceSolution.sql.
Após ter feito o download, precisamos executar o script no servidor de banco de dados com um login com permissão de SysAdmin. O script criará diversas procedures no banco de dados master (dbo.CommandExecute, dbo.DatabaseBackup, dbo.IndexOptimize e dbo.DatabaseIntegrityCheck) e uma tabela de log dbo.CommandLog. Caso opte por não executar o script de MaintenanceSolution.sql, mas sim os scripts individuais, você precisará executar o comando de criação dos objetos CommandExecute, DatabaseBackup e CommandLog.
O próximo passo para a configuração do backup é a criação de um usuário no sistema operacional, que pode ser um usuário comum sem permissões administrativas e será usado para agendar a tarefa. Se for “Windows Authentication“, nós não precisaremos expor senha no arquivo *.bat que realizará a tarefa do backup.
Neste exemplo, criei um usuário sqltask (imagem abaixo) cuja senha não expira e também não pode ser alterada. Se a senha do usuário for alterada será necessário ajustar a tarefa agendada no sistema operacional.
Uma vez criado o usuário no Windows, precisamos criar um login no SQL Server com nele, com a permissão de SysAdmin. Abaixo segue o script para criação do login.
USE [master]; GO CREATE LOGIN [NOMESERVIDOR\sqltask] FROM WINDOWS WITH DEFAULT_DATABASE = [master]; GO ALTER SERVER ROLE sysadmin ADD MEMBER [NOMESERVIDOR\sqltask]; GO
Finalizamos os requisitos para o agendamento das tarefas de backups do SQL Server. O próximo passo é configurar o Windows Task Scheduler para automatizar as rotinas de Backup Full e Log. Os scripts que vamos agendar estão listados a seguir.
Backup Full:
sqlcmd -E –S "(local)\SQLEXPRESS" -d master -Q "EXECUTE dbo.DatabaseBackup @Databases = 'ALL_DATABASES', @Directory = 'C:\Backup', @BackupType = 'FULL', @CleanupTime = 24" -b
1. Criar uma nova pasta nas tarefas agendadas. No exemplo, criei a pasta chamada SQL Server. Nesta pasta, colocarei todas as tarefas agendadas.
2. Em seguida, com o botão direito do mouse sobre a pasta, escolher a opção “Create Basic Task…”. Na janela informar o nome da tarefa, por exemplo “Backup Full Diario”.
3. Definir a periodicidade, neste exemplo, foi definida como diária.
4. Ajustar a data de início e o horário da execução da tarefa agendada. Também é preciso definir a recorrência para a cada 1 dia.
5. A tarefa agendada consiste em executar um programa, no caso, o sqlcmd (interface de linha de comando do SQL Server).
6. No campo de Programa/script: colei o comando de execução do backup full mostrado anteriormente no artigo.
Observação: Opcionalmente pode ser criado um arquivo .bat com o comando do backup full. Neste caso, no campo Program/Script basta informarmos o diretório do arquivo .bat, simplificando a chamada. Por questões de segurança, recomendo remover a permissão de escrita do arquivo .bat de qualquer outro usuário, pois como estamos executando tarefas agendadas com a conta de SysAdmin, isto pode configurar um grave porblema de segurança no SQL Server.
7. Conferir o resumo da criação da tarefa agendada. Periodicidade, horário de execução, recorrência e qual a ação. Marcar o Checkbox “Open the Properties dialog for this task when I click Finish”, pois serão necessários ajustes para que o script execute diariamente, mesmo que o usuário não esteja conectado no servidor.
8. Na tela de propriedades da tarefa de Backup Full Diário, precisamos alterar o usuário que executará a ação. Para isto, devemos clicar no botão “Change User or Group…” e informar a conta que será utilizada para executar a tarefa agendada.
9. No exemplo da imagem o usuário “WIN-DK8VQTP8EIJ\RCMATEUS” foi adotado no lugar de “NOMESERVIDOR\sqltask” e ele será o responsável pela chamada da tarefa agendada. Precisamos garantir que a tarefa seja executada mesmo que o usuário não esteja conectado no servidor. Por isso, devemos selecionar a opção “Run whether user is logged on or not”.
10. Finalizamos o agendamento da tarefa clicando no botão Ok. Ao clicar no botão uma janela solicitará a senha do usuário sqltask. Basta informá-la que a tarefa estará agendada.
Backup Log (Transacional):
O processo de agendamento de backups transacionais é bastante semelhante ao backup full. A recomendação, neste caso, é que os backups transacionais executem com uma frequência maior (a cada 30 minutos, a cada 1 hora, depende da criticidade do seu negócio).
sqlcmd -E –S "(local)\SQLEXPRESS" -d master -Q "EXECUTE dbo.DatabaseBackup @Databases = 'ALL_DATABASES', @Directory = 'C:\Backup', @BackupType = 'LOG', @CleanupTime = 24" –b
Esperamos que o artigo seja útil. Qualquer dúvidas pode enviar nos comentários que iremos responder assim que possível.