Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В 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)
Репликация скриптов