Compartir vía


sp_adddistributiondb (Transact-SQL)

Se aplica a: SQL Server Azure SQL Instancia administrada

Crea una nueva base de datos de distribución e instala el esquema del distribuidor. La base de datos de distribución almacena los procedimientos, esquema y metadatos utilizados en la replicación. Este procedimiento almacenado se ejecuta en el distribuidor de la master base de datos para crear la base de datos de distribución e instalar las tablas y procedimientos almacenados necesarios para habilitar la distribución de replicación.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Nombre de la base de datos de distribución que se va a crear. @database es sysname, sin ningún valor predeterminado. Si la base de datos especificada ya existe y no está marcada como una base de datos de distribución, se instalan los objetos necesarios para habilitar la distribución y la base de datos se marca como una base de datos de distribución. Si la base de datos especificada ya está habilitada como base de datos de distribución, se obtiene un error.

[ @data_folder = ] N'data_folder'

Nombre del directorio usado para almacenar el archivo de datos de la base de datos de distribución. @data_folder es nvarchar(255), con un valor predeterminado de NULL. Si NULLes , se usa el directorio de datos de esa instancia de SQL Server, por ejemplo, C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data.

[ @data_file = ] N'data_file'

Nombre del archivo de base de datos. @data_file es nvarchar(255), con un valor predeterminado de NULL. Si NULLes , el procedimiento almacenado crea un nombre de archivo con el nombre de la base de datos.

[ @data_file_size = ] data_file_size

Tamaño inicial del archivo de datos en megabytes (MB). @data_file_size es int, con un valor predeterminado de 5, que es de 5 MB.

[ @log_folder = ] N'log_folder'

Nombre del directorio del archivo de registro de base de datos. @log_folder es nvarchar(255), con un valor predeterminado de NULL. Si NULLes , se usa el directorio de datos de esa instancia de SQL Server (por ejemplo, C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data).

[ @log_file = ] N'log_file'

El nombre del archivo de registro. @log_file es nvarchar(255), con un valor predeterminado de NULL. Si NULLes , el procedimiento almacenado crea un nombre de archivo con el nombre de la base de datos.

[ @log_file_size = ] log_file_size

Tamaño inicial del archivo de registro en megabytes (MB). @log_file_size es int, con un valor predeterminado de 0, que crea el archivo con el tamaño de archivo de registro más pequeño permitido por el Motor de base de datos.

[ @min_distretention = ] min_distretention

El período de retención mínimo, en horas, antes de que las transacciones se eliminen de la base de datos de distribución. @min_distretention es int, con un valor predeterminado de 0.

[ @max_distretention = ] max_distretention

El período máximo de retención, en horas, antes de que se eliminen las transacciones. @max_distretention es int, con un valor predeterminado de 72. Las suscripciones que no han recibido comandos replicados y que son anteriores al período máximo de retención de distribución, se marcan como inactivas y deben reinicializarse. El número de error 21011 se emite para cada suscripción inactiva. Un valor de 0 significa que las transacciones replicadas no se almacenan en la base de datos de distribución.

[ @history_retention = ] history_retention

El número de horas que se mantiene el historial. @history_retention es int, con un valor predeterminado de 48, lo que significa dos días.

[ @security_mode = ] security_mode

Modo de seguridad que se va a usar al conectarse al distribuidor. @security_mode es int, con un valor predeterminado de 1.

  • 0 especifica la autenticación de SQL Server.
  • 1especifica autenticación de Windows

[ @login = ] N'login'

Nombre de inicio de sesión usado al conectarse al distribuidor para crear la base de datos de distribución. @login es sysname, con un valor predeterminado de NULL. @login es necesario si @security_mode está establecido 0en .

[ @password = ] N'password'

Contraseña usada al conectarse al distribuidor. @password es sysname, con un valor predeterminado de NULL. @password es necesario si @security_mode está establecido 0en .

[ @createmode = ] createmode

@createmode es int y puede ser uno de los siguientes valores.

Valor Descripción
0 Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.
1 (valor predeterminado) CREATE DATABASE o use la base de datos existente y, a continuación, aplique el instdist.sql archivo para crear objetos de replicación en la base de datos de distribución.
2 Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.

[ @from_scripting = ] from_scripting

Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.

[ @deletebatchsize_xact = ] deletebatchsize_xact

Especifica el tamaño del lote que se va a usar durante la limpieza de transacciones expiradas de las MSRepl_Transactions tablas. @deletebatchsize_xact es int, con un valor predeterminado de 5000.

Se aplica a: SQL Server 2012 (11.x) con Service Pack 4, SQL Server 2016 (13.x) con Service Pack 2, SQL Server 2017 (14.x) y versiones posteriores.

[ @deletebatchsize_cmd = ] deletebatchsize_cmd

Especifica el tamaño del lote que se va a usar durante la limpieza de comandos expirados de las MSRepl_Commands tablas. @deletebatchsize_cmd es int, con un valor predeterminado de 2000.

Se aplica a: SQL Server 2012 (11.x) con Service Pack 4, SQL Server 2016 (13.x) con Service Pack 2, SQL Server 2017 (14.x) y versiones posteriores.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Comentarios

sp_adddistributiondb se usa en todos los tipos de replicación. Sin embargo, este procedimiento almacenado se ejecuta únicamente en un distribuidor.

Debe configurar el distribuidor ejecutando sp_adddistributor antes de sp_adddistributiondbejecutar .

Ejecute sp_adddistributor antes de ejecutar sp_adddistributiondb.

Ejemplos

Este script usa variables de scripting sqlCMD y debe ejecutarse en modo SQLCMD. Las variables están en el formato $(MyVariable). Para obtener información sobre cómo usar variables de scripting en la línea de comandos y en SQL Server Management Studio, consulte Ejecución de scripts de replicación.

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

Permisos

Solo los miembros del rol fijo de servidor sysadmin pueden ejecutar sp_adddistributiondb.