Le mode single_user stoppe temporairement le job CDC_Capture
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:
1 2 3 4 5
|
USE MASTER
ALTER DATABASE GPG
SET RESTRICTED_USER
WITH ROLLBACK IMMEDIATE |
et en dernière étape
Code:
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
Citation:
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:
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:
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 |