Поделиться через


Основные понятия хранимых процедур системы репликации

В SQL Server программный доступ ко всем пользовательским функциям топологии репликации предоставляется системными хранимыми процедурами. Хотя хранимые процедуры могут выполняться по отдельности с помощью SQL Server Management Studio или служебной программы командной строки sqlcmd, может быть полезно написать файлы скриптов Transact-SQL, которые можно выполнить для выполнения логической последовательности задач репликации.

Задачи репликации сценариев предоставляют следующие преимущества:

  • Сохраняет постоянную копию шагов, используемых для развертывания топологии репликации.

  • Использует один скрипт для настройки нескольких подписчиков.

  • Быстро обучает новых администраторов баз данных, позволяя им оценивать, понимать, изменять или устранять неполадки с кодом.

    Это важно

    Скрипты могут быть источником уязвимостей безопасности; они могут вызывать системные функции без знаний пользователя или вмешательства и содержать учетные данные безопасности в виде обычного текста. Просмотрите сценарии проблем безопасности перед их использованием.

Создание скриптов репликации

С точки зрения репликации скрипт представляет собой ряд из одной или нескольких инструкций Transact-SQL, в которых каждая инструкция выполняет хранимую процедуру репликации. Скрипты — это текстовые файлы, часто с расширением файла .sql, которые можно запускать с помощью служебной программы sqlcmd. При запуске файла скрипта программа выполняет инструкции SQL, хранящиеся в файле. Аналогичным образом скрипт может храниться в качестве объекта запроса в проекте SQL Server Management Studio.

Скрипты репликации можно создавать следующим образом:

  • Вручную создайте скрипт.

  • Используйте функции создания скриптов, предоставляемые в мастерах репликации или

  • SQL Server Management Studio. Дополнительные сведения см. в разделе Scripting Replication.

  • Используйте объекты управления репликацией (RMOs) для программного создания скрипта для создания объекта RMO.

При создании скриптов репликации вручную помните следующее:

  • Transact-SQL скрипты имеют один или несколько пакетов. Команда GO сигнализирует конец пакета. Если скрипт Transact-SQL не имеет команд GO, он выполняется как один пакет.

  • При выполнении нескольких хранимых процедур репликации в одном пакете после первой процедуры все последующие процедуры в пакете должны предшествовать ключевому слову EXECUTE.

  • Все хранимые процедуры в пакете должны компилироваться перед выполнением пакета. Однако после компиляции пакета и создания плана выполнения может возникнуть ошибка во время выполнения.

  • При создании скриптов для настройки репликации следует использовать проверку подлинности Windows, чтобы избежать хранения учетных данных безопасности в файле скрипта. В случае необходимости хранения учетных данных в файле скрипта этот файл следует защищать во избежание несанкционированного доступа.

Пример скрипта репликации

Следующий скрипт можно выполнить для настройки публикации и распространения на сервере.

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

Затем этот скрипт можно сохранить локально, instdistpub.sql чтобы его можно было запустить или повторно запустить при необходимости.

Предыдущий скрипт включает переменные скриптов sqlcmd , которые используются во многих примерах кода репликации в электронной документации ПО SQL Server. Переменные скриптов определяются с помощью $(MyVariable) синтаксиса. Значения переменных можно передать в скрипт в командной строке или в СРЕДЕ SQL Server Management Studio. Дополнительные сведения см. в следующем разделе статьи "Выполнение скриптов репликации".

Выполнение скриптов репликации

После создания скрипт репликации можно выполнить одним из следующих способов:

Создание файла SQL-запроса в СРЕДЕ SQL Server Management Studio

Файл скрипта репликации Transact-SQL можно создать в виде файла SQL Query в проекте SQL Server Management Studio. После записи скрипта можно подключиться к базе данных для этого файла запроса и выполнить скрипт. Дополнительные сведения о создании скриптов Transact-SQL с помощью SQL Server Management Studio см. в статьях "Редакторы запросов и текста" (SQL Server Management Studio)).

Чтобы использовать скрипт, включающий переменные скрипта, среда SQL Server Management Studio должна работать в режиме sqlcmd . В режиме sqlcmd редактор запросов принимает дополнительный синтаксис, характерный для sqlcmd, например :setvar, который используется для значения переменной. Дополнительные сведения о режиме sqlcmd см. в разделе "Изменение скриптов SQLCMD с помощью редактора запросов". В следующем скрипте :setvar используется для предоставления значения переменной $(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  
--  

Использование программы sqlcmd из командной строки

В следующем примере показано, как командная строка используется для выполнения instdistpub.sql файла скрипта с помощью служебной программы sqlcmd:

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

В этом примере параметр указывает, -E что при подключении к SQL Server используется проверка подлинности Windows. При использовании проверки подлинности Windows не требуется хранить имя пользователя и пароль в файле скрипта. Имя и путь к файлу скрипта указывается -i параметром, а имя выходного файла указывается -o параметром (выходные данные SQL Server записываются в этот файл вместо консоли при использовании этого параметра). Служебная sqlcmd программа позволяет передавать переменные скрипта в скрипт Transact-SQL во время выполнения с помощью коммутатора -v . В этом примере sqlcmd заменяет каждый экземпляр $(DistPubServer) скрипта значением N'MyDistributorAndPublisher' перед выполнением.

Замечание

Параметр -X отключает переменные скрипта.

Автоматизация задач в пакетном файле

С помощью пакетного файла задачи администрирования репликации, задач синхронизации репликации и других задач можно автоматизировать в одном пакетном файле. Следующий пакетный файл использует служебную программу sqlcmd для удаления и повторного создания базы данных подписки на подписку на слияние. Затем файл вызывает агент слияния для синхронизации новой подписки:

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

Сценарии распространенных задач репликации

Ниже приведены некоторые из наиболее распространенных задач репликации с помощью системных хранимых процедур:

  • Настройка публикации и распространения

  • Изменение свойств издателя и распространителя

  • Отключение публикации и распространения

  • Создание публикаций и определение статей

  • Удаление публикаций и статей

  • Создание подписки на вытягивание

  • Изменение подписки на вытягивание

  • Удаление подписки по запросу

  • Создание принудительной подписки

  • Изменение принудительной подписки

  • Удаление принудительной подписки

  • Синхронизация подписки по запросу

См. также

Основные понятия программирования репликации
Хранимые процедуры репликации (Transact-SQL)
Репликация скриптов