Sdílet prostřednictvím


Koncepty uložených procedur v replikačních systémech

platí pro:SQL Serverazure SQL Managed Instance

V SQL Serveru je programový přístup ke všem uživatelsky konfigurovatelným funkcím v replikační topologii zajištěn systémově uloženými procedurami. Ačkoliv uložené procedury lze vykonávat jednotlivě pomocí SQL Server Management Studio nebo příkazového nástroje sqlcmd, může být užitečné napsat Transact-SQL skriptové soubory, které lze spustit pro provádění logické sekvence replikačních úloh.

Skriptovací replikační úkoly přinášejí následující výhody:

  • Uchovává trvalou kopii kroků použitých k nasazení vaší replikační topologie.

  • Používá jeden skript pro konfiguraci více předplatitelů.

  • Rychle vzdělává nové správce databází tím, že jim umožňuje vyhodnotit, pochopit, změnit nebo řešit problémy s kódem.

    Důležité

    Skripty mohou být zdrojem bezpečnostních zranitelností; Mohou vyvolávat systémové funkce bez vědomí uživatele nebo zásahu a mohou obsahovat bezpečnostní přihlašovací údaje v prostém textu. Před použitím si skripty zkontrolujte kvůli bezpečnostním problémům.

Vytváření replikačních skriptů

Z hlediska replikace je skript sérií jednoho nebo více Transact-SQL příkazů, kde každý příkaz vykonává uloženou replikační proceduru. Skripty jsou textové soubory, často s příponou .sql, které lze spustit pomocí nástroje sqlcmd. Když je skriptový soubor spuštěn, nástroj vykoná SQL příkazy uložené v souboru. Podobně může být skript uložen jako dotazovací objekt v projektu SQL Server Management Studio.

Replikační skripty lze vytvářet následujícími způsoby:

  • Ručně vytvořte skript.

  • Použijte funkce generování skriptů, které jsou k dispozici v replikačních wizards, nebo

  • SQL Server Management Studio. Pro více informací viz Replikace skriptování.

  • Použijte objekty správy replikace (RMO) k programovému vygenerování skriptu pro vytvoření objektu RMO.

Při ručním vytváření replikačních skriptů mějte na paměti následující faktory:

  • Transact-SQL scénáře mají jednu nebo více šarží. Příkaz GO signalizuje konec várky. Pokud Transact-SQL skript nemá žádné příkazy GO, vykoná se jako jedna dávka.

  • Při provádění více uložených procedur v replicaci v jedné dávce musí být po první procedurě všechny následující procedury v dávce předcházeno klíčovým slovem EXEKUC.

  • Všechny uložené procedury v dávce se musí zkompilovat, než se dávka spustí. Jakmile je však batch zkompilován a vytvořen plán vykonání, může dojít k chybě za běhu nebo ne.

  • Při vytváření skriptů pro konfiguraci replikace byste měli použít Windows Authentication, abyste se vyhnuli ukládání bezpečnostních údajů do skriptového souboru. Pokud musíte přihlašovací údaje uložit do souboru skriptu, musíte ho zabezpečit, abyste zabránili neoprávněnému přístupu.

Ukázkový replikační skript

Následující skript lze spustit pro nastavení publikování a distribuce na serveru.

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

Tento skript lze pak uložit lokálně, instdistpub.sql aby mohl být spuštěn nebo znovu spuštěn podle potřeby.

Předchozí skript obsahuje skriptovací proměnné sqlcmd , které se používají v mnoha ukázkách replikačního kódu v SQL Server Books Online. Skriptovací proměnné jsou definovány pomocí $(MyVariable) syntaxe. Hodnoty proměnných lze předávat skriptu v příkazovém řádku nebo ve SQL Server Management Studio. Pro více informací viz další část tohoto tématu, "Provádění replikačních skriptů."

Provádění replikačních skriptů

Jakmile je replikační skript vytvořen, lze ho spustit jedním z následujících způsobů:

Vytváření SQL dotazového souboru ve SQL Server Management Studio

Replikační Transact-SQL skriptový soubor lze vytvořit jako SQL Query soubor v projektu SQL Server Management Studio. Po napsání skriptu lze navázat spojení s databází pro tento dotazovací soubor a skript může být vykonán. Pro více informací o tom, jak vytvářet Transact-SQL skripty pomocí SQL Server Management Studio, viz Query and Text Editors (SQL Server Management Studio).

Pro použití skriptu, který obsahuje skriptovací proměnné, musí SQL Server Management Studio běžet v režimu sqlcmd . V režimu sqlcmd editor dotazů přijímá další syntaxi specifickou pro sqlcmd, například :setvar, která se používá pro hodnotu proměnné. Pro více informací o režimu sqlcmd viz Upravit skripty sqlcmd pomocí Query Editor. V následujícím skriptu se používá k :setvar vytvoření hodnoty proměnné $(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  
--  

Použití utility sqlcmd z příkazové řádky

Následující příklad ukazuje, jak se příkazový řádek používá k vykonání instdistpub.sql skriptového souboru pomocí utility sqlcmd:

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

V tomto příkladu -E switch označuje, že při připojení ke SQL Serveru se používá Windows Authentication. Při použití Windows Authentication není potřeba ukládat uživatelské jméno a heslo do skriptového souboru. Název a cesta skriptového souboru jsou určeny -i přepínačem a název výstupního souboru je určen -o přepínačem (výstup ze SQL Serveru je zapsán do tohoto souboru místo do konzole, když je tento přepínač použit). Nástroj sqlcmd umožňuje předávat skriptovací proměnné Transact-SQL skriptu za běhu pomocí switche -v . V tomto příkladu sqlcmd se každá instance ve $(DistPubServer) skriptu nahradí hodnotou N'MyDistributorAndPublisher' před vykonáním.

Poznámka:

Switch -X deaktivuje skriptovací proměnné.

Automatizace úloh v dávkovém souboru

Použitím dávkového souboru lze automatizovat administrační úkoly replikace, synchronizaci replikace a další úkoly ve stejném dávkovém souboru. Následující dávkový soubor používá utilitu sqlcmd k vytvoření a znovuvytvoření databáze předplatného a přidání merge pull předplatného. Poté soubor vyvolá merge agent, aby synchronizoval nové předplatné:

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  
  

Skriptování běžných replikačních úloh

Následující jsou některé z nejběžnějších replikačních úloh, které lze skriptovat pomocí systémových uložených procedur:

  • Konfigurace vydávání a distribuce

  • Úprava vlastností vydavatele a distributora

  • Znemožnění vydávání a distribuce

  • Vytváření publikací a definování článků

  • Mazání publikací a článků

  • Vytváření pull předplatného

  • Úprava pull předplatného

  • Smazání pull předplatného

  • Vytvoření push předplatného

  • Úprava push předplatného

  • Smazání push předplatného

  • Synchronizace pull předplatného