Como criar e usar SQL Server Agent Jobs: passo a passo
Automatizar tarefas recorrentes em SQL Server poupa tempo e reduz erros manuais. Este guia mostra como criar e configurar um SQL Server Agent Job para executar comandos T-SQL agendados, útil para backups, manutenção ou ETL simples.
Pré-requisitos
- Instância do SQL Server com SQL Server Agent instalado e em execução
- Permissões: ser membro de SQLAgentUserRole no MSDB ou sysadmin
- SQL Server Management Studio (SSMS) ou acesso via T-SQL
Passo 1: Entender o que é um SQL Server Agent Job
Um SQL Server Agent Job é composto por passos, cada passo executa um tipo de tarefa (T-SQL, PowerShell, CmdExec). Também inclui agendamentos, notificações e propriedades de segurança. Saber isto evita criar jobs incompletos ou sem gestão de erros.
Passo 2: Criar um Job simples via SSMS
Usar o SSMS é a forma visual mais direta: cria-se o job, adicionam-se passos e define-se o agendamento.
-- Exemplo T-SQL equivalente para criar um job via script (ver passo 3 para detalhes)
Passo 3: Criar um Job via T-SQL (exemplo prático)
Este exemplo cria um job que executa um comando T-SQL simples para inserir um registo numa tabela de auditoria. Copie e adapte às suas necessidades.
USE msdb;
GO
-- 1. Criar o job
EXEC sp_add_job
@job_name = N'InserirAuditoriaDiaria',
@enabled = 1,
@description = N'Insere um registo diário de auditoria.';
-- 2. Adicionar um passo que executa T-SQL
EXEC sp_add_jobstep
@job_name = N'InserirAuditoriaDiaria',
@step_name = N'InserirRegisto',
@subsystem = N'TSQL',
@command = N'
IF OBJECT_ID(N''dbo.Auditoria'', N''U'') IS NULL
BEGIN
CREATE TABLE dbo.Auditoria (
Id INT IDENTITY(1,1) PRIMARY KEY,
Execucao DATETIME2 DEFAULT SYSUTCDATETIME(),
Mensagem NVARCHAR(200)
);
END;
INSERT INTO dbo.Auditoria (Mensagem) VALUES (N''Job executado'');
',
@on_success_action = 1,
@on_fail_action = 2;
-- 3. Criar um schedule diário às 02:30
EXEC sp_add_jobschedule
@job_name = N'InserirAuditoriaDiaria',
@name = N'ScheduleDiario0230',
@freq_type = 4, -- diário
@freq_interval = 1,
@active_start_time = 23000; -- 02:30:00 -> 02:30 = 023000
-- 4. Associar o job ao servidor local
EXEC sp_add_jobserver
@job_name = N'InserirAuditoriaDiaria',
@server_name = N'(LOCAL)';
GO
Passo 4: Configurar notificações e handlers de erro
É importante saber quando um job falha. Pode configurar operadores e notificações por e-mail (Database Mail) ou registar falhas em tabelas de log.
-- Exemplo: registar falhas adicionando um passo on_fail_action ou usando sp_add_notification
-- Configurar o Database Mail e um operador via SSMS é recomendado para alertas por e-mail.
-- Aqui um método simples: criar um passo final para gravar falhas numa tabela de logs (como fallback).
Passo 5: Testar e agendar execução manual
Antes de confiar no agendamento, execute o job manualmente e verifique o comportamento e permissões. Pode executar via SSMS ou T-SQL:
-- Executar job manualmente
USE msdb;
EXEC sp_start_job @job_name = N'InserirAuditoriaDiaria';
Verificar o resultado
Para confirmar que o job correu: verifique o histórico do job no SSMS (Job Activity Monitor → View History) e consulte a tabela dbo.Auditoria na base de dados alvo.
-- Verificar entradas
SELECT TOP 10 * FROM dbo.Auditoria ORDER BY Execucao DESC;
-- Verificar historial do job
USE msdb;
SELECT sj.name, sh.run_date, sh.run_time, sh.message, sh.run_status
FROM dbo.sysjobhistory sh
JOIN dbo.sysjobs sj ON sh.job_id = sj.job_id
WHERE sj.name = N'InserirAuditoriaDiaria'
ORDER BY sh.instance_id DESC;
Conclusão
Automatizar com SQL Server Agent melhora fiabilidade e consistência de tarefas recorrentes. Próximos passos: adicionar passos PowerShell para ETL, configurar notificações com Database Mail e gerir permissões com proxies. Dica: teste sempre os jobs em ambiente de desenvolvimento antes de os colocar em produção.