sp_adddistributiondb (Transact-SQL)
Область применения: SQL Server Управляемый экземпляр SQL Azure
Создает новую базу данных распространителя и устанавливает схему Distributor. В базе данных распространителя хранятся процедуры, схема и метаданные, используемые при репликации. Эта хранимая процедура выполняется на распространителю базы master
данных для создания базы данных распространителя и установки необходимых таблиц и хранимых процедур, необходимых для включения распределения репликации.
Соглашения о синтаксисе Transact-SQL
Синтаксис
sp_adddistributiondb
[ @database = ] N'database'
[ , [ @data_folder = ] N'data_folder' ]
[ , [ @data_file = ] N'data_file' ]
[ , [ @data_file_size = ] data_file_size ]
[ , [ @log_folder = ] N'log_folder' ]
[ , [ @log_file = ] N'log_file' ]
[ , [ @log_file_size = ] log_file_size ]
[ , [ @min_distretention = ] min_distretention ]
[ , [ @max_distretention = ] max_distretention ]
[ , [ @history_retention = ] history_retention ]
[ , [ @security_mode = ] security_mode ]
[ , [ @login = ] N'login' ]
[ , [ @password = ] N'password' ]
[ , [ @createmode = ] createmode ]
[ , [ @from_scripting = ] from_scripting ]
[ , [ @deletebatchsize_xact = ] deletebatchsize_xact ]
[ , [ @deletebatchsize_cmd = ] deletebatchsize_cmd ]
[ ; ]
Аргументы
[ @database = ] N'database'
Имя создаваемой базы данных распространителя. @database — sysname без значения по умолчанию. Если указанная база данных уже существует и еще не помечена как база данных распространителя, устанавливаются объекты, необходимые для включения распределения, и база данных помечается как база данных распространителя. Если указанная база данных уже включена как база данных распространителя, то возвращается сообщение об ошибке.
[ @data_folder = ] N'data_folder'
Имя каталога, используемого для хранения файла данных базы данных распространителя. @data_folder — nvarchar(255) с значением по умолчаниюNULL
. Если NULL
каталог данных для этого экземпляра SQL Server используется, например C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data
.
[ @data_file = ] N'data_file'
Имя файла базы данных. @data_file — nvarchar(255) с значением по умолчаниюNULL
. Если NULL
хранимая процедура создает имя файла с помощью имени базы данных.
[ @data_file_size = ] data_file_size
Исходный размер файла данных в мегабайтах (МБ). @data_file_size имеет значение int, при этом значение по умолчанию 5
равно 5 МБ.
[ @log_folder = ] N'log_folder'
Имя каталога для файла журнала базы данных. @log_folder — nvarchar(255) с значением по умолчаниюNULL
. Если NULL
каталог данных для этого экземпляра SQL Server используется (например, C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data
).
[ @log_file = ] N'log_file'
Имя файла журнала. @log_file — nvarchar(255) с значением по умолчаниюNULL
. Если NULL
хранимая процедура создает имя файла с помощью имени базы данных.
[ @log_file_size = ] log_file_size
Исходный размер файла журнала в мегабайтах (МБ). @log_file_size имеет значение int, при этом по умолчанию 0
создается файл с использованием наименьшего размера файла журнала, разрешенного ядро СУБД.
[ @min_distretention = ] min_distretention
Минимальный период хранения в часах перед удалением транзакций из базы данных распространителя. @min_distretention имеет значение int с значением по умолчанию0
.
[ @max_distretention = ] max_distretention
Максимальный период хранения в часах перед удалением транзакций. @max_distretention имеет значение int с значением по умолчанию72
. Подписки, которые не получили реплицированных команд, и которые старше максимального периода хранения дистрибутива, помечаются как неактивные и должны быть повторно инициализированы. Номер ошибки 21011 выдан для каждой неактивной подписки. Значение 0
означает, что реплицированные транзакции не хранятся в базе данных распространителя.
[ @history_retention = ] history_retention
Число часов хранения журнала. @history_retention имеет значение int с значением по умолчанию48
, что означает два дня.
[ @security_mode = ] security_mode
Режим безопасности, используемый при подключении к распространителю. @security_mode имеет значение int с значением по умолчанию1
.
0
указывает проверку подлинности SQL Server1
указывает проверка подлинности Windows
[ @login = ] N'login'
Имя входа, используемое при подключении к распространителю для создания базы данных распространителя. @login имеет имя sysname с значением по умолчаниюNULL
. @login требуется, если для @security_mode задано значение 0
.
[ @password = ] N'password'
Пароль, используемый при подключении к распространителю. @password — sysname с значением по умолчаниюNULL
. @password требуется, если для @security_mode задано значение 0
.
[ @createmode = ] createmode
@createmode является int и может быть одним из следующих значений.
значение | Описание |
---|---|
0 |
Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется. |
1 (по умолчанию) |
CREATE DATABASE или используйте существующую базу данных, а затем примените instdist.sql файл для создания объектов репликации в базе данных распространителя. |
2 |
Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется. |
[ @from_scripting = ] from_scripting
Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.
[ @deletebatchsize_xact = ] deletebatchsize_xact
Указывает размер пакета, используемый во время очистки истекших транзакций из MSRepl_Transactions
таблиц. @deletebatchsize_xact имеет значение int с значением по умолчанию5000
.
Область применения: SQL Server 2012 (11.x) с пакетом обновления 4, SQL Server 2016 (13.x) с пакетом обновления 2, SQL Server 2017 (14.x) и более поздними версиями.
[ @deletebatchsize_cmd = ] deletebatchsize_cmd
Указывает размер пакета, используемый во время очистки истекших команд из MSRepl_Commands
таблиц. @deletebatchsize_cmd имеет значение int с значением по умолчанию2000
.
Область применения: SQL Server 2012 (11.x) с пакетом обновления 4, SQL Server 2016 (13.x) с пакетом обновления 2, SQL Server 2017 (14.x) и более поздними версиями.
Значения кода возврата
0
(успешно) или 1
(сбой).
Замечания
sp_adddistributiondb
используется во всех типах репликации. Однако эта хранимая процедура может выполняться только на стороне распространителя.
Перед выполнением sp_adddistributiondb
необходимо настроить распространитель, выполнив sp_adddistributor.
Запуск sp_adddistributor
перед выполнением sp_adddistributiondb
.
Примеры
Этот скрипт использует переменные скрипта SQLCMD и должен выполняться в режиме SQLCMD. Переменные находятся в форме $(MyVariable)
. Сведения об использовании переменных скриптов в командной строке и в СРЕДЕ SQL Server Management Studio см. в разделе "Выполнение скриптов репликации".
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
Разрешения
Могут выполняться sp_adddistributiondb
только члены предопределенных ролей сервера sysadmin.