sp_adddistributiondb (T-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Membuat database distribusi baru dan menginstal skema Distributor. Database distribusi menyimpan prosedur, skema, dan metadata yang digunakan dalam replikasi. Prosedur tersimpan ini dijalankan di Distributor pada master database untuk membuat database distribusi, dan menginstal tabel yang diperlukan dan prosedur tersimpan yang diperlukan untuk mengaktifkan distribusi replikasi.

Konvensi sintaks transact-SQL

Sintaks

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 ]
[ ; ]

Argumen

[ @database = ] N'database'

Nama database distribusi yang akan dibuat. @database adalah sysname, tanpa default. Jika database yang ditentukan sudah ada dan belum ditandai sebagai database distribusi, maka objek yang diperlukan untuk mengaktifkan distribusi diinstal, dan database ditandai sebagai database distribusi. Jika database yang ditentukan sudah diaktifkan sebagai database distribusi, kesalahan akan ditampilkan.

[ @data_folder = ] N'data_folder'

Nama direktori yang digunakan untuk menyimpan file data database distribusi. @data_folder adalah nvarchar(255), dengan default NULL. Jika NULL, direktori data untuk instans SQL Server tersebut digunakan, misalnya, C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data.

[ @data_file = ] N'data_file'

Nama file database. @data_file adalah nvarchar(255), dengan default NULL. Jika NULL, prosedur tersimpan membuat nama file menggunakan nama database.

[ @data_file_size = ] data_file_size

Ukuran file data awal dalam megabyte (MB). @data_file_size int, dengan default 5, yaitu 5 MB.

[ @log_folder = ] N'log_folder'

Nama direktori untuk file log database. @log_folder adalah nvarchar(255), dengan default NULL. Jika NULL, direktori data untuk instans SQL Server tersebut digunakan (misalnya, C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data).

[ @log_file = ] N'log_file'

Nama file log. @log_file adalah nvarchar(255), dengan default NULL. Jika NULL, prosedur tersimpan membuat nama file menggunakan nama database.

[ @log_file_size = ] log_file_size

Ukuran file log awal dalam megabyte (MB). @log_file_size int, dengan default 0, yang membuat file menggunakan ukuran file log terkecil yang diizinkan oleh Mesin Database.

[ @min_distretention = ] min_distretention

Periode retensi minimum, dalam jam, sebelum transaksi dihapus dari database distribusi. @min_distretention int, dengan default 0.

[ @max_distretention = ] max_distretention

Periode retensi maksimum, dalam jam, sebelum transaksi dihapus. @max_distretention int, dengan default 72. Langganan yang belum menerima perintah yang direplikasi, dan yang lebih lama dari periode retensi distribusi maksimum, ditandai sebagai tidak aktif dan perlu diinisialisasi ulang. Nomor kesalahan 21011 dikeluarkan untuk setiap langganan yang tidak aktif. Nilai 0 berarti bahwa transaksi yang direplikasi tidak disimpan dalam database distribusi.

[ @history_retention = ] history_retention

Jumlah jam untuk mempertahankan riwayat. @history_retention int, dengan default 48, yang berarti dua hari.

[ @security_mode = ] security_mode

Mode keamanan yang digunakan saat menyambungkan ke Distributor. @security_mode int, dengan default 1.

  • 0 menentukan autentikasi SQL Server
  • 1 menentukan autentikasi Windows

[ @login = ] N'login'

Nama login yang digunakan saat menyambungkan ke Distributor untuk membuat database distribusi. @login adalah sysname, dengan default NULL. @login diperlukan jika @security_mode diatur ke 0.

[ @password = ] N'password'

Kata sandi yang digunakan saat menyambungkan ke Distributor. @password adalah sysname, dengan default NULL. @password diperlukan jika @security_mode diatur ke 0.

[ @createmode = ] createmode

@createmode int, dan bisa menjadi salah satu nilai berikut.

Nilai Deskripsi
0 Diidentifikasi hanya untuk tujuan informasi. Tidak didukung. Kompatibilitas di masa mendatang tidak dijamin.
1 (default) CREATE DATABASE atau gunakan database yang sudah ada lalu terapkan instdist.sql file untuk membuat objek replikasi dalam database distribusi.
2 Diidentifikasi hanya untuk tujuan informasi. Tidak didukung. Kompatibilitas di masa mendatang tidak dijamin.

[ @from_scripting = ] from_scripting

Diidentifikasi hanya untuk tujuan informasi. Tidak didukung. Kompatibilitas di masa mendatang tidak dijamin.

[ @deletebatchsize_xact = ] deletebatchsize_xact

Menentukan ukuran batch yang akan digunakan selama pembersihan transaksi kedaluwarsa MSRepl_Transactions dari tabel. @deletebatchsize_xact int, dengan default 5000.

Berlaku untuk: SQL Server 2012 (11.x) dengan Paket Layanan 4, SQL Server 2016 (13.x) dengan Paket Layanan 2, SQL Server 2017 (14.x), dan versi yang lebih baru.

[ @deletebatchsize_cmd = ] deletebatchsize_cmd

Menentukan ukuran batch yang akan digunakan selama pembersihan perintah kedaluwarsa MSRepl_Commands dari tabel. @deletebatchsize_cmd int, dengan default 2000.

Berlaku untuk: SQL Server 2012 (11.x) dengan Paket Layanan 4, SQL Server 2016 (13.x) dengan Paket Layanan 2, SQL Server 2017 (14.x), dan versi yang lebih baru.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_adddistributiondb digunakan dalam semua jenis replikasi. Namun, prosedur tersimpan ini hanya berjalan di distributor.

Anda harus mengonfigurasi distributor dengan menjalankan sp_adddistributor sebelum menjalankan sp_adddistributiondb.

Jalankan sp_adddistributor sebelum menjalankan sp_adddistributiondb.

Contoh

Skrip ini menggunakan variabel pembuatan skrip SQLCMD dan harus berjalan dalam mode SQLCMD. Variabel dalam bentuk $(MyVariable). Untuk informasi tentang cara menggunakan variabel pembuatan skrip pada baris perintah dan di SQL Server Management Studio, lihat Skrip Replikasi Eksekusi.

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

Izin

Hanya anggota peran server tetap sysadmin yang dapat menjalankan sp_adddistributiondb.