info@techdevops.com | 437-991-3573 | Data Engineering Services
TechDevOps.com
Resources Tools
Experts in Microsoft SQL Server on Windows, Linux, Containers | Clusters, Always On, FCI | Migrations, Cloud, Performance



View Microsoft SQL Server Replication Publication details
by BF (Principal Consultant; Architecture; Engineering)
2016-07-14








T-SQL:


Use Distribution
go

DECLARE @PublicationName varchar(100)
SET @PublicationName = ''

SELECT t5.srvname as 'Publication Server', t1.publisher_db, t1.publication,
CASE t1.publication_type
WHEN 0 THEN 'Transactional'
WHEN 1 THEN 'Snapshot'
WHEN 2 THEN 'Merge'
END AS 'publication_type',
t2.source_owner, t2.article, t3.name as 'Distribution Agent SQL Job',
t4.profile_name as 'Distribution Agent Profile',
t6.srvname as 'Subscription Server', t3.subscriber_db, t3.subscriber_login,
CASE t3.subscription_type
WHEN 0 THEN 'Push'
WHEN 1 THEN 'Pull'
WHEN 2 THEN 'Anonymous'
END AS 'subscription_type',
CASE t3.subscriber_security_mode
WHEN 0 THEN 'Microsoft SQL Server Authentication'
WHEN 1 THEN 'Microsoft Windows Authentication'
END AS 'subscriber_security_mode'
FROM [distribution].[dbo].[MSpublications] t1
INNER JOIN [distribution].[dbo].[MSarticles] t2 on t1.publication_id = t2.publication_id
INNER JOIN [distribution].[dbo].[MSdistribution_agents] t3 on t1.publication = t3.publication
INNER JOIN [MSDB].[dbo].[MSagent_profiles] t4 on t3.profile_id = t4.profile_id
INNER JOIN master..sysservers t5 ON t1.publisher_id = t5.srvid
INNER JOIN master..sysservers t6 ON t3.subscriber_id = t6.srvid
WHERE t1.publication = @PublicationName
ORDER BY t1.publisher_db asc, t2.article asc


If no Subscribers exist but Publication does:

Use Distribution
go

DECLARE @PublicationName varchar(100)
SET @PublicationName = ''

SELECT t5.srvname as 'Publication Server', t1.publisher_db, t1.publication,
CASE t1.publication_type
WHEN 0 THEN 'Transactional'
WHEN 1 THEN 'Snapshot'
WHEN 2 THEN 'Merge'
END AS 'publication_type',
t2.source_owner, t2.article, t3.name as 'Distribution Agent SQL Job',
t4.profile_name as 'Distribution Agent Profile',
t6.srvname as 'Subscription Server', t3.subscriber_db, t3.subscriber_login,
CASE t3.subscription_type
WHEN 0 THEN 'Push'
WHEN 1 THEN 'Pull'
WHEN 2 THEN 'Anonymous'
END AS 'subscription_type',
CASE t3.subscriber_security_mode
WHEN 0 THEN 'Microsoft SQL Server Authentication'
WHEN 1 THEN 'Microsoft Windows Authentication'
END AS 'subscriber_security_mode'
FROM [distribution].[dbo].[MSpublications] t1
INNER JOIN [distribution].[dbo].[MSarticles] t2 on t1.publication_id = t2.publication_id
LEFT JOIN [distribution].[dbo].[MSdistribution_agents] t3 on t1.publication = t3.publication
LEFT JOIN [MSDB].[dbo].[MSagent_profiles] t4 on t3.profile_id = t4.profile_id
LEFT JOIN master..sysservers t5 ON t1.publisher_id = t5.srvid
LEFT JOIN master..sysservers t6 ON t3.subscriber_id = t6.srvid
WHERE t1.publication = @PublicationName
ORDER BY t1.publisher_db asc, t2.article asc


Note:
Code assumes Distribution DB and Publication DB are on the same MSSQL Server.


/*
use distribution
go
select * from [dbo].[MSpublications]
select * from [dbo].[MSpublisher_databases]
select * from [dbo].[MSsubscriptions]
select * from [dbo].[MSsubscriber_info]
select * from [dbo].[MSsubscriber_schedule]
select * from [dbo].[MSarticles]
select * from [dbo].[MSdistribution_agents]
select * from [dbo].[MSdistribution_history]
select * from [dbo].[MSpublicationthresholds]
select * from [dbo].[MSpublication_access]
use msdb
go
select * from [dbo].[MSagent_profiles]
select * from [dbo].[MSagent_parameters]
select * from [dbo].[MSagentparameterlist]
select * from [dbo].[MSdistributor]
select * from [dbo].[MSdistributiondbs]
select * from [dbo].[MSdistpublishers]
select * from [dbo].[MSreplmonthresholdmetrics]
*/