Como desenvolver uma procedure para ser consumida pelo Tactium Omni ou Tactium IP em seus respectivos scripts?
Criando Jobs do Gerenciador de Mailing
Na implantação do Gerenciador de Mailing do nMonitor, torna-se necessário criar 3 procedures e seus respectivos Jobs no SQL Server Agent, conforme detalhamento abaixo.
⚠️ Atenção: Os scripts abaixo devem ser executados somente por administradores do banco de dados.
Antes de executar, ajuste as variáveis iniciais conforme o ambiente de implantação.
Antes de executar, ajuste as variáveis iniciais conforme o ambiente de implantação.
🔧 Variáveis de ambiente (ajustar antes da execução)
DECLARE @Sigla VARCHAR (20) = 'SIGLA_AMBIENTE' -- Ex: RGSMGF, TACTIUM, etc.
, @Banco VARCHAR (20) = 'DATABASE' -- Nome do banco de dados do discador (base histórica)
, @Usuario VARCHAR (20) = 'USUARIO_DATABASE' -- Owner do job
, @PathLayout VARCHAR(800) = '\\caminho\para\layout\' -- Apenas para Job 2
📌 Job 1 – Monitora Agendamento de Mailing
| Item | Descrição |
|---|---|
| Job | TACTIUM – Monitora Agendamento de Mailing |
| Procedure | SP_GeraMailingAgendado |
| Objetivo | Gerar segmentos de mailings para discagem que estejam agendados ou em fila |
| Local de execução | Banco do TactiumIP (base histórica) |
| Comando | Exec SP_GeraMailingAgendado |
| Periodicidade | A cada 10 segundos |
🧾 Script de criação do Job 1
USE [msdb]
GO
BEGIN TRANSACTION
DECLARE @Sigla VARCHAR (20) = 'SIGLA_AMBIENTE'
, @Banco VARCHAR (20) = 'DATABASE'
, @Usuario VARCHAR (20) = 'USUARIO_DATABASE'
DECLARE @NomeJob VARCHAR(255) = Concat(@sigla, ' - Monitora Agendamento de Mailing')
, @NomeEtapa VARCHAR(255) = Concat(@sigla, ' - Gera Mailing Agendado')
, @StartDate INT = FORMAT(GETDATE(), 'yyyyMMdd')
DECLARE @schedule_uid UNIQUEIDENTIFIER;
DECLARE @ReturnCode INT = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=@NomeJob,
@enabled=1,
@notify_level_eventlog=2,
@notify_level_email=2,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Nenhuma descrição disponível.',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=@usuario,
@notify_email_operator_name=N'Sac Tactium',
@job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=@NomeEtapa,
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0,
@subsystem=N'TSQL',
@command=N'Exec SP_GeraMailingAgendado',
@database_name=@Banco,
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Execucao a cada 10 segundos',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=4,
@freq_subday_interval=1,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=@StartDate,
@active_end_date=99991231,
@active_start_time=0,
@active_end_time=235959,
@schedule_uid=@schedule_uid OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
📌 Job 2 – Transfere Mailing para o Discador
| Item | Descrição |
|---|---|
| Job | TACTIUM – Transfere Mailing para o Discador |
| Procedure | SP_TransfereParaDiscador |
| Objetivo | Transferir a lista de discagem do gerenciador de mailings para o discador |
| Local de execução | Banco do TactiumIP (base histórica) |
| Comando | Exec SP_TransfereParaDiscador @PathLayout, @Banco, 0 |
| Periodicidade | A cada 10 segundos |
🧾 Script de criação do Job 2
USE [msdb]
GO
BEGIN TRANSACTION
DECLARE @Sigla VARCHAR (20) = 'SIGLA_AMBIENTE'
, @Banco VARCHAR (20) = 'DATABASE'
, @Usuario VARCHAR (20) = 'USUARIO_DATABASE'
, @PathLayout VARCHAR(800) = '\\caminho\para\layout\'
DECLARE @NomeJob VARCHAR(255) = Concat(@sigla, ' - Transfere Mailing para o Discador')
, @NomeEtapa VARCHAR(255) = Concat(@sigla, ' - Transfere Mailing para o Discador')
, @Comando VARCHAR(800) = Concat('Exec SP_TransfereParaDiscador ''', @PathLayout, ''', ''', @Banco, ''', 0')
, @StartDate INT = FORMAT(GETDATE(), 'yyyyMMdd')
DECLARE @schedule_uid UNIQUEIDENTIFIER;
DECLARE @ReturnCode INT = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=@NomeJob,
@enabled=1,
@notify_level_eventlog=2,
@notify_level_email=2,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Nenhuma descrição disponível.',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=@Usuario,
@notify_email_operator_name=N'Sac Tactium',
@job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=@NomeEtapa,
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0,
@subsystem=N'TSQL',
@command=@Comando,
@database_name=@Banco,
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Execucao a cada 10 segundos',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=4,
@freq_subday_interval=1,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=@StartDate,
@active_end_date=99991231,
@active_start_time=0,
@active_end_time=235959,
@schedule_uid=@schedule_uid OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
📌 Job 3 – Recebe resultado do Discador
| Item | Descrição |
|---|---|
| Job | TACTIUM – Recebe resultado do Discador |
| Procedure | SP_RecebeDoDiscador |
| Objetivo | Transferir tentativas realizadas pelo discador para a base do gerenciador de mailings |
| Local de execução | Banco do TactiumIP (base histórica) |
| Comando | Exec SP_RecebeDoDiscador @Banco |
| Periodicidade | A cada 1 minuto |
🧾 Script de criação do Job 3
USE [msdb]
GO
BEGIN TRANSACTION
DECLARE @sigla VARCHAR (20) = 'SIGLA_AMBIENTE'
, @banco VARCHAR (20) = 'DATABASE'
, @usuario VARCHAR (20) = 'USUARIO_DATABASE'
DECLARE @NomeJob VARCHAR(255) = Concat(@sigla, ' - Recebe resultado do Discador')
, @NomeEtapa VARCHAR(255) = Concat(@sigla, ' - Recebe resultado do Discador')
, @Comando VARCHAR(800) = Concat('Exec SP_RecebeDoDiscador ''', @Banco, '''')
, @StartDate INT = FORMAT(GETDATE(), 'yyyyMMdd')
DECLARE @schedule_uid UNIQUEIDENTIFIER;
DECLARE @ReturnCode INT = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=@NomeJob,
@enabled=1,
@notify_level_eventlog=2,
@notify_level_email=2,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Nenhuma descrição disponível.',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=@usuario,
@notify_email_operator_name=N'Sac Tactium',
@job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=@NomeEtapa,
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0,
@subsystem=N'TSQL',
@command=@Comando,
@database_name=@banco,
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Execucao a cada 1 minuto',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=4,
@freq_subday_interval=1,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=@StartDate,
@active_end_date=99991231,
@active_start_time=0,
@active_end_time=235959,
@schedule_uid=@schedule_uid OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
✅ Observações finais
- As procedures (
SP_GeraMailingAgendado,SP_TransfereParaDiscador,SP_RecebeDoDiscador) já devem existir no banco de dados do Tactium antes da criação dos Jobs. - Ajuste o parâmetro
@freq_subday_intervalpara 10 segundos manualmente via interface do SQL Server Agent, se necessário, pois o T-SQL padrão não permite menos que 1 minuto diretamente. - O
@PathLayoutdeve apontar para um diretório acessível pelo SQL Server. - O operador de e-mail
Sac Tactiumdeve existir no SQL Server Agent ou pode ser removido/alterado conforme necessidade.
⚠️ Importante: Após criar os jobs, verifique se eles estão habilitados e com as permissões corretas para execução.
