Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans SQL Server, l’accès programmatique à toutes les fonctionnalités configurables par l’utilisateur dans une topologie de réplication est fourni par les procédures stockées système. Bien que les procédures stockées puissent être exécutées individuellement à l’aide de SQL Server Management Studio ou de l’utilitaire de ligne de commande sqlcmd, il peut être utile d’écrire des fichiers de script Transact-SQL qui peuvent être exécutés pour effectuer une séquence logique de tâches de réplication.
Les tâches de réplication de script offrent les avantages suivants :
Conserve une copie permanente des étapes utilisées pour déployer votre topologie de réplication.
Utilise un seul script pour configurer plusieurs Abonnés.
Renseigne rapidement les nouveaux administrateurs de base de données en leur permettant d’évaluer, de comprendre, de modifier ou de dépanner le code.
Important
Les scripts peuvent être la source des vulnérabilités de sécurité ; ils peuvent appeler des fonctions système sans connaissance ou intervention de l’utilisateur et peuvent contenir des informations d’identification de sécurité en texte brut. Passez en revue les scripts pour connaître les problèmes de sécurité avant de les utiliser.
Création de scripts de réplication
Du point de vue de la réplication, un script est une série d’une ou plusieurs instructions Transact-SQL où chaque instruction exécute une procédure stockée de réplication. Les scripts sont des fichiers texte, souvent avec une extension de fichier .sql, qui peuvent être exécutés à l’aide de l’utilitaire sqlcmd. Lorsqu’un fichier de script est exécuté, l’utilitaire exécute les instructions SQL stockées dans le fichier. De même, un script peut être stocké en tant qu’objet de requête dans un projet SQL Server Management Studio.
Les scripts de réplication peuvent être créés de la manière suivante :
Créez manuellement le script.
Utiliser les fonctionnalités de génération de script fournies dans les Assistants de réplication ou
SQL Server Management Studio. Pour plus d’informations, consultez La réplication de script.
Utilisez les objets rmos (Replication Management Objects) pour générer par programme le script pour créer un objet RMO.
Lorsque vous créez manuellement des scripts de réplication, gardez à l’esprit les considérations suivantes :
Transact-SQL scripts ont un ou plusieurs lots. La commande GO signale la fin d’un lot. Si un script Transact-SQL n’a pas de commandes GO, il est exécuté en tant que lot unique.
Lors de l’exécution de plusieurs procédures stockées de réplication dans un seul lot, après la première procédure, toutes les procédures suivantes du lot doivent être précédées du mot clé EXECUTE.
Toutes les procédures stockées d’un lot doivent être compilées avant qu’un lot ne s’exécute. Toutefois, une fois que le lot a été compilé et qu’un plan d’exécution a été créé, une erreur d’exécution peut ou non se produire.
Lors de la création de scripts pour configurer la réplication, vous devez utiliser l’authentification Windows pour éviter de stocker les informations d’identification de sécurité dans le fichier de script. Si vous devez stocker des informations d’identification dans un fichier de script, vous devez sécuriser le fichier pour empêcher l’accès non autorisé.
Exemple de script de réplication
Le script suivant peut être exécuté pour configurer la publication et la distribution sur un serveur.
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables
-- on the command line and in SQL Server Management Studio, see the
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".
-- Install the Distributor and the distribution database.
DECLARE @distributor AS sysname;
DECLARE @distributionDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @directory AS nvarchar(500);
DECLARE @publicationDB AS sysname;
-- Specify the Distributor name.
SET @distributor = $(DistPubServer);
-- Specify the distribution database.
SET @distributionDB = N'distribution';
-- Specify the Publisher name.
SET @publisher = $(DistPubServer);
-- Specify the replication working directory.
SET @directory = N'\\' + $(DistPubServer) + '\repldata';
-- Specify the publication database.
SET @publicationDB = N'AdventureWorks2012';
-- Install the server MYDISTPUB as a Distributor using the defaults,
-- including autogenerating the distributor password.
USE master
EXEC sp_adddistributor @distributor = @distributor;
-- Create a new distribution database using the defaults, including
-- using Windows Authentication.
USE master
EXEC sp_adddistributiondb @database = @distributionDB,
@security_mode = 1;
GO
-- Create a Publisher and enable AdventureWorks2012 for replication.
-- Add MYDISTPUB as a publisher with MYDISTPUB as a local distributor
-- and use Windows Authentication.
DECLARE @distributionDB AS sysname;
DECLARE @publisher AS sysname;
-- Specify the distribution database.
SET @distributionDB = N'distribution';
-- Specify the Publisher name.
SET @publisher = $(DistPubServer);
USE [distribution]
EXEC sp_adddistpublisher @publisher=@publisher,
@distribution_db=@distributionDB,
@security_mode = 1;
GO
Ce script peut ensuite être enregistré localement instdistpub.sql afin qu’il puisse être exécuté ou réexécuté si nécessaire.
Le script précédent inclut des variables de script sqlcmd , qui sont utilisées dans de nombreux exemples de code de réplication dans la documentation en ligne de SQL Server. Les variables de script sont définies à l’aide $(MyVariable) de la syntaxe. Les valeurs des variables peuvent être passées à un script sur la ligne de commande ou dans SQL Server Management Studio. Pour plus d’informations, consultez la section suivante de cette rubrique, « Exécution de scripts de réplication ».
Exécution de scripts de réplication
Une fois créé, un script de réplication peut être exécuté de l’une des manières suivantes :
Création d’un fichier de requête SQL dans SQL Server Management Studio
Une réplication Transact-SQL fichier de script peut être créée en tant que fichier sql Query dans un projet SQL Server Management Studio. Une fois le script écrit, une connexion peut être établie à la base de données pour ce fichier de requête et le script peut être exécuté. Pour plus d’informations sur la création de scripts Transact-SQL à l’aide de SQL Server Management Studio, consultez Éditeurs de requête et de texte (SQL Server Management Studio)).
Pour utiliser un script qui inclut des variables de script, SQL Server Management Studio doit s’exécuter en mode sqlcmd . En mode sqlcmd , l’Éditeur de requête accepte une syntaxe supplémentaire spécifique à sqlcmd, telle que :setvar, utilisée pour une valeur pour une variable. Pour plus d’informations sur le mode sqlcmd , consultez Modifier des scripts SQLCMD avec l’éditeur de requête. Dans le script suivant, :setvar est utilisé pour fournir une valeur pour la $(DistPubServer) variable.
:setvar DistPubServer N'MyPublisherAndDistributor';
-- Install the Distributor and the distribution database.
DECLARE @distributor AS sysname;
DECLARE @distributionDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @directory AS nvarchar(500);
DECLARE @publicationDB AS sysname;
-- Specify the Distributor name.
SET @distributor = $(DistPubServer);
-- Specify the distribution database.
SET @distributionDB = N'distribution';
-- Specify the Publisher name.
SET @publisher = $(DistPubServer);
--
-- Additional code goes here
--
Utilisation de l’utilitaire sqlcmd à partir de la ligne de commande
L’exemple suivant montre comment la ligne de commande est utilisée pour exécuter le instdistpub.sql fichier de script à l’aide de l’utilitaire sqlcmd :
sqlcmd.exe -E -S sqlserverinstance -i C:\instdistpub.sql -o C:\output.log -v DistPubServer="N'MyDistributorAndPublisher'"
Dans cet exemple, le commutateur indique que l’authentification -E Windows est utilisée lors de la connexion à SQL Server. Lorsque vous utilisez l’authentification Windows, il n’est pas nécessaire de stocker un nom d’utilisateur et un mot de passe dans le fichier de script. Le nom et le chemin du fichier de script sont spécifiés par le -i commutateur et le nom du fichier de sortie est spécifié par le -o commutateur (la sortie de SQL Server est écrite dans ce fichier au lieu de la console lorsque ce commutateur est utilisé). L’utilitaire sqlcmd vous permet de passer des variables de script à un script Transact-SQL lors de l’exécution à l’aide du -v commutateur. Dans cet exemple, sqlcmd remplace chaque instance du $(DistPubServer) script par la valeur N'MyDistributorAndPublisher' avant l’exécution.
Remarque
Le -X commutateur désactive les variables de script.
Automatisation des tâches dans un fichier batch
En utilisant un fichier batch, des tâches d’administration de réplication, des tâches de synchronisation de réplication et d’autres tâches peuvent être automatisées dans le même fichier batch. Le fichier batch suivant utilise l’utilitaire sqlcmd pour supprimer et recréer la base de données d’abonnement et ajouter un abonnement par extraction de fusion. Ensuite, le fichier appelle l’agent de fusion pour synchroniser le nouvel abonnement :
REM ----------------------Script to synchronize merge subscription ----------------------
REM -- Creates subscription database and
REM -- synchronizes the subscription to MergeSalesPerson.
REM -- Current computer acts as both Publisher and Subscriber.
REM -------------------------------------------------------------------------------------
SET Publisher=%computername%
SET Subscriber=%computername%
SET PubDb=AdventureWorks
SET SubDb=AdventureWorksReplica
SET PubName=AdvWorksSalesOrdersMerge
REM -- Drop and recreate the subscription database at the Subscriber
sqlcmd /S%Subscriber% /E /Q"USE master IF EXISTS (SELECT * FROM sysdatabases WHERE name='%SubDb%' ) DROP DATABASE %SubDb%"
sqlcmd /S%Subscriber% /E /Q"USE master CREATE DATABASE %SubDb%"
REM -- Add a pull subscription at the Subscriber
sqlcmd /S%Subscriber% /E /Q"USE %SubDb% EXEC sp_addmergepullsubscription @publisher = %Publisher%, @publication = %PubName%, @publisher_db = %PubDb%"
sqlcmd /S%Subscriber% /E /Q"USE %SubDb% EXEC sp_addmergepullsubscription_agent @publisher = %Publisher%, @publisher_db = %PubDb%, @publication = %PubName%, @subscriber = %Subscriber%, @subscriber_db = %SubDb%, @distributor = %Publisher%"
REM -- This batch file starts the merge agent at the Subscriber to
REM -- synchronize a pull subscription to a merge publication.
REM -- The following must be supplied on one line.
"\Program Files\Microsoft SQL Server\120\COM\REPLMERG.EXE" -Publisher %Publisher% -Subscriber %Subscriber% -Distributor %Publisher% -PublisherDB %PubDb% -SubscriberDB %SubDb% -Publication %PubName% -PublisherSecurityMode 1 -OutputVerboseLevel 1 -Output -SubscriberSecurityMode 1 -SubscriptionType 1 -DistributorSecurityMode 1 -Validate 3
Scripts de tâches de réplication courantes
Voici quelques-unes des tâches de réplication les plus courantes pouvant être scriptées à l’aide de procédures stockées système :
Configuration de la publication et de la distribution
Modification des propriétés du serveur de publication et du serveur de distribution
Désactivation de la publication et de la distribution
Création de publications et définition d’articles
Suppression de publications et d’articles
Création d’un abonnement par extraction
Modification d’un abonnement par extraction
Suppression d’un abonnement par extraction
Création d’un abonnement Push
Modification d’un abonnement Push
Suppression d’un abonnement Push
Synchronisation d’un abonnement par extraction
Voir aussi
Concepts de programmation en matière de réplication
Procédures stockées de réplication (Transact-SQL)
Réplication de script