JOB no SQL Server
Introdução
O JOB é uma forma de auxiliar na manutenção com tarefas que devem ser executadas diversas vezes iguais ou em uma determinada data em especial sem precisar da intervenção do DBA, por exemplo, a desfragmentação de uma tabela no domingo. Como no domingo ninguém estará na empresa pode-se agendar o trabalho para ser executado nesse período.
Os JOBs podem ser criados de duas formas ou através do Enterprise manager ou por T-SQL, neste artigo vou mostrar duas formas que poderemos utilizar para criarmos um JOB.
Necessitamos que o serviço agente do SQL Server seja inicializado (SQLSERVERAGENT), para iniciar este serviço podemos procurá-lo na janela services ou iniciar através do SQL Service Manager. Também deveremos ter certeza que existe instalado no nosso servidor um banco de dados chamado MSDB, que é o banco utilizado pelo SQL Server para controlar os JOBs.
Nosso primeiro JOB
Vou começar explicando como criar um JOB de backup completo que irá ser executado de segunda a sexta as 23hr da noite, esse tipo de JOB é importante e muito utilizado, afinal todo DBA que se preza tem um bom plano de backup de dados. E a melhor maneira de planejar um backup é utilizando os JOBs.
Definido o objetivo do nosso JOB, devemos agora decidir como criar o JOB. Por interface gráfica com o Enterprise manager ou por T-SQL com o auxilio de uma serie de comandos. Neste artigo vou explicar as duas maneiras, vejamos por primeiro como criar o JOB através do Enterprise manager.
Enterprise manager
No Enterprise Manager clique com o botão direito do mouse sobre o ícone do servidor na tree, vá até novo e selecione a opção JOB, a tela que segue é para criarmos o JOB. Veja abaixo:

Abaixo a definição de cada campo da guia General:
- Name: define o nome que daremos ao nosso JOB, no caso do nosso exemplo: “Backup do Banco Pubs”;
- Category: define um rótulo para o JOB, porém não influencia em nada na execução do mesmo;
- Owner: é o usuário dono do JOB;
- Description: descrição que daremos para esse JOB.
Na guia Steps, é aonde iremos definir os passos do nosso JOB.
Clique em New e abrirá uma tela como a que segue abaixo:

Nesta janela iremos definir os seguintes campos:
- Step name: nome do passo que estamos trabalhando, nomeie para Backup do banco de dados pubs;
- Type: é o tipo de passo que estamos trabalhando, selecione a opção TSQL;
- Database: o banco de dados em que o JOB será rodado selecione o banco Master;
- Command: o comando que o JOB irá rodar, como vamos fazer um backup, primeiro crie um device chamado Pubs_BKP, e inclua a linha de comando abaixo no campo Command.
BACKUP DATABASE Pubs TO Pubs_BKP |
Para verificar como esta o nosso JOB, de uma olhada na imagem abaixo, agora é só confirmar. E iremos para a próxima guia, Schedules. Esta guia permite criar-mos o agendamento do nosso JOB. Para isso clique em New Schedule e veja a tela que segue:

No campo Name definiremos o nome para o nosso agendamento, selecionamos a opção Recurring, e o botão Change, que irá abrir a tela aonde selecionaremos o período do agendamento.
Veja a tela abaixo, nela temos a opção de selecionar se o nosso agendamento que poderá ser diário, semanal ou mensal. Selecionaremos semanal (Weekly) e marcando os dias de segunda a sexta, indique o horário que o JOB irá ser executado também e é só confirmar a configuração com o OK.

Isso ira criar e configurar o JOB de backup do banco pubs para ocorrer todos os dias de segunda a sexta-feira, no horário das 23:00 horas.
T-SQL
É fácil criar um JOB usando o Enterprise manager, mas se é tão fácil por que utilizar comandos t-SQL para criar um JOB? Por vários motivos, dentre eles vou citar dois que aconteceram comigo e eu tive que resolver desta forma:
- Em uma aplicação, eu tinha como escopo de um projeto criar um agendamento de backup, e para não criar um novo agente para rodar o backup e consumir mais recursos do hardware, encapsulei o script t-SQL no meu código e permiti a concatenação das strings de parâmetros. Criando assim um JOB personalizado no servidor pelo usuário da minha aplicação;
- Outra situação que talvez seja até muito mais comum, é que podemos estar utilizando um servidor MSDE ao invés do um servido SQL Server, o que não nos permite por licença utilizar o Enterprise Manager;
Então vamos ao código necessário para criar esse JOB no nosso servidor. Abaixo está o código na integra, devidamente comentado e para entendê-lo basta conferir com os passos da criação de um JOB através do Enterprise Manager.

É só copiar e rodar este script, ele irá criar um JOB igual ao criado pelo Enterprise Manager.
Facilidades
Mas, poderá o caro leitor se questionar como aprender a criar scripts tão bons e úteis como esse? Se você estiver utilizando o MSDE, terá que aprender com muita experiência e muito estudo, mas, se você estiver usando o SQL Server fica fácil, pois o Enterprise Manager tem um recurso espetacular que é o de criar o script a partir de um objeto existente. Esse recurso está presente em quase todos os objetos.
Clique com o botão direito sobre o JOB criado e clique em:
- Todas as tarefas, lá você encontrará a opção: Generate Script, essa opção irá criar um script igual ao que vimos anteriormente;

Na tela Generate SQL Script, podemos especificar o arquivo de destino ou visualizar o script.

Testando
Para fazer um Job funcionar no SQL Server nos devemos lembrar de iniciar o serviço do agente do SQL Server, chamado: msserveragent, vamos em Painel de controle/Ferramentas administrativas/Serviços, agora vamos procurar pelo serviço SQLSERVERAGENT, clique com o botão direito sobre o serviço e clique em iniciar.

Agora com nosso serviço iniciado vamos ao Enterprise Manager e executar o JOB, para isso siga a ordem de cliques da imagem abaixo, e em seguida no painel a direita aparecerá o nosso JOB.

Sobre o item clique com o botão direito e clique em Start para iniciar o JOB, com algumas exceções não aparecerá mensagem, e para verificar se realmente o JOB foi iniciado com sucesso, clique novamente com o botão direito sobre o JOB e clique na opção View Job History.

O View Job History mostra uma tela com o histórico de execuções do nosso JOB, indicações de erros e sucesso. Poderíamos também solicitar ao SQL Server para enviar um e-mail notificando o sucesso ou não do JOB.
Podemos conseguir informações de JOBs através de T-SQL dando um SELECT nas tabelas SYSJOBHISTORY e SYSJOBS do banco de dados MSDB.
Use MSDB
GO
select * from dbo.sysjobhistory
select * from dbo.sysjobs
Temos uma maneira mais fácil usando T-SQL que é chamar a STORED PROCEDURE SP_HELP_JOBHISTORY. Veja abaixo um exemplo de como utilizar essa stored procedure.
USE MSDB
GO
EXEC sp_help_jobhistory null, 'Backup do Banco Pubs'
Conclusão
Os JOBs são extremamente úteis para um bom administrador de banco de dados, eliminando algumas tarefas rotineiras que iriam tomar o tempo e a atenção do DBA.
Além disso, vimos como é fácil criar, acompanhar e administrar um JOB no SQL Server e no MSDE.
Web site: www.crespi.pro.br
email: rodrigo@crespi.pro.br