octobre
2011
Je pensais créer un job SQL via l’IHM de création de job sous SSMS (SQL Server Management Studio) mais à ma grande surprise il était impossible de le faire. Voici le besoin : Créer un job SQL qui exécute une procédure stockée toutes les 30 secondes.
Le problème provient du fait que sous SQL SERVER 2005 SP4, l’IHM de création du job SQL ne permet pas de sélectionner le délai de rafraîchissement en secondes (toutes les 30 secondes).
Quelle est la version du serveur SQL ?
=> Solution de contournement
GO
DECLARE @jobId BINARY(16)
EXEC msdb.dbo.sp_add_job @job_name=N'JOB_STAT_AGENTS_APPELS',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=2,
@notify_level_netsend=2,
@notify_level_page=2,
@delete_level=0,
@description=N'Procédure des statistiques des appels. Cette procédure est lancée toutes les 30 secondes',
@category_name=N'[Uncategorized (Local)]',
--> Proprietaire du JOB
@owner_login_name=N'mylogin', @job_id = @jobId OUTPUT
select @jobId
GO
--> Affecter à @server_name le nom du serveur
EXEC msdb.dbo.sp_add_jobserver @job_name=N'JOB_STAT_AGENTS_APPELS', @server_name = N'NomDuServeur'
GO
USE [msdb]
GO
--> Etapes
EXEC msdb.dbo.sp_add_jobstep @job_name=N'JOB_STAT_AGENTS_APPELS', @step_name=N'Statistiques appels',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_fail_action=2,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC dbo.myProcedure',
--> Nom de la base de données
@database_name=N'MaBase',
@flags=0
GO
USE [msdb]
GO
EXEC msdb.dbo.sp_update_job @job_name=N'JOB_STAT_AGENTS_APPELS',
@enabled=1,
@start_step_id=1,
@notify_level_eventlog=0,
@notify_level_email=2,
@notify_level_netsend=2,
@notify_level_page=2,
@delete_level=0,
@description=N'Procédure des statistiques des appels. Cette procédure est lancée toutes les 30 secondes ',
@category_name=N'[Uncategorized (Local)]',
--> login proprietaire du job
@owner_login_name=N'mylogin',
@notify_email_operator_name=N'',
@notify_netsend_operator_name=N'',
@notify_page_operator_name=N''
GO
USE [msdb]
GO
DECLARE @schedule_id int
EXEC msdb.dbo.sp_add_jobschedule @job_name=N'JOB_STAT_AGENTS_APPELS', @name=N'Lancement_toutes_les30secondes',
@enabled=1, --> Activé=1 Désactivé = 0
@freq_type=4, --> Fréquence - périodicité : Quotidienne (@freq_type=4)
@freq_interval=1, --> Schedule par interval regulier
@freq_subday_type=2, --> Fréquence de lancement en seconde (type=2)
@freq_subday_interval=30, –> Frequence de lance du job : toutes les 30 secondes
@freq_recurrence_factor=1, --> Nombre de semaines ou de mois devant s'écouler entre chaque exécution (freq_recurrence_factor est utilisé uniquement si freq_type a la valeur 8, 16 ou 32)
@active_start_date=20111007, --> Date de debut de demarrage du job
@active_end_date=99991231, --> Date de fin d'activation du job
@active_start_time=0, --> Heure de debut
@active_end_time=235959, --> Heure de fin
@schedule_id = @schedule_id OUTPUT
select @schedule_id
GO
En exécutant le script ci-dessus directement dans SSMS je suis arrivé à créer le job avec la fréquence de lancement toutes les 30 secondes.
=> Après la création du Job il est impossible de modifier la « Planification » (schedule)
En cliquant sur le bouton « Modifier », on a le message d’erreur suivant
Solution de contournement : Suppression complète du job et création à l’aide du script SQL avec avec la modification souhaitée.
=> La bonne nouvelle c’est que sous SQL SERVER 2008 R2, il y a pas de problème
je n’ai pas vérifier ce si sous SQL SERVER 2008 on a le même problème ou pas !
——————————
Etienne ZINZINDOHOUE
——————————
Sur 2008 il est également possible par l’interface graphique de planifier des jobs à la seconde.
++