Replication System Stored Procedures ConceptsReplication System Stored Procedures Concepts

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceAnwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance

In SQL ServerSQL Server ermöglichen gespeicherte Systemprozeduren den programmgesteuerten Zugriff auf alle vom Benutzer konfigurierbaren Funktionen in einer Replikationstopologie.In SQL ServerSQL Server, programmatic access to all of the user-configurable functionality in a replication topology is provided by system stored procedures. Gespeicherte Prozeduren können einzeln mit SQL Server Management StudioSQL Server Management Studio oder dem sqlcmd-Befehlszeilenhilfsprogramm ausgeführt werden. Es ist jedoch nützlich, Transact-SQLTransact-SQL-Skriptdateien zu schreiben, mit denen eine logische Sequenz von Replikationstasks ausgeführt werden können.While stored procedures may be executed individually using the SQL Server Management StudioSQL Server Management Studio or the sqlcmd command-line utility, it may be beneficial to write Transact-SQLTransact-SQL script files that can be executed to perform a logical sequence of replication tasks.

Skriptreplikationstasks bieten die folgenden Vorteile:Scripting replication tasks provides the following benefits:

  • Sie behalten eine dauerhafte Kopie der Schritte bei, die zum Bereitstellen der Replikationstopologie verwendet werden.Keeps a permanent copy of the steps used to deploy your replication topology.

  • Sie verwenden ein einzelnes Skript, um mehrere Abonnenten zu konfigurieren.Uses a single script to configure multiple Subscribers.

  • Sie bieten neuen Datenbankadministratoren eine schnelle Einführung, da Skripts die Möglichkeiten zur Verfügung stellen, den Code auszuwerten, zu verstehen, zu ändern oder Probleme im Code zu finden und zu beheben.Quickly educates new database administrators by enabling them to evaluate, understand, change, or troubleshoot the code.

    Wichtig

    Skripts können Quellen für Sicherheitsbeeinträchtigungen sein. Sie können Systemfunktionen ohne Wissen oder Eingriff des Benutzers aufrufen und Sicherheitsanmeldeinformationen im Nur-Text-Format enthalten.Scripts can be the source of security vulnerabilities; they can invoke system functions without user knowledge or intervention and may contain security credentials in plain text. Überprüfen Sie Skripts auf Sicherheitsprobleme, bevor Sie sie verwenden.Review scripts for security issues before you use them.

Erstellen von ReplikationsskriptsCreating Replication Scripts

Aus der Sicht der Replikation besteht ein Skript aus einer oder mehreren Transact-SQLTransact-SQL-Anweisungen, wobei jede Anweisung eine gespeicherte Replikationsprozedur ausführt.From the standpoint of replication, a script is a series of one or more Transact-SQLTransact-SQL statements where each statement executes a replication stored procedure. Skripts sind Textdateien, die meist die Dateierweiterung SQL aufweisen und mit dem sqlcmd-Hilfsprogramm ausgeführt werden können.Scripts are text files, often with a .sql file extension, that can be run using the sqlcmd utility. Beim Ausführen einer Skriptdatei führt das Hilfsprogramm die in der Datei gespeicherten SQL-Anweisungen aus.When a script file is run, the utility executes the SQL statements stored in the file. Entsprechend kann ein Skript als Abfrageobjekt in einem SQL Server Management StudioSQL Server Management Studio-Projekt gespeichert werden.Similarly, a script can be stored as a query object in a SQL Server Management StudioSQL Server Management Studio project.

Replikationsskripts können wie folgt erstellt werden:Replication scripts can be created in the following ways:

  • Erstellen Sie das Skript manuell.Manually create the script.

  • Verwenden Sie die Skriptgenerierungsfunktionen, die in den Replikations-Assistenten bereitgestellt werden.Use the script generation features that are provided in the replication wizards or

  • SQL Server Management StudioSQL Server Management Studio.. Weitere Informationen finden Sie unter Scripting Replication.For more information, see Scripting Replication.

  • Verwenden Sie Replikationsverwaltungsobjekte (RMO), um das Skript programmgesteuert zu generieren und ein RMO-Objekt zu erstellen.Use Replication Management Objects (RMOs) to programmatically generate the script to create an RMO object.

Beachten Sie bei der manuellen Erstellung von Replikationsskripts die folgenden Punkte:When you manually create replication scripts, keep the following considerations in mind:

  • Transact-SQLTransact-SQL-Skripts enthalten mindestens einen Batch.scripts have one or more batches. Der GO-Befehl signalisiert das Ende eines Batches.The GO command signals the end of a batch. Wenn ein Transact-SQLTransact-SQL-Skript keine GO-Befehle enthält, wird es als einzelner Batch ausgeführt.If a Transact-SQLTransact-SQL script does not have any GO commands, it is executed as a single batch.

  • Beim Ausführen mehrerer gespeicherter Replikationsprozeduren in einem einzelnen Batch muss nach der ersten Prozedur allen folgenden Prozeduren das EXECUTE-Schlüsselwort vorangestellt werden.When executing multiple replication stored procedures in a single batch, after the first procedure, all subsequent procedures in the batch must be preceded by the EXECUTE keyword.

  • Alle gespeicherten Prozeduren in einem Batch müssen kompiliert werden, bevor ein Batch ausgeführt wird.All stored procedures in a batch must compile before a batch will execute. Nachdem der Batch kompiliert und ein Ausführungsplan erstellt wurde, kann ggf. jedoch ein Laufzeitfehler auftreten.However, once the batch has been compiled, and an execution plan has been created, a run-time error may or may not occur.

  • Beim Erstellen von Skripts zur Konfiguration der Replikation sollten Sie die Windows-Authentifizierung verwenden, um zu vermeiden, dass Sicherheitsanmeldeinformationen in der Skriptdatei gespeichert werden.When creating scripts to configure replication, you should use Windows Authentication to avoid storing security credentials in the script file. Wenn Anmeldeinformationen in einer Skriptdatei gespeichert werden müssen, muss die Datei an einem sicheren Ort gespeichert werden, um unberechtigten Zugriff zu vermeiden.If you must store credentials in a script file, you must secure the file to prevent unauthorized access.

Beispiel für ein ReplikationsskriptSample Replication Script

Das folgende Skript kann zum Einrichten der Veröffentlichung und Verteilung auf einem Server ausgeführt werden.The following script can be executed to setup publishing and distribution on a server.

-- 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  
  

Dieses Skript kann dann lokal unter dem Namen instdistpub.sql gespeichert werden, sodass es bei Bedarf wiederholt ausgeführt werden kann.This script can then be saved locally as instdistpub.sql so that it can be run or rerun when needed.

Das vorherige Skript umfasst sqlcmd-Skriptvariablen, die in vielen Replikationscodebeispielen in der SQL ServerSQL Server-Onlinedokumentation verwendet werden.The previous script includes sqlcmd scripting variables, which are used in many of the replication code samples in SQL ServerSQL Server Books Online. Skriptvariablen werden mit der $(MyVariable)-Syntax definiert.Scripting variables are defined by using $(MyVariable) syntax. Werte für Variablen können in der Befehlszeile oder in SQL Server Management StudioSQL Server Management Studio an ein Skript übergeben werden.Values for variables can be passed to a script at the command line or in SQL Server Management StudioSQL Server Management Studio. Weitere Informationen finden Sie im nächsten Abschnitt dieses Themas, "Ausführen von Replikationsskripts".For more information, see the next section in this topic, "Executing Replication Scripts."

Ausführen von ReplikationsskriptsExecuting Replication Scripts

Sobald ein Replikationsskript erstellt wurde, kann es wie folgt ausgeführt werden:Once created, a replication script can be executed in one of the following ways:

Erstellen einer SQL-Abfragedatei in SQL Server Management StudioCreating a SQL Query File in SQL Server Management Studio

Eine Transact-SQLTransact-SQL-Replikationsskriptdatei kann als SQL-Abfragedatei in einem SQL Server Management StudioSQL Server Management Studio-Projekt erstellt werden.A replication Transact-SQLTransact-SQL script file can be created as a SQL Query file in a SQL Server Management StudioSQL Server Management Studio project. Nachdem das Skript geschrieben wurde, kann für diese Abfragedatei eine Verbindung mit der Datenbank hergestellt und das Skript ausgeführt werden.After the script is written, a connection can be made to the database for this query file and the script can be executed. Weitere Informationen zum Erstellen von Transact-SQLTransact-SQL-Skripts mithilfe von SQL Server Management StudioSQL Server Management Studio, finden Sie unter Abfrage- und Text-Editoren (SQL Server Management Studio).For more information about how to create Transact-SQLTransact-SQL scripts by using SQL Server Management StudioSQL Server Management Studio, see Query and Text Editors (SQL Server Management Studio).

Um ein Skript zu verwenden, das Skriptvariablen enthält, muss SQL Server Management StudioSQL Server Management Studio im sqlcmd-Modus ausgeführt werden.To use a script that includes scripting variables, SQL Server Management StudioSQL Server Management Studio must be running in sqlcmd mode. Im sqlcmd-Modus lässt der Abfrage-Editor zusätzliche sqlcmd-spezifische Syntax zu, wie :setvar zum Festlegen eines Werts für eine Variable.In sqlcmd mode, the Query Editor accepts additional syntax specific to sqlcmd, such as :setvar, which is used to a value for a variable. Weitere Informationen zum sqlcmd-Modus finden Sie unter Bearbeiten von SQLCMD-Skripts mit dem Abfrage-Editor.For more information about sqlcmd mode, see Edit SQLCMD Scripts with Query Editor. Im folgenden Skript wird :setvar verwendet, um einen Wert für die $(DistPubServer)-Variable bereitzustellen.In the following script, :setvar is used to provide a value for the $(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  
--  

Verwenden des sqlcmd-Hilfsprogramms über die BefehlszeileUsing the sqlcmd Utility from the Command Line

Das folgende Beispiel veranschaulicht, wie die Befehlszeile zur Ausführung der instdistpub.sql-Skriptdatei mit dem sqlcmd Hilfsprogramm verwendet wird:The following example shows how the command line is used to execute the instdistpub.sql script file using the sqlcmd utility:

sqlcmd.exe -E -S sqlserverinstance -i C:\instdistpub.sql -o C:\output.log -v DistPubServer="N'MyDistributorAndPublisher'"  

In diesem Beispiel gibt der -E-Schalter an, dass beim Herstellen einer Verbindung mit SQL ServerSQL Server die Windows-Authentifizierung verwendet wird.In this example, the -E switch indicates that Windows Authentication is used when connecting to SQL ServerSQL Server. Bei Verwendung der Windows-Authentifizierung entfällt das Speichern des Benutzernamens und Kennworts in der Skriptdatei.When using Windows Authentication, there is no need to store a username and password in the script file. Der Name und Pfad der Skriptdatei wird mit dem -i-Schalter und der Name der Ausgabedatei mit dem -o-Schalter angegeben (bei Verwendung dieses Schalters wird die Ausgabe von SQL ServerSQL Server in diese Datei statt in die Konsole geschrieben).The name and path of the script file is specified by the -i switch and the name of the output file is specified by the -o switch (output from SQL ServerSQL Server is written to this file instead of the console when this switch is used). Mit dem sqlcmd-Hilfsprogramm können Sie Skriptvariablen mit dem -v-Schalter zur Laufzeit an das Transact-SQLTransact-SQL-Skript übergeben.The sqlcmd utility enables you to pass scripting variables to a Transact-SQLTransact-SQL script at runtime using the -v switch. In diesem Beispiel ersetzt sqlcmd vor der Ausführung jede Instanz von $(DistPubServer) im Skript durch den N'MyDistributorAndPublisher'-Wert.In this example, sqlcmd replaces every instance of $(DistPubServer) in the script with the value N'MyDistributorAndPublisher' before execution.

Hinweis

Der -X-Schalter deaktiviert Skriptvariablen.The -X switch disables scripting variables.

Automatisieren von Tasks in einer BatchdateiAutomating Tasks in a Batch File

Mit einer Batchdatei können Replikationsverwaltungstasks, Replikationssynchronisierungstasks und andere Tasks in der gleichen Batchdatei automatisiert werden.By using a batch file, replication administration tasks, replication synchronization tasks, and other tasks can be automated in the same batch file. Die folgende Batchdatei verwendet das sqlcmd-Hilfsprogramm, um die Abonnementdatenbank zu löschen und neu zu erstellen und ein Mergepullabonnement hinzuzufügen.The following batch file uses the sqlcmd utility to drop and recreate the subscription database and add a merge pull subscription. Anschließend startet die Datei den Merge-Agent, um das neue Abonnement zu synchronisieren:Then the file invokes the merge agent to synchronize the new subscription:

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  
  

Skripterstellung für allgemeine ReplikationstasksScripting Common Replication Tasks

Im Folgenden sind einige der häufigsten Replikationstasks aufgeführt, für die mit gespeicherten Systemprozeduren ein Skript erstellt werden kann:The following are some of the most common replication tasks can be scripted using system stored procedures:

  • Konfigurieren der Veröffentlichung und VerteilungConfiguring publishing and distribution

  • Ändern von Verleger- und VerteilereigenschaftenModifying Publisher and Distributor properties

  • Deaktivieren von Veröffentlichung und VerteilungDisabling publishing and distribution

  • Erstellen von Veröffentlichungen und Definieren von ArtikelnCreating publications and defining articles

  • Löschen von Veröffentlichungen und ArtikelnDeleting publications and articles

  • Erstellung eines PullabonnementsCreating a pull subscription

  • Ändern eines PullabonnementsModifying a pull subscription

  • Löschen eines PullabonnementsDeleting a pull subscription

  • Erstellen eines PushabonnementsCreating a push subscription

  • Ändern eines PushabonnementsModifying a push subscription

  • Löschen eines PushabonnementsDeleting a push subscription

  • Synchronisieren eines PullabonnementsSynchronizing a pull subscription

Weitere InformationenSee Also

Konzepte für die Replikationsprogrammierung Replication Programming Concepts
Gespeicherte Replikationsprozeduren (Transact-SQL) Replication Stored Procedures (Transact-SQL)
Erstellen von Skripts für die ReplikationScripting Replication