Bonjour tout le monde.

J'ai une replication transactionnelle entre un système ERP et un système de gestion de stock.
Le but de cette réplication c'est que le système de stock ne surcharge pas le système ERP (en Resources ou ne provoque pas des Deadlocks).

Ce système tourne 24h/24 et 7j/7.

Il arrive qu'une erreur bloque la replication. Lorsque ca arrive, j obtiens un email. Si je suis présent, je peux résoudre assez vite le probème.
En général: reinitialiser la souscription avec un nouveau Snapshot suffit.

Je voudrais maintenant automatiser cette action (en T-SQL).

Pour ce faire j 'ai ce script:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
USE ERPDB
exec sp_reinitsubscription @publication = N'ERPCopy4StockDB'
		, @subscriber = N'SERVERP2'
		--, @publisher = N'SERVERP2'
		, @invalidate_snapshot = 1
		, @destination_db = N'ERPCopy'
GO
 
-- Start job to "load last snapshot"
execute msdb.dbo.sp_start_job @job_name=N'SERVERP2-ERPDB-ERPCopy4StockDB-4'
Il me reste encore à détécter l'erreur. Je me suis préparé quelques scripts pour trouver à quel endroits je peux détécter une erreur

Exemples:
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
16
 
exec dbo.sp_replmonitorsubscriptionpendingcmds @publisher = N'SERVERP2', @publisher_db = N'ERPDB', @publication = N'ERPCopy4StockDB', @subscriber = 'SERVERP2', @subscriber_db = 'ERPCopy', @subscription_type = 0	--0=push, 1=pull
 
 
select top 10 * from distribution.dbo.MSrepl_errors ORDER BY time DESC
 
select * from ERPCopy.dbo.Msreplication_subscriptions
Select * from distribution.dbo.Msrepl_commands where xact_seqno > 0x0019E9DC00004DE40011
 
Select * from ERPCopy.dbo.MSreplication_objects
Select * from distribution.dbo.MSdistribution_agents
Select * from distribution.dbo.MSlogreader_agents
Select * from distribution.dbo.MSqreader_agents
Select * from distribution.dbo.MSsnapshot_agents
 
--?exec sp_MSload_replication_status
Je n'ai actuellement pas d'erreur et donc je ne peux vérifier les différents endroits où je suppose pouvoir détécter une erreur.

Je suppose que quelqu'un à déjà abordé ce problème et pourrait également partagé son expérience la-dessus.



Merci d'avance pour toutes informations ou commentaires