Je souhaite être en mesure de vérifier l'état d'une publication et d'un abonnement dans SQL Server 2008 T-SQL. Je veux être en mesure de déterminer si c'est d'accord, quand a été le dernier succès, synchronisation, etc. Est-ce possible?Comment vérifier l'état de la réplication SQL via T-SQL?
13
A
Répondre
27
Je sais que c'est un peu en retard ....
SELECT
(CASE
WHEN mdh.runstatus = '1' THEN 'Start - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '2' THEN 'Succeed - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '3' THEN 'InProgress - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '4' THEN 'Idle - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '5' THEN 'Retry - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '6' THEN 'Fail - '+cast(mdh.runstatus as varchar)
ELSE CAST(mdh.runstatus AS VARCHAR)
END) [Run Status],
mda.subscriber_db [Subscriber DB],
mda.publication [PUB Name],
right(left(mda.name,LEN(mda.name)-(len(mda.id)+1)), LEN(left(mda.name,LEN(mda.name)-(len(mda.id)+1)))-(10+len(mda.publisher_db)+(case when mda.publisher_db='ALL' then 1 else LEN(mda.publication)+2 end))) [SUBSCRIBER],
CONVERT(VARCHAR(25),mdh.[time]) [LastSynchronized],
und.UndelivCmdsInDistDB [UndistCom],
mdh.comments [Comments],
'select * from distribution.dbo.msrepl_errors (nolock) where id = ' + CAST(mdh.error_id AS VARCHAR(8)) [Query More Info],
mdh.xact_seqno [SEQ_NO],
(CASE
WHEN mda.subscription_type = '0' THEN 'Push'
WHEN mda.subscription_type = '1' THEN 'Pull'
WHEN mda.subscription_type = '2' THEN 'Anonymous'
ELSE CAST(mda.subscription_type AS VARCHAR)
END) [SUB Type],
mda.publisher_db+' - '+CAST(mda.publisher_database_id as varchar) [Publisher DB],
mda.name [Pub - DB - Publication - SUB - AgentID]
FROM distribution.dbo.MSdistribution_agents mda
LEFT JOIN distribution.dbo.MSdistribution_history mdh ON mdh.agent_id = mda.id
JOIN
(SELECT s.agent_id, MaxAgentValue.[time], SUM(CASE WHEN xact_seqno > MaxAgentValue.maxseq THEN 1 ELSE 0 END) AS UndelivCmdsInDistDB
FROM distribution.dbo.MSrepl_commands t (NOLOCK)
JOIN distribution.dbo.MSsubscriptions AS s (NOLOCK) ON (t.article_id = s.article_id AND t.publisher_database_id=s.publisher_database_id)
JOIN
(SELECT hist.agent_id, MAX(hist.[time]) AS [time], h.maxseq
FROM distribution.dbo.MSdistribution_history hist (NOLOCK)
JOIN (SELECT agent_id,ISNULL(MAX(xact_seqno),0x0) AS maxseq
FROM distribution.dbo.MSdistribution_history (NOLOCK)
GROUP BY agent_id) AS h
ON (hist.agent_id=h.agent_id AND h.maxseq=hist.xact_seqno)
GROUP BY hist.agent_id, h.maxseq
) AS MaxAgentValue
ON MaxAgentValue.agent_id = s.agent_id
GROUP BY s.agent_id, MaxAgentValue.[time]
) und
ON mda.id = und.agent_id AND und.[time] = mdh.[time]
where mda.subscriber_db<>'virtual' -- created when your publication has the immediate_sync property set to true. This property dictates whether snapshot is available all the time for new subscriptions to be initialized. This affects the cleanup behavior of transactional replication. If this property is set to true, the transactions will be retained for max retention period instead of it getting cleaned up as soon as all the subscriptions got the change.
--and mdh.runstatus='6' --Fail
--and mdh.runstatus<>'2' --Succeed
order by mdh.[time]
2
Pour vérifier la publication ou le statut d'abonnement, vous pouvez utiliser utilitaire simple SQL Server Replication Explorer
4
poste Vieux, mais en ajoutant pour d'autres - la procédure stockée suivante sera vous donner ce que vous avez besoin:
- sp_replmonitorhelppublication (https://msdn.microsoft.com/en-us/library/ms186304.aspx)
Il vous permet de visualiser l'état ainsi que d'autres informations pour toutes les publications de réplication pour un distributeur (exécuter sur la base de données de distribution)
Questions connexes
- 1. Rupture de la réplication SQL Server
- 2. Comment configurer la réplication SQL Server 2005 via un pare-feu?
- 3. Réplication SQL Server
- 4. TSQL- Rollup SQL 2005
- 5. tsql dynamique sql 2005
- 6. Quelle est la fiabilité de la réplication du serveur SQL?
- 7. Planification de la réplication de fusion SQL Server
- 8. Réplication SQL Server sans suppressions?
- 9. Réplication bidirectionnelle avec SQL Server
- 10. Comment puis-je utiliser TSQL pour vérifier quand le mot de passe d'un utilisateur expirera?
- 11. Comment puis-je réduire les données dans une réplication SQL?
- 12. SQL Server - Réplication transactionnelle (données partielles uniquement)
- 13. Convertir la date dans TSQL
- 14. Réplication transactionnelle SQL Server et ajout de nouvelles tables
- 15. réplication
- 16. TSQL fonctionnalités de SQL 2008 Vs SQL 2005
- 17. Suggestions de débogage de réplication SQL Server 2005
- 18. SQL Server FTI: Comment vérifier l'état de la table?
- 19. SQL - comment vérifier la table pour de nouvelles données?
- 20. Tables temporaires et réplication SQL Server
- 21. Incertitude dans la réplication
- 22. Procédure stockée Réplication ou copie (SQL Server)
- 23. tsql- mots de passe forts
- 24. Réplication SQL Server publiquement disponible Publisher
- 25. SQL Server 2005 - Refuser la "sécurité", les "objets serveur", la "réplication" et la "gestion"?
- 26. Appel d'un Sproc sur un autre SQL Server sans être lié via TSQL
- 27. Comment hors la colonne IDENTITY de la table dans TSQL
- 28. SQL Server 2008 réplication vers SQL Server 2000
- 29. Paramètres de configuration de la réplication IIS7
C'est là requête fantastique! –
c'est un bon script en effet le seul changement que j'ai fait est d'obtenir le serveur d'abonné. J'ai remplacé cette ligne: 'right (left (mda.name, LEN (mda.name) - (len (mda.id) +1)), LEN (à gauche (mda.name, LEN (mda.name) - (len (mda.id) +1))) - (10 + len (mda.publisher_db) + (cas où mda.publisher_db = 'ALL' puis 1 autre LEN (mda.publication) +2 fin))) [ABONNE] , 'par cette ligne: ' REVERSE (SUBSTRING (REVERSE (mda.name), CHARINDEX ('-', REVERSE (mda.name)) + 1, CHARINDEX ('-', REVERSE (mda.name), CHARINDEX ('-', REVERSE (mda.name)) + 1) -CHARINDEX ('-', REVERSE (mda.name)) - 1)) comme [sous], ' –