Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Managed Instance
I SQL Server tillhandahålls programmatisk åtkomst till all användarkonfigurerbar funktionalitet i en replikeringstopologi genom systemlagrade procedurer. Även om lagrade procedurer kan köras individuellt med SQL Server Management Studio eller kommandoradsverktyget sqlcmd, kan det vara fördelaktigt att skriva Transact-SQL skriptfiler som kan köras för att utföra en logisk sekvens av replikeringsuppgifter.
Skriptning av replikationsuppgifter ger följande fördelar:
Behåller en permanent kopia av stegen som används för att distribuera din replikationstopologi.
Använder ett enda skript för att konfigurera flera prenumeranter.
Utbildar snabbt nya databasadministratörer genom att låta dem utvärdera, förstå, ändra eller felsöka koden.
Viktigt!
Skript kan vara källan till säkerhetssårbarheter; De kan anropa systemfunktioner utan användarens vetskap eller ingripande och kan innehålla säkerhetsuppgifter i klartext. Gå igenom skript för säkerhetsproblem innan du använder dem.
Skapa replikeringsskript
Ur replikationssynpunkt är ett skript en serie av ett eller flera Transact-SQL satser där varje sats kör en replikeringslagrad procedur. Skript är textfiler, ofta med filtillägget .sql, som kan köras med sqlcmd-verktyget. När en skriptfil körs körs utför verktyget de SQL-satser som lagras i filen. På liknande sätt kan ett skript lagras som ett frågeobjekt i ett SQL Server Management Studio-projekt.
Replikeringsskript kan skapas på följande sätt:
Skapa skriptet manuellt.
Använd skriptgenereringsfunktionerna som finns i replikationsguiderna eller
SQL Server Management Studio. För mer information, se Scripting Replication.
Använd Replication Management Objects (RMOs) för att programmatiskt generera skriptet och skapa ett RMO-objekt.
När du manuellt skapar replikeringsskript, ha följande överväganden i åtanke:
Transact-SQL skript har en eller flera batcher. GO-kommandot signalerar slutet på en batch. Om ett Transact-SQL-skript inte har några GO-kommandon utförs det som en enda batch.
När flera replikeringslagrade procedurer körs i en enda batch måste alla efterföljande procedurer i batchen föregås av nyckelordet EXECUTE efter den första proceduren.
Alla lagrade procedurer i en batch måste kompileras innan en batch kan köras. Men när batchen har kompilerats och en exekveringsplan har skapats kan ett körtidsfel uppstå eller inte.
När du skapar skript för att konfigurera replikering bör du använda Windows-autentisering för att undvika att lagra säkerhetsuppgifter i skriptfilen. Om du måste lagra autentiseringsuppgifter i en skriptfil måste du skydda filen för att förhindra obehörig åtkomst.
Exempel på replikeringsskript
Följande skript kan köras för att upprätta publicering och distribution på en 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'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
Detta skript kan sedan sparas lokalt instdistpub.sql så att det kan köras eller köras om vid behov.
Det tidigare skriptet inkluderar sqlcmd-skriptvariabler , som används i många av replikationskodexemplen i SQL Server Books Online. Skriptvariabler definieras genom att använda $(MyVariable) syntax. Värden för variabler kan skickas till ett skript på kommandoraden eller i SQL Server Management Studio. För mer information, se nästa avsnitt i detta ämne, "Exekvering av replikeringsskript."
Körning av replikeringsskript
När ett replikeringsskript väl är skapat kan det köras på ett av följande sätt:
Skapa en SQL-frågefil i SQL Server Management Studio
En replikerings- Transact-SQL skriptfil kan skapas som en SQL Query-fil i ett SQL Server Management Studio-projekt. Efter att skriptet är skrivet kan en anslutning göras till databasen för denna frågefil och skriptet kan köras. För mer information om hur du skapar Transact-SQL skript med SQL Server Management Studio, se Query and Text Editors (SQL Server Management Studio).
För att använda ett skript som inkluderar skriptvariabler måste SQL Server Management Studio köras i sqlcmd-läge . I sqlcmd-läge accepterar frågeredigeraren ytterligare syntax specifik för sqlcmd, såsom :setvar, som används till ett värde för en variabel. För mer information om sqlcmd-läge , se Redigera SQLCMD-skript med frågeredigerare. I följande skript :setvar används för att ange ett värde för variabeln $(DistPubServer) .
: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
--
Att använda sqlcmd-verktyget från kommandoraden
Följande exempel visar hur kommandoraden används för att köra instdistpub.sql skriptfilen med hjälp av sqlcmd-verktyget:
sqlcmd.exe -E -S sqlserverinstance -i C:\instdistpub.sql -o C:\output.log -v DistPubServer="N'MyDistributorAndPublisher'"
I detta exempel indikerar switchen -E att Windows-autentisering används vid anslutning till SQL Server. När du använder Windows-autentisering behöver du inte lagra användarnamn och lösenord i skriptfilen. Namnet och sökvägen för skriptfilen specificeras av switchen -i och namnet på utdatafilen anges av switchen -o (utdata från SQL Server skrivs till denna fil istället för konsolen när denna switch används). Verktyget sqlcmd gör det möjligt att skicka skriptvariabler till ett Transact-SQL skript vid körning med hjälp av switchen -v . I detta exempel sqlcmd ersätter varje instans av $(DistPubServer) i skriptet med värdet N'MyDistributorAndPublisher' före exekvering.
Anmärkning
Switchen -X inaktiverar skriptvariabler.
Automatisera uppgifter i en batchfil
Genom att använda en batchfil kan replikeringsadministrationsuppgifter, replikeringssynkroniseringsuppgifter och andra uppgifter automatiseras i samma batchfil. Följande batchfil använder sqlcmd-verktyget för att ta bort och återskapa prenumerationsdatabasen samt lägga till en merge pull-prenumeration. Sedan anropar filen mergeagenten för att synkronisera den nya prenumerationen:
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
Skriptning av vanliga replikeringsuppgifter
Följande är några av de vanligaste replikeringsuppgifterna som kan skriptas med systemlagrade procedurer:
Konfigurera publicering och distribution
Att modifiera förlags- och distributörsfastigheter
Inaktivera publicering och distribution
Skapande av publikationer och definierande artiklar
Radering av publikationer och artiklar
Skapa en pull-prenumeration
Att ändra ett pull-abonnemang
Ta bort en pull-prenumeration
Skapa en push-prenumeration
Att ändra ett push-abonnemang
Radera en push-prenumeration
Synkronisering av en pull-prenumeration