sp_adddistributiondb (Transact-SQL)

创建新的分发数据库并安装分发服务器架构。分发数据库存储过程、架构以及用于复制的元数据。此存储过程在分发服务器的主数据库中执行,以便创建分发数据库并安装启用复制分发所需的表和存储过程。

主题链接图标Transact-SQL 语法约定

语法

sp_adddistributiondb [ @database= ] 'database' 
    [ , [ @data_folder= ] 'data_folder' ] 
    [ , [ @data_file= ] 'data_file' ] 
    [ , [ @data_file_size= ] data_file_size ] 
    [ , [ @log_folder= ] 'log_folder' ] 
    [ , [ @log_file= ] '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= ] 'login' ] 
    [ , [ @password= ] 'password' ] 
    [ , [ @createmode= ] createmode ]
    [ , [ @from_scripting = ] from_scripting ]

参数

  • [ [ @database=] database'
    要创建的分发数据库的名称。database 的数据类型为 sysname,无默认值。如果指定的数据库已经存在并且尚未标记为分发数据库,那么将安装启用分发所需的对象并将数据库标记为分发数据库。如果指定的数据库已经作为分发数据库启用,则返回错误。

  • [ [ @data_folder=] **'**data_folder'
    用于存储分发数据库数据文件的目录的名称。data_folder 的数据类型为 nvarchar(255),默认值为 NULL。如果为 NULL,则使用该 MicrosoftSQL Server 实例的数据目录,例如 C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data。

  • [ [ @data_file=] 'data_file'
    数据库文件的名称。data_file 的数据类型为 nvarchar(255),默认值为 database。如果为 NULL,存储过程将使用数据库名称来构造文件名。

  • [ [ @data_file_size=] data_file_size
    初始数据文件大小,以兆字节 (MB) 为单位。data_file_size 的数据类型为 int,默认值为 5MB。

  • [ [ @log_folder=] 'log_folder'
    数据库日志文件所在目录的名称。log_folder 的数据类型为 nvarchar(255),默认值为 NULL。如果为 NULL,则使用该 SQL Server 实例的数据目录,例如 C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data。

  • [ [ @log_file=] 'log_file'
    日志文件的名称。log_file 的数据类型为 nvarchar(255),默认值为 NULL。如果为 NULL,存储过程将使用数据库名称来构造文件名。

  • [ [ @log_file_size=] log_file_size
    初始日志文件大小,以兆字节 (MB) 为单位。log_file_size 的数据类型为 int,默认值为 0 MB,表示使用 SQL Server 允许的最小日志文件大小创建文件大小。

  • [ [ @min_distretention=] min_distretention
    从分发数据库中删除事务前的最小保持期,以小时为单位。min_distretention 的数据类型为 int,默认值为 0 小时。

  • [ [ @max_distretention=] max_distretention
    删除事务前的最大保持期,以小时为单位。max_distretention 的数据类型为 int,默认值为 72 小时。尚未接收到在最大分发保持期之前复制的命令的订阅将标记为非活动,并需要重新初始化。针对每个非活动订阅发出 RAISERROR 21011。值 0 表示复制的事务没有存储在分发数据库中。

  • [ [ @history_retention=] history_retention
    历史记录的保留时间,以小时为单位。history_retention 的数据类型为 int,默认值为 48 小时。

  • [ [ @security_mode=] security_mode
    连接到分发服务器时使用的安全模式。security_mode 的数据类型为 int,默认值为 1。0 指定 SQL Server 身份验证;1 指定 Windows 集成身份验证。

  • [ [ @login=] 'login'
    连接到分发服务器以创建分发数据库时使用的登录名。如果将 security_mode 设置为 0,则此参数是必需的。login 的数据类型为 sysname,默认值为 NULL。

  • [ [ @password=] 'password'
    连接到分发服务器时使用的密码。如果将 security_mode 设置为 0,则 subscriber_password 是必需的。password 的数据类型为 sysname,默认值为 NULL。

  • [ @createmode=] createmode
    createmode 的数据类型为 int,默认值为 1,可以是下列值之一。

    说明

    0

    标识为仅供参考。 不提供支持。 不保证以后的兼容性。

    1(默认值)

    CREATE DATABASE 或使用现有的数据库,然后应用 instdist.sql 文件在分发数据库中创建复制对象。

    2

    标识为仅供参考。 不提供支持。 不保证以后的兼容性。

  • [ @from_scripting = ] from_scripting
    标识为仅供参考。 不提供支持。 不保证以后的兼容性。

返回代码值

0(成功)或 1(失败)

注释

sp_adddistributiondb 用于所有类型的复制。但是,此存储过程只在分发服务器上运行。

在执行 sp_adddistributiondb 之前,必须执行 sp_adddistributor 来配置分发服务器。

在运行 sp_adddistributiondb 之前运行 sp_adddistributor

示例

-- 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'AdventureWorks'; 

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

权限

只有 sysadmin 固定服务器角色成员才能执行 sp_adddistributiondb