sp_adddistributiondb (Transact-SQL)
Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure
Cria um novo banco de dados de distribuição e instala o esquema de Distribuição. O banco de dados de distribuição armazena procedimentos, esquema e metadados usados em replicação. Esse procedimento armazenado é executado no Distribuidor no master
banco de dados para criar o banco de dados de distribuição e instalar as tabelas e os procedimentos armazenados necessários para habilitar a distribuição de replicação.
Convenções de sintaxe de Transact-SQL
Sintaxe
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 ]
[ ; ]
Argumentos
@database [ = ] N'banco de dados'
O nome do banco de dados de distribuição a ser criado. @database é sysname, sem padrão. Se o banco de dados especificado já existir e ainda não estiver marcado como um banco de dados de distribuição, os objetos necessários para habilitar a distribuição serão instalados e o banco de dados será marcado como um banco de dados de distribuição. Se o banco de dados especificado já estiver habilitado como um banco de dados de distribuição, um erro será retornado.
@data_folder [ = ] N'data_folder'
O nome do diretório usado para armazenar o arquivo de dados do banco de dados de distribuição. @data_folder é nvarchar(255), com um padrão de NULL
. Se NULL
, o diretório de dados dessa instância do SQL Server for usado, por exemplo, C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data
.
@data_file [ = ] N'data_file'
O nome do arquivo de banco de dados. @data_file é nvarchar(255), com um padrão de NULL
. Se NULL
, o procedimento armazenado constrói um nome de arquivo usando o nome do banco de dados.
@data_file_size [ = ] data_file_size
O tamanho inicial do arquivo de dados em megabytes (MB). @data_file_size é int, com um padrão de 5
, que é 5 MB.
@log_folder [ = ] N'log_folder'
O nome do diretório do arquivo de log do banco de dados. @log_folder é nvarchar(255), com um padrão de NULL
. Se NULL
, o diretório de dados dessa instância do SQL Server for usado (por exemplo, C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data
).
@log_file [ = ] N'log_file'
O nome do arquivo de log. @log_file é nvarchar(255), com um padrão de NULL
. Se NULL
, o procedimento armazenado constrói um nome de arquivo usando o nome do banco de dados.
@log_file_size [ = ] log_file_size
O tamanho inicial do arquivo de log em megabytes (MB). @log_file_size é int, com um padrão de , que cria o arquivo usando o menor tamanho de arquivo de log permitido pelo Mecanismo de Banco de 0
Dados.
@min_distretention [ = ] min_distretention
O período mínimo de retenção, em horas, antes que as transações sejam excluídas do banco de dados de distribuição. @min_distretention é int, com um padrão de 0
.
@max_distretention [ = ] max_distretention
O período máximo de retenção, em horas, antes que as transações sejam excluídas. @max_distretention é int, com um padrão de 72
. As assinaturas que não receberam comandos replicados e que são mais antigas do que o período máximo de retenção de distribuição são marcadas como inativas e precisam ser reinicializadas. O número de erro 21011 é emitido para cada assinatura inativa. Um valor de significa que as transações replicadas não são armazenadas no banco de 0
dados de distribuição.
@history_retention [ = ] history_retention
O número de horas para retenção do histórico. @history_retention é int, com um padrão de 48
, o que significa dois dias.
@security_mode [ = ] security_mode
O modo de segurança a ser usado ao se conectar ao Distribuidor. @security_mode é int, com um padrão de 1
.
0
especifica a autenticação do SQL Server1
especifica a autenticação do Windows
@login [ = ] N'login'
O nome de logon usado ao se conectar ao Distribuidor para criar o banco de dados de distribuição. @login é sysname, com um padrão de NULL
. @login é necessário se @security_mode estiver definido como 0
.
@password [ = ] N'senha'
A senha usada ao se conectar ao Distribuidor. @password é sysname, com um padrão de NULL
. @password é necessário se @security_mode estiver definido como 0
.
@createmode [ = ] modo de criação
@createmode é int e pode ser um dos valores a seguir.
Valor | Descrição |
---|---|
0 |
Identificado apenas para fins informativos. Não há suporte. A compatibilidade futura não está garantida. |
1 (padrão) |
CREATE DATABASE ou use o banco de dados existente e aplique o instdist.sql arquivo para criar objetos de replicação no banco de dados de distribuição. |
2 |
Identificado apenas para fins informativos. Não há suporte. A compatibilidade futura não está garantida. |
@from_scripting [ = ] from_scripting
Identificado apenas para fins informativos. Não há suporte. A compatibilidade futura não está garantida.
@deletebatchsize_xact [ = ] deletebatchsize_xact
Especifica o tamanho do lote a ser usado durante a limpeza de transações expiradas das MSRepl_Transactions
tabelas. @deletebatchsize_xact é int, com um padrão de 5000
.
Aplica-se a: SQL Server 2012 (11.x) com Service Pack 4, SQL Server 2016 (13.x) com Service Pack 2, SQL Server 2017 (14.x) e versões posteriores.
@deletebatchsize_cmd [ = ] deletebatchsize_cmd
Especifica o tamanho do lote a ser usado durante a limpeza de comandos expirados das MSRepl_Commands
tabelas. @deletebatchsize_cmd é int, com um padrão de 2000
.
Aplica-se a: SQL Server 2012 (11.x) com Service Pack 4, SQL Server 2016 (13.x) com Service Pack 2, SQL Server 2017 (14.x) e versões posteriores.
Valores do código de retorno
0
(sucesso) ou 1
(falha).
Comentários
sp_adddistributiondb
é usado em todos os tipos de replicação. Porém, esse procedimento armazenado só é executado em um distribuidor.
Você deve configurar o distribuidor executando sp_adddistributor antes de executar sp_adddistributiondb
o .
Execute sp_adddistributor
antes de executar sp_adddistributiondb
.
Exemplos
Esse script usa variáveis de script SQLCMD e deve ser executado no modo SQLCMD. As variáveis estão na forma $(MyVariable)
. Para obter informações sobre como usar variáveis de script na linha de comando e no SQL Server Management Studio, consulte Executando scripts de replicação.
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
Permissões
Somente membros da função de servidor fixa sysadmin podem executar sp_adddistributiondb
.