sp_adddistributiondb (Transact-SQL)

適用対象: SQL Server Azure SQL Managed Instance

新しいディストリビューション データベースを作成し、ディストリビューター スキーマをインストールします。 ディストリビューション データベースには、レプリケーションで使用されるプロシージャ、スキーマ、およびメタデータが格納されます。 このストアド プロシージャは、ディストリビューション データベースを作成し、レプリケーションディストリビューションを有効にするために必要なテーブルとストアド プロシージャをインストールするために、 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'

作成するディストリビューション データベースの名前。 @databasesysname で、既定値はありません。 指定したデータベースが既に存在し、まだディストリビューション データベースとしてマークされていない場合は、ディストリビューションを有効にするために必要なオブジェクトがインストールされ、データベースはディストリビューション データベースとしてマークされます。 指定したデータベースが、既にディストリビューション データベースとして有効な場合は、エラーが返されます。

[ @data_folder = ] N'data_folder'

ディストリビューション データベース データ ファイルの格納に使用するディレクトリの名前。 @data_foldernvarchar(255) で、既定値は NULL です。 NULL場合、SQL Server のそのインスタンスのデータ ディレクトリが使用されます (たとえば、C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data)。

[ @data_file = ] N'data_file'

データベース ファイルの名前 @data_filenvarchar(255) で、既定値は NULL です。 NULL場合、ストアド プロシージャはデータベース名を使用してファイル名を構築します。

[ @data_file_size = ] data_file_size

初期データ ファイルサイズ (MB)。 @data_file_sizeint で、既定値は 5 (5 MB) です。

[ @log_folder = ] N'log_folder'

データベース ログ ファイルのディレクトリの名前。 @log_foldernvarchar(255) で、既定値は NULL です。 NULL場合、SQL Server のそのインスタンスのデータ ディレクトリが使用されます (たとえば、C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data)。

[ @log_file = ] N'log_file'

ログ ファイルの名前。 @log_filenvarchar(255) で、既定値は NULL です。 NULL場合、ストアド プロシージャはデータベース名を使用してファイル名を構築します。

[ @log_file_size = ] log_file_size

初期ログ ファイルサイズ (MB)。 @log_file_sizeint で、既定値は 0 で、データベース エンジンで許容される最小のログ ファイル サイズを使用してファイルが作成されます。

[ @min_distretention = ] min_distretention

トランザクションがディストリビューション データベースから削除されるまでの最小保有期間 (時間単位)。 @min_distretentionint で、既定値は 0 です。

[ @max_distretention = ] max_distretention

トランザクションが削除されるまでの最大保有期間 (時間単位)。 @max_distretentionint で、既定値は 72 です。 レプリケートされたコマンドを受信しておらず、ディストリビューションの最大保有期間より古いサブスクリプションは非アクティブとしてマークされ、再初期化する必要があります。 非アクティブなサブスクリプションごとにエラー番号 21011 が発行されます。 0の値は、レプリケートされたトランザクションがディストリビューション データベースに格納されていないことを意味します。

[ @history_retention = ] history_retention

履歴を保持する期間 (時間単位)。 @history_retentionint で、既定値は 48 で、これは 2 日間を意味します。

[ @security_mode = ] security_mode

ディストリビューターに接続するときに使用するセキュリティ モード。 @security_modeint で、既定値は 1 です。

  • 0 は SQL Server 認証を指定します
  • 1Windows 認証を指定します

[ @login = ] N'login'

ディストリビューション データベースを作成するためにディストリビューターに接続するときに使用されるログイン名。 @loginsysname で、既定値は NULL です。 @security_mode0 に設定されている場合は、@loginが必要です。

[ @password = ] N'password'

ディストリビューターに接続するときに使用されるパスワード。 @passwordsysname で、既定値は NULL です。 @security_mode0 に設定されている場合は、@passwordが必要です。

[ @createmode = ] createmode

@createmodeint で、次のいずれかの値を指定できます。

Value 説明
0 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
1 (既定) CREATE DATABASE または既存のデータベースを使用し、 instdist.sql ファイルを適用してディストリビューション データベースにレプリケーション オブジェクトを作成します。
2 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。

[ @from_scripting = ] from_scripting

単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。

[ @deletebatchsize_xact = ] deletebatchsize_xact

MSRepl_Transactions テーブルから期限切れのトランザクションをクリーンアップする際に使用するバッチ サイズを指定します。 @deletebatchsize_xactint で、既定値は 5000 です。

適用対象: SQL Server 2012 (11.x) Service Pack 4、SQL Server 2016 (13.x) Service Pack 2、SQL Server 2017 (14.x)、およびそれ以降のバージョン。

[ @deletebatchsize_cmd = ] deletebatchsize_cmd

MSRepl_Commands テーブルから期限切れのコマンドをクリーンアップする際に使用するバッチ サイズを指定します。 @deletebatchsize_cmdint で、既定値は 2000 です。

適用対象: SQL Server 2012 (11.x) Service Pack 4、SQL Server 2016 (13.x) Service Pack 2、SQL Server 2017 (14.x)、およびそれ以降のバージョン。

リターン コードの値

0 (成功) または 1 (失敗)。

解説

sp_adddistributiondb は、すべての種類のレプリケーションで使用されます。 ただし、このストアド プロシージャは、ディストリビューター側でのみ動作します。

sp_adddistributiondbを実行する前に、sp_adddistributorを実行してディストリビューターを構成する必要があります。

sp_adddistributiondbを実行する前に、sp_adddistributorを実行します。

このスクリプトは 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

アクセス許可

sysadmin固定サーバー ロールのメンバーのみがsp_adddistributiondbを実行できます。