Olá pessoal!
Neste post vamos falar um pouco sobre como criar agendamento de rotinas de backup em um SQL Server 2016 Express + Task Scheduler do Windows + arquivos .bat.
Para criar esse tipo de agendamento, geralmente utilizamos o próprio Agent do SQL Server. Porém, como estamos falando de um Express, este é muito restrito. Devido a essa restrição, não há algumas features disponíveis¸tais como SQL Server Agent, backup compression, etc. Para verificar todas restrições e comparações com outras edições do SQL Server, segue link de referência: https://docs.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2016?view=sql-server-ver15.
Por isso, para esse tipo de trabalho no SQL Server Express, podemos utilizar o Task Scheduler (Agendador de tarefas)do Windows.
Assim, vamos começar criando uma tarefa no Task Scheduler. Abra-o como administrador.
Com o botão direito, selecione a opção Create Task:
![](https://cdbdatasolutions.com.br/wp-content/uploads/2022/06/2-5.png)
Escolha um nome para a task e marque a opção “Run whether use ris logged on or not” para salvar a autenticação.
![](https://cdbdatasolutions.com.br/wp-content/uploads/2022/06/3-5.png)
Na aba Triggers, faça o agendamento conforme for necessário para o seu ambiente. Por ser agendamento de um backup full, pode ser agendado semanalmente (caso tenha programado agendamento de backups diferenciais diários e transacionais a cada 1h, por exemplo) ou até mesmo diário.
![](https://cdbdatasolutions.com.br/wp-content/uploads/2022/06/4-5.png)
Na aba Actions, selecione qual ação o agendamento irá tomar. No nosso caso, executará um arquivo .bat com as instruções de backup.
![](https://cdbdatasolutions.com.br/wp-content/uploads/2022/06/5-5.png)
Nesse diretório, vamos criar um arquivo .bat com o seguinte comando:
cd \
sqlcmd -S".\SQLEXPRESS2016" -E -dBackupDemo -Q"execute [dbo].[stp_Demo_BackupFull] 'BackupDemo', 'C:\BackupTest\'"
Sobre os parâmetros de conexão, consultar o seguinte link: https://docs.microsoft.com/en-us/sql/tools/sqlcmd-utility?view=sql-server-ver15.
Por questões de preferência e organização, preferimos criar uma procedure que faz o processo de backup e por último faz a validação do backup:
USE [BackupDemo]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create procedure [dbo].[stp_Demo_BackupFull](
@pNmBanco sysname,
@pDsCaminho varchar(200)
)
as
begin
Declare @NmBD varchar(200);
Declare @NmBackup varchar(200);
set @NmBD = @pDsCaminho + 'FULL_' + + @pNmBanco + '_' + convert(char(8), getdate(),112) + '_' + REPLACE(CONVERT(nvarchar, GETDATE(), 8), ':', '') + '.bak';
set @NmBackup = 'Backup Full do ' + @pNmBanco
BACKUP DATABASE @pNmBanco TO disk = @NmBD WITH NOFORMAT, NOINIT,
NAME = @NmBackup, SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM
--------------------------------
-- Verificação do backup executado
Declare @DsMsg varchar(200);
set @DsMsg = 'A verificação falhou, o backup do banco de dados ' + @pNmBanco + ' não existe';
RESTORE VERIFYONLY FROM DISK = @NmBD WITH FILE = 1, NOUNLOAD, NOREWIND
end
Na aba Conditions, você poderá escolher as configurações caso necessário, respeitando algumas condições. No nosso caso, deixamos padrão.
![](https://cdbdatasolutions.com.br/wp-content/uploads/2022/06/6-5.png)
Na aba Settings, há mais algumas configurações que podem ser definidas, como desabilitar a tarefa caso fique em execução há mais de x dias, entre outras. Nesse caso, deixamos padrão devido a fins de teste.
![](https://cdbdatasolutions.com.br/wp-content/uploads/2022/06/7-3.png)
Na aba History, você pode acompanhar o histórico de execuções e depurar caso ocorra algum erro durante alguma execução.
Quando for executar a tarefa, ele irá criar um arquivo no padrão abaixo:
“TIPODEBACKUP_BANCODEDADOS_ANOMESDIA_HORAMINUTOSEGUNDO.bak”
![](https://cdbdatasolutions.com.br/wp-content/uploads/2022/06/8-1.png)
Pronto! Agora temos nosso agendamento de backup full do banco de dados. Para o agendamento de backups diferenciais e transacionais, basta trocar o tipo de backup no script e o agendamento segue a mesma lógica para criação.
Abraço e até a próxima!