Bonjour
J'ai deux bases de donnée avec Change Date Capture activé
Le soir sur chacune de ces bases un job de maintenance qui contient en première étape
et en dernière étape
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 USE MASTER ALTER DATABASE GPG SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE
ce job stoppe le job de capture CDC de la base temporairement jusqu'à 10 à 20 secondes après la dernière étape
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 USE MASTER ALTER DATABASE GPG SET MULTI_USER
j'ai une erreur
J'ai testé la chose avec une BD de test et un job qui lui applique le mode single user, et le job de capture sur cette base semble bien être stoppé (vu dans le moniteur)Exécuté en tant qu''utilisateur*: NT SERVICE\SQLSERVERAGENT. Unspecified error occurred on SQL Server. Connection may have been terminated by the server. [SQLSTATE HY000] (erreur 0) Impossible de poursuivre l'exécution, car la session a été terminée. [SQLSTATE HY000] (erreur 596)
Mais si je met un waitfor dans le job de test
lpour me laisser le temps d'examiner sysjobactivity
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 USE MASTER ALTER DATABASE GPG_TEST SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE WAITFOR DELAY '00:00:30'; ALTER DATABASE GPG_TEST SET MULTI_USER
stop_execution_date sur le job CDC_Capture reste null
alors qu'il est bien mis à la date quand je l'arrête depuis SSMS
Bref je voit pas trop ce qu'il se passe
A priori cela n'est pas impactant puisque le job semble persister je ne sais comment
A tout hasard j'ai ajouté comme dernière étape de mon job de maintenance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 IF NOT EXISTS ( SELECT * FROM msdb.dbo.sysjobs_view A INNER JOIN msdb.dbo.sysjobactivity B ON A.job_id = B.job_id WHERE B.run_Requested_date IS NOT NULL AND B.stop_execution_date IS NULL AND A.name = 'cdc.GPG_capture' ) BEGIN EXEC msdb.dbo.sp_start_job 'cdc.GPG_capture'; END
Partager