Replikációs rendszer tárolt eljárások fogalmak

A következőkre vonatkozik:SQL ServerAzure SQL Managed Instance

Az SQL Serverben a replikációs topológiában a felhasználó által konfigurálható funkciókhoz a rendszerben tárolt eljárások biztosítják a programozott hozzáférést. Bár a tárolt eljárásokat egyénileg is végrehajthatják az SQL Server Management Studio vagy a sqlcmd parancssor segédprogram segítségével, hasznos lehet Transact-SQL szkriptfájlt írni, amelyek logikus replikációs feladatok végrehajtásához alkalmasak.

A szkriptreplikációs feladatok a következő előnyöket kínálják:

  • Állandó másolatot tart a replikációs topológiád telepítéséhez használt lépésekről.

  • Egyetlen szkripttel konfigurál több előfizetőt.

  • Gyorsan oktatja az új adatbázis-adminisztrátorokat azzal, hogy lehetővé teszi számukra, hogy értékeljenek, megértsék, módosítsák vagy hibakeresést végezzenek.

    Fontos

    A szkriptek lehetnek a biztonsági sebezhetőségek forrása; Felhasználói tudta vagy beavatkozás nélkül is megidézhetik a rendszerfunkciókat, és tartalmazhatnak biztonsági hitelesítéseket egyszerű szövegben. Nézd át a szkripteket biztonsági problémák miatt, mielőtt használnád őket.

Replikációs szkriptek létrehozása

A replikáció szempontjából a szkript egy vagy több Transact-SQL utasításból álló sorozat, ahol minden utasítás egy replikáció által tárolt eljárást hajt végre. A szkriptek szövegfájlok, gyakran .sql fájlkiterjesztéssel, amelyeket a sqlcmd segédeszközzel futtathatnak. Amikor egy szkriptfájlt futtatnak, a segédprogram végrehajtja a fájlban tárolt SQL utasításokat. Hasonlóképpen, egy szkript is letárolódhat lekérdezési objektumként egy SQL Server Management Studio projektben.

Replikációs szkriptek a következő módokon hozhatók létre:

  • Készítsd el kézzel a scriptet.

  • Használd a replikációs varázslatokban elérhető szkriptgenerálási funkciókat vagy

  • SQL Server Management Studio. További információért lásd: Szkriptreplikáció.

  • Használd a replikációs menedzsment objektumokat (RMO-kat) a programozott módon generálni a szkriptet, amely RMO objektumot hozhat létre.

Amikor manuálisan hozol létre replikációs szkripteket, tartsd szem előtt a következő szempontokat:

  • Transact-SQL szkripteknek egy vagy több tétele van. A GO parancs jelzi a batch végét. Ha egy Transact-SQL szkriptnek nincs GO parancsa, akkor egyetlen tételként fut le.

  • Amikor több replikációs tárolt eljárást hajtanak végre egyetlen kötetben, az első eljárás után az összes későbbi eljárást előznek kell előznie a EXECUTE kulcsszónak.

  • Minden tárolt eljárás egy batchben kompilyálnia kell, mielőtt egy batch végrehajtható. Azonban, miután a batch lefordított, és végrehajtási terv létrejött, előfordulhat, hogy futásidejű hiba előfordulhat, vagy nem.

  • Replikáció konfigurálásához szkriptek készítésekor a Windows hitelesítést kell használni, hogy elkerüld a biztonsági hitelesítő adatok tárolását a szkriptfájlban. Ha szkriptfájlban kell tárolnia a hitelesítő adatokat, a jogosulatlan hozzáférés megakadályozása érdekében biztonságossá kell tennie a fájlt.

Sample replikációs szkript

Az alábbi szkript futtatható a publikálás és terjesztés beállításához egy szerveren.

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

Ezt a szkriptet aztán helyben lehet elmenteni, instdistpub.sql hogy szükség esetén futtatható vagy újra futtatható legyen.

Az előző szkript tartalmaz sqlcmd szkriptváltozókat, amelyeket sok replikációs kód mintában használnak az SQL Server Books Online-ban. A szkriptváltozókat szintaxis $(MyVariable) segítségével definiálják. A változók értékei átadhatók egy szkriptnek a parancssorban vagy az SQL Server Management Studio-ban. További információért lásd a téma következő szakaszát, "Replikációs szkriptek végrehajtásá".

Replikációs szkriptek végrehajtása

Miután létrehozták, a replikációs szkript az alábbi módok egyikén is végrehajtható:

SQL lekérdezésfájl létrehozása az SQL Server Management Studio-ban

Egy replikációs Transact-SQL szkriptfájl SQL Query fájlként létrehozható SQL Server Management Studio projektben. A szkript megírása után kapcsolatot lehet létrehozni az adatbázissal ehhez a lekérdezési fájlhoz, és a szkript futtatható. További információért az SQL Server Management Studio használatával Transact-SQL szkriptek létrehozásáról lásd a Query and Text Editors (SQL Server Management Studio) oldalt.

Szkriptelési változókat tartalmazó szkript használatához az SQL Server Management Studiónak SQLCMD módban kell futnia. SQLCMD módban a Lekérdezésszerkesztő további, az sqlcmdre jellemző szintaxist fogad el, például :setvaregy változó értékéhez használt szintaxist. További információ az SQLCMD módról: SQLCMD-szkriptek szerkesztése a Lekérdezésszerkesztővel. A következő szkriptben :setvar a változó értékének $(DistPubServer) megadására szolgál.

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

A sqlcmd segédeszköz használata a parancssorból

Az alábbi példa bemutatja, hogyan használják a parancssort a szkriptfájl futtatására instdistpub.sql a sqlcmd segédeszközzel:

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

Ebben a példában a -E switch azt jelzi, hogy Windows hitelesítést használnak az SQL Serverhez való csatlakozáskor. Windows hitelesítés esetén nincs szükség felhasználónévre és jelszóra a szkriptfájlban. A szkriptfájl nevét és útját a -i switch határozza meg, a kimeneti fájl nevét pedig a -o switch határozza meg (az SQL Server kimenete erre a fájlra kerül, nem a konzolra, amikor ezt a kapcsolót használják). A sqlcmd segédprogram lehetővé teszi, hogy a switch-rel futás közben -v a szkriptváltozókat továbbítsd egy Transact-SQL szkripthez. Ebben a példában sqlcmd minden példányt $(DistPubServer) a szkriptben a végrehajtás előtti értékre N'MyDistributorAndPublisher' cserélünk.

Megjegyzés:

A -X kapcsoló letiltja a szkriptváltozókat.

Feladatok automatizálása egy batch fájlban

A batch fájl használatával a replikáció adminisztrációs feladatok, replikációs szinkronizációs feladatok és egyéb feladatok automatizálhatók ugyanabban a batch fájlban. A következő batch fájl a sqlcmd segédprogramot használja az előfizetéses adatbázis leépítésére és újralétrehozására, valamint egy merge pull előfizetés hozzáadására. Ezután a fájl meghívja az egyesítő ügynököt, hogy szinkronizálja az új előfizetést:

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  
  

Gyakori replikációs feladatok szkriptjei

Az alábbiakban néhány gyakoribb replikációs feladat található, amelyeket rendszerben tárolt eljárásokkal lehet szkriptelni:

  • Kiadás és terjesztés konfigurálása

  • Kiadói és forgalmazó tulajdonságok módosítása

  • Kiadás és terjesztés letiltása

  • Publikációk készítése és cikkek meghatározása

  • Publikációk és cikkek törlése

  • Pull előfizetés létrehozása

  • Pull előfizetés módosítása

  • Pull előfizetés törlése

  • Push előfizetés létrehozása

  • Push előfizetés módosítása

  • Push előfizetés törlése

  • A pull előfizetés szinkronizálása