[SQL Server] Réplication : suppression d’une publication et/ou d’un abonnement

Ce billet traite de la suppression d’une publication et/ou d’un abonnement d’une session de réplication. Il concerne principalement les versions supérieures ou égales à SQL Server 2005.

Il y a diverses façons de suppression une publication et/ou un abonnement, que ce soit via SQL Server Management Studio (SSMS) ou en T-SQL. Ainsi :

  • Pour la suppression d’une publication :
    • Sous SSMS :

Clic-droit sur une publication dans la liste des publications locales au sein de Réplication, puis sélection de Supprimer :


  • En T-SQL (sur le serveur de publication) :
    • Pour la suppression d’une publication de snapshot :
USE <Publication database name>
GO
EXEC sp_droppublication @publication=N'<Publication name>’
USE master
GO
EXEC sp_replicationdboption
@dbname=N'<Publication database name>’,
@optname=N’publish’,
@value=N’false’
GO
  • Pour la suppression d’une publication transactionnelle :
USE <Publication database name>

GO
EXEC sp_droppublication @publication=N'<Publication name>’
USE master
GO
EXEC sp_replicationdboption
@dbname=N'<Publication database name>’,
@optname=N’publish’,
@value=N’false’

GO

  • Pour la suppression d’une publication de fusion :
USE <Publication database name>

GO
EXEC sp_dropmergepublication @publication=N'<Publication name>’
USE master
GO

EXEC sp_replicationdboption
@dbname=N'<Publication database name>’,
@optname=N’merge publish’,
@value=N’false’

GO

Soulignons que toute suppression d’une publication supprime également tous les abonnés de celle-ci.
  • Pour la suppression d’un abonnement :
    • Sous SSMS :

Au sein de l’instance de l’abonné concerné :

Toutefois, il est tout à fait possible de le supprimer à partir de l’instance de l’éditeur (Réplication>Publications locales, puis dépilement de la publication concernée afin de supprimer, ensuite, l’abonné concerné).

  • En T-SQL :
    • Pour les abonnements de snapshot :
      • Si l’abonnement est en push alors la syntaxe d’exécution du script à lancer sur le serveur de publication est la suivante :
USE <Publication database name>

GO
EXEC sp_dropsubscription @publication=N'<Publication name>’,
@article=N’all’,
@subscriber=N’all’,
@destination_db=N’all’
GO
  • Si l’abonnement est en pull,
    alors :
    • Sur l’abonné, la syntaxe est la suivante :
USE <Subscription database name>

GO
EXEC sp_droppullsubscription
@publisher=N'<Publisher server name>’,
@publisher_db=N'<Publication database name>’,
@publication=N'<Publication name>’
GO
  • Sur l’éditeur, la syntaxe est la suivante :
USE <Publication database name>

GO
EXEC sp_dropsubscription
@publication=N'<Publication name>’,
@subscriber=N'<Subscriber server name>’,
@article=N’all’,
@destination_db=N’all’
GO

Les 2 requêtes (à adapter) doivent être exécutés dans l’ordre: 1) sur l’abonné; puis 2) sur l’éditeur.

  • Pour les abonnements de transactionnels :
    • Si l’abonnement est en push alors la syntaxe d’exécution du script à lancer sur le serveur de publication est la suivante :
USE <Publication database name>

GO
EXEC sp_dropsubscription
@publication=N'<Publication name>’,
@article=N’all’,
@subscriber=N’all’,
@destination_db=N’all’
GO
  • Si l’abonnement est en pull,
    alors :
    • Sur l’abonné, la syntaxe est la suivante :
USE <Subscription database name>

GO
EXEC sp_droppullsubscription
@publisher=N'<Publisher server name>’,
@publisher_db=N'<Publisher database name>’,
@publication=N'<Publication name>’
GO
  • Sur l’éditeur, la syntaxe est la suivante :
USE <Publication database name>

GO
EXEC sp_dropsubscription
@publication=N'<Publication name>’,
@subscriber=N'<Subscriber server name>’,
@article=N’all’,
@destination_db=N'<Destination database name>’
GO

Les 2 scripts (adaptés) doivent être exécutés dans l’ordre: 1) sur l’abonné; puis 2) sur l’éditeur.

  • Pour les abonnements de fusion :
    • Si l’abonnement est en push alors la syntaxe d’exécution du script à lancer sur le serveur de publication est la suivante :
USE <Publication database name>

GO
EXEC sp_dropmergesubscription
@publication=N'<Publication name>’,
@subscriber=N'<Publisher server name>’,
@subscriber_db=N'<Subscription database name>’,
@subscription_type=N’push’
GO


  • Si l’abonnement est en pull,
    alors :
    • Sur l’abonné, la syntaxe est la suivante :
USE <Subscription database name>

GO
EXEC sp_dropmergepullsubscription
@publication=N'<Publication name>’,
@publisher=N'<Publisher server name>’,
@publisher_db=N'<Publisher database name>’
GO
  • Sur l’éditeur, la syntaxe est la suivante :
USE <Publication database name>

GO
EXEC sp_dropmergesubscription
@subscription_type=N’pull’,
@publication=N'<Publication name>’,
@subscriber=N'<Subscriber server name>’,
@subscriber_db=N'<Subscription database name>’
GO

Les 2 requêtes (à adapter) doivent être exécutés dans l’ordre: 1) sur l’abonné; puis 2) sur l’éditeur.

Notons que si l’on souhaite supprimer toutes les publications d’une instance « d’un coup », il est possible de procéder en désactivant la réplication (qui supprimera également les abonnements associés) via clic-droit sur Réplication, au sein de l’explorateur d’objets de SSMS, puis sélection de Désactiver la publication et la distribution… :


A noter que l’assistant de désactivation offre la possibilité de générer le script de désactivation.

Publicités