Begrepp för lagrade procedurer i replikationssystemet

gäller för:SQL ServerAzure 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