Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Managed Instance
In SQL Server wordt programmatische toegang tot alle door de gebruiker configureerbare functionaliteit in een replicatietopologie voorzien door systeemopgeslagen procedures. Hoewel opgeslagen procedures individueel kunnen worden uitgevoerd met de SQL Server Management Studio of de sqlcmd-commandoregelhulp, kan het nuttig zijn om Transact-SQL scriptbestanden te schrijven die kunnen worden uitgevoerd om een logische reeks replicatietaken uit te voeren.
Het scripten van replicatietaken biedt de volgende voordelen:
Bewaart een permanente kopie van de stappen die zijn gebruikt om je replicatietopologie uit te zetten.
Gebruikt één script om meerdere abonnees te configureren.
Leidt nieuwe databasebeheerders snel op door hen in staat te stellen de code te evalueren, begrijpen, wijzigen of problemen op te lossen.
Belangrijk
Scripts kunnen de bron zijn van beveiligingslekken; Ze kunnen systeemfuncties aanroepen zonder dat de gebruiker het weet of grijpt, en kunnen beveiligingsgegevens in platte tekst bevatten. Bekijk scripts op beveiligingsproblemen voordat je ze gebruikt.
Replicatiescripts maken
Vanuit het perspectief van replicatie is een script een reeks van één of meer Transact-SQL statements waarbij elke instructie een replicatie-stored procedure uitvoert. Scripts zijn tekstbestanden, vaak met een .sql bestandsextensie, die kunnen worden uitgevoerd met de sqlcmd-tool. Wanneer een scriptbestand wordt uitgevoerd, voert het hulpprogramma de SQL-instructies uit die in het bestand zijn opgeslagen. Op dezelfde manier kan een script worden opgeslagen als een query-object in een SQL Server Management Studio-project.
Replicatiescripts kunnen op de volgende manieren worden gemaakt:
Maak het script handmatig aan.
Gebruik de scriptgeneratiefuncties die in de replicatie-wizards worden aangeboden of
SQL Server Management Studio. Voor meer informatie, zie Scripting Replication.
Gebruik Replication Management Objects (RMO's) om het script programmatisch te genereren en zo een RMO-object te maken.
Houd dan de volgende overwegingen in gedachten wanneer je handmatig replicatiescripts aanmaakt:
Transact-SQL scripts hebben één of meer batches. Het GO-commando geeft het einde van een batch aan. Als een Transact-SQL-script geen GO-commando's heeft, wordt het als één batch uitgevoerd.
Bij het uitvoeren van meerdere replicatieopgeslagen procedures in één batch, moeten na de eerste procedure alle volgende procedures in de batch worden voorafgegaan door het uitvoeren-sleutelwoord.
Alle opgeslagen procedures in een batch moeten gecompileerd worden voordat een batch kan worden uitgevoerd. Echter, zodra de batch is gecompileerd en een uitvoeringsplan is gemaakt, kan er wel of niet een runtime-fout optreden.
Bij het maken van scripts om replicatie te configureren, moet je Windows-authenticatie gebruiken om beveiligingsgegevens niet in het scriptbestand op te slaan. Als u referenties in een scriptbestand moet opslaan, moet u het bestand beveiligen om onbevoegde toegang te voorkomen.
Voorbeeld replicatiescript
Het volgende script kan worden uitgevoerd om publicatie en distributie op een server op te zetten.
-- 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'AdventureWorks2022';
-- 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 AdventureWorks2022 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
Dit script kan dan lokaal worden opgeslagen zodat instdistpub.sql het kan worden uitgevoerd of opnieuw uitgevoerd wanneer nodig.
Het vorige script bevat sqlcmd-scriptvariabelen , die in veel replicatiecodevoorbeelden in SQL Server Books Online worden gebruikt. Scriptvariabelen worden gedefinieerd door gebruik te maken $(MyVariable) van syntaxis. Waarden voor variabelen kunnen worden doorgegeven aan een script via de opdrachtregel of in SQL Server Management Studio. Voor meer informatie, zie de volgende sectie in dit onderwerp, "Replicatiescripts uitvoeren."
Replicatiescripts uitvoeren
Eenmaal aangemaakt, kan een replicatiescript op een van de volgende manieren worden uitgevoerd:
Een SQL-querybestand aanmaken in SQL Server Management Studio
Een replicatiebestand Transact-SQL scriptbestand kan worden aangemaakt als een SQL Query-bestand in een SQL Server Management Studio-project. Nadat het script is geschreven, kan er een verbinding worden gemaakt met de database voor dit querybestand en kan het script worden uitgevoerd. Voor meer informatie over hoe je Transact-SQL scripts kunt maken met SQL Server Management Studio, zie Query en Text Editors (SQL Server Management Studio).
Als u een script wilt gebruiken dat scriptvariabelen bevat, moet SQL Server Management Studio worden uitgevoerd in de SQLCMD-modus. In de SQLCMD-modus accepteert de Query-editor aanvullende syntaxis die specifiek is voor sqlcmd, zoals :setvar, die wordt gebruikt voor een waarde voor een variabele. Zie SQLCMD-scripts bewerken met Query-editor voor meer informatie over de SQLCMD-modus. In het volgende script :setvar wordt gebruikt om een waarde voor de $(DistPubServer) variabele te geven.
: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
--
Gebruik van de sqlcmd-hulplijn via de opdrachtregel
Het volgende voorbeeld laat zien hoe de opdrachtregel wordt gebruikt om het instdistpub.sql scriptbestand uit te voeren met de sqlcmd-hulp:
sqlcmd.exe -E -S sqlserverinstance -i C:\instdistpub.sql -o C:\output.log -v DistPubServer="N'MyDistributorAndPublisher'"
In dit voorbeeld geeft de -E schakelaar aan dat Windows-authenticatie wordt gebruikt bij het verbinden met SQL Server. Bij gebruik van Windows-authenticatie is het niet nodig om een gebruikersnaam en wachtwoord in het scriptbestand op te slaan. De naam en het pad van het scriptbestand worden door de -i switch opgegeven en de naam van het uitvoerbestand door de -o switch (output van SQL Server wordt naar dit bestand geschreven in plaats van naar de console wanneer deze switch wordt gebruikt). De sqlcmd tool stelt je in staat om scriptvariabelen tijdens runtime aan een Transact-SQL script te sturen via de -v switch. In dit voorbeeld sqlcmd vervangt elke instantie van $(DistPubServer) in het script door de waarde N'MyDistributorAndPublisher' vóór uitvoering.
Opmerking
De -X schakelaar schakelt scriptvariabelen uit.
Taken automatiseren in een batchbestand
Door gebruik te maken van een batchbestand kunnen replicatiebeheertaken, replicatiesynchronisatietaken en andere taken in hetzelfde batchbestand worden geautomatiseerd. Het volgende batchbestand gebruikt de sqlcmd-tool om de abonnementsdatabase te verwijderen en opnieuw aan te maken en een merge pull-abonnement toe te voegen. Vervolgens roept het bestand de merge agent aan om het nieuwe abonnement te synchroniseren:
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\130\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
Scripting van Veelvoorkomende Replicatietaken
De volgende zijn enkele van de meest voorkomende replicatietaken die kunnen worden gescript met behulp van systeemopgeslagen procedures:
Configuratie van publicatie en distributie
Wijzigingen van uitgevers- en distributeurseigendommen
Uitgeven en distributie uitschakelen
Het creëren van publicaties en het definiëren van artikelen
Publicaties en artikelen verwijderen
Een pull-abonnement aanmaken
Een pull-abonnement wijzigen
Een pull-abonnement verwijderen
Een push-abonnement aanmaken
Een pushabonnement wijzigen
Een push-abonnement verwijderen
Synchronisatie van een pull-abonnement