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,则使用 Microsoft SQL Server 实例的数据目录,例如 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL.1\Data
  • [ @data_file=] 'data_file'
    数据库文件的名称。data_file 的数据类型为 nvarchar(255),默认值为 database。如果为 NULL,存储过程将使用数据库名称来构造文件名。
  • [ @data_file_size=] data_file_size
    以兆字节 (MB) 为单位的初始数据文件大小。data_file_size 的数据类型为 int,默认值为 5 MB。
  • [ @log_folder=] 'log_folder'
    数据库日志文件所在目录的名称。log_folder 的数据类型为 nvarchar(255),默认值为 NULL。如果为 NULL,则使用 SQL Server 实例的数据目录(例如 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL.1\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,则需要此项。password 的数据类型为 sysname,默认值为 NULL。
  • [ @createmode=] createmode
    createmode 的数据类型为 int,默认值为 0,可以是下列值之一。

    说明

    0(默认值)

    通过使用分发数据库模型文件 (distmdl.mdf) 的副本附加分发数据库来 CREATE DATABASE

    1

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

    2

    仅限内部使用。

  • [ @from_scripting= ] from_scripting
    仅限内部使用。

返回代码值

0(成功)或 1(失败)

备注

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

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

在运行 sp_adddistributiondb 之前运行 sp_adddistributor

权限

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

示例

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

请参阅

参考

sp_changedistributiondb (Transact-SQL)
sp_dropdistributiondb (Transact-SQL)
sp_helpdistributiondb (Transact-SQL)
系统存储过程 (Transact-SQL)

其他资源

How to: Configure Publishing and Distribution (Replication Transact-SQL Programming)
配置分发

帮助和信息

获取 SQL Server 2005 帮助