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
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
et en dernière étape
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
USE MASTER
ALTER DATABASE GPG SET MULTI_USER
ce job stoppe le job de capture CDC de la base temporairement jusqu'à 10 à 20 secondes après la dernière étape
j'ai une erreur
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)
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)
Mais si je met un waitfor dans le job de test
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
lpour me laisser le temps d'examiner sysjobactivity
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