Konsep Prosedur Tersimpan Sistem Replikasi
Berlaku untuk: SQL Server Azure SQL Managed Instance
Di SQL Server, akses terprogram ke semua fungsionalitas yang dapat dikonfigurasi pengguna dalam topologi replikasi disediakan oleh prosedur tersimpan sistem. Meskipun prosedur tersimpan dapat dijalankan secara individual menggunakan SQL Server Management Studio atau utilitas baris perintah sqlcmd, mungkin bermanfaat untuk menulis file skrip Transact-SQL yang dapat dijalankan untuk melakukan urutan logis tugas replikasi.
Tugas replikasi pembuatan skrip memberikan manfaat berikut:
Menyimpan salinan permanen langkah-langkah yang digunakan untuk menyebarkan topologi replikasi Anda.
Menggunakan satu skrip untuk mengonfigurasi beberapa Pelanggan.
Mendidik administrator database baru dengan cepat dengan memungkinkan mereka mengevaluasi, memahami, mengubah, atau memecahkan masalah kode.
Penting
Skrip dapat menjadi sumber kerentanan keamanan; mereka dapat memanggil fungsi sistem tanpa pengetahuan atau intervensi pengguna dan mungkin berisi kredensial keamanan dalam teks biasa. Tinjau skrip untuk masalah keamanan sebelum Anda menggunakannya.
Membuat Skrip Replikasi
Dari sudut replikasi, skrip adalah serangkaian dari satu atau beberapa pernyataan Transact-SQL di mana setiap pernyataan menjalankan prosedur tersimpan replikasi. Skrip adalah file teks, seringkali dengan ekstensi file .sql, yang dapat dijalankan menggunakan utilitas sqlcmd. Saat file skrip dijalankan, utilitas menjalankan pernyataan SQL yang disimpan dalam file. Demikian pula, skrip dapat disimpan sebagai objek kueri dalam proyek SQL Server Management Studio.
Skrip replikasi dapat dibuat dengan cara berikut:
Buat skrip secara manual.
Gunakan fitur pembuatan skrip yang disediakan dalam wizard replikasi atau
SQL Server Management Studio. Untuk informasi selengkapnya, lihat Replikasi Pembuatan Skrip.
Gunakan Objek Manajemen Replikasi (RMO) untuk membuat skrip secara terprogram untuk membuat objek RMO.
Saat Anda membuat skrip replikasi secara manual, ingatlah pertimbangan berikut:
Skrip Transact-SQL memiliki satu atau beberapa batch. Perintah GO menandakan akhir batch. Jika skrip Transact-SQL tidak memiliki perintah GO, skrip dijalankan sebagai satu batch.
Saat menjalankan beberapa prosedur tersimpan replikasi dalam satu batch, setelah prosedur pertama, semua prosedur berikutnya dalam batch harus didahului oleh kata kunci EXECUTE.
Semua prosedur tersimpan dalam batch harus dikompilasi sebelum batch akan dijalankan. Namun, setelah batch dikompilasi, dan rencana eksekusi telah dibuat, kesalahan run-time mungkin atau mungkin tidak terjadi.
Saat membuat skrip untuk mengonfigurasi replikasi, Anda harus menggunakan Autentikasi Windows untuk menghindari penyimpanan kredensial keamanan dalam file skrip. Jika Anda harus menyimpan kredensial dalam file skrip, Anda harus mengamankan file untuk mencegah akses yang tidak sah.
Sampel Skrip Replikasi
Skrip berikut dapat dijalankan untuk menyiapkan penerbitan dan distribusi di server.
-- 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'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
Skrip ini kemudian dapat disimpan secara instdistpub.sql
lokal sehingga dapat dijalankan atau dijalankan ulang saat diperlukan.
Skrip sebelumnya mencakup variabel pembuatan skrip sqlcmd , yang digunakan dalam banyak sampel kode replikasi di SQL Server Books Online. Variabel pembuatan skrip didefinisikan dengan menggunakan $(MyVariable)
sintaksis. Nilai untuk variabel dapat diteruskan ke skrip di baris perintah atau di SQL Server Management Studio. Untuk informasi selengkapnya, lihat bagian berikutnya dalam topik ini, "Menjalankan Skrip Replikasi."
Menjalankan Skrip Replikasi
Setelah dibuat, skrip replikasi dapat dijalankan dengan salah satu cara berikut:
Membuat File Kueri SQL di SQL Server Management Studio
File skrip Transact-SQL replikasi dapat dibuat sebagai file Kueri SQL dalam proyek SQL Server Management Studio. Setelah skrip ditulis, koneksi dapat dibuat ke database untuk file kueri ini dan skrip dapat dijalankan. Untuk informasi selengkapnya tentang cara membuat skrip Transact-SQL dengan menggunakan SQL Server Management Studio, lihat Editor Kueri dan Teks (SQL Server Management Studio).
Untuk menggunakan skrip yang menyertakan variabel pembuatan skrip, SQL Server Management Studio harus berjalan dalam mode sqlcmd . Dalam mode sqlcmd, Editor Kueri menerima sintaks tambahan khusus untuk sqlcmd, seperti :setvar
, yang digunakan untuk nilai untuk variabel. Untuk informasi selengkapnya tentang mode sqlcmd, lihat Mengedit Skrip SQLCMD dengan Editor Kueri. Dalam skrip berikut, :setvar
digunakan untuk memberikan nilai untuk $(DistPubServer)
variabel.
:setvar DistPubServer N'MyPublisherAndDistributor';
-- 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);
--
-- Additional code goes here
--
Menggunakan Utilitas sqlcmd dari Baris Perintah
Contoh berikut menunjukkan bagaimana baris perintah digunakan untuk menjalankan instdistpub.sql
file skrip menggunakan utilitas sqlcmd:
sqlcmd.exe -E -S sqlserverinstance -i C:\instdistpub.sql -o C:\output.log -v DistPubServer="N'MyDistributorAndPublisher'"
Dalam contoh ini, sakelar -E
menunjukkan bahwa Autentikasi Windows digunakan saat menyambungkan ke SQL Server. Saat menggunakan Autentikasi Windows, tidak perlu menyimpan nama pengguna dan kata sandi dalam file skrip. Nama dan jalur file skrip ditentukan oleh -i
sakelar dan nama file output ditentukan oleh -o
sakelar (output dari SQL Server ditulis ke file ini alih-alih konsol ketika sakelar ini digunakan). Utilitas ini sqlcmd
memungkinkan Anda meneruskan variabel pembuatan skrip ke skrip Transact-SQL saat runtime menggunakan sakelar -v
. Dalam contoh ini, sqlcmd
mengganti setiap instans $(DistPubServer)
dalam skrip dengan nilai N'MyDistributorAndPublisher'
sebelum eksekusi.
Catatan
Sakelar -X
menonaktifkan variabel pembuatan skrip.
Mengotomatiskan Tugas dalam File Batch
Dengan menggunakan file batch, tugas administrasi replikasi, tugas sinkronisasi replikasi, dan tugas lainnya dapat diotomatisasi dalam file batch yang sama. File batch berikut menggunakan utilitas sqlcmd untuk menghilangkan dan membuat ulang database langganan dan menambahkan langganan pull penggabungan. Kemudian file memanggil agen penggabungan untuk menyinkronkan langganan baru:
REM ----------------------Script to synchronize merge subscription ----------------------
REM -- Creates subscription database and
REM -- synchronizes the subscription to MergeSalesPerson.
REM -- Current computer acts as both Publisher and Subscriber.
REM -------------------------------------------------------------------------------------
SET Publisher=%computername%
SET Subscriber=%computername%
SET PubDb=AdventureWorks
SET SubDb=AdventureWorksReplica
SET PubName=AdvWorksSalesOrdersMerge
REM -- Drop and recreate the subscription database at the Subscriber
sqlcmd /S%Subscriber% /E /Q"USE master IF EXISTS (SELECT * FROM sysdatabases WHERE name='%SubDb%' ) DROP DATABASE %SubDb%"
sqlcmd /S%Subscriber% /E /Q"USE master CREATE DATABASE %SubDb%"
REM -- Add a pull subscription at the Subscriber
sqlcmd /S%Subscriber% /E /Q"USE %SubDb% EXEC sp_addmergepullsubscription @publisher = %Publisher%, @publication = %PubName%, @publisher_db = %PubDb%"
sqlcmd /S%Subscriber% /E /Q"USE %SubDb% EXEC sp_addmergepullsubscription_agent @publisher = %Publisher%, @publisher_db = %PubDb%, @publication = %PubName%, @subscriber = %Subscriber%, @subscriber_db = %SubDb%, @distributor = %Publisher%"
REM -- This batch file starts the merge agent at the Subscriber to
REM -- synchronize a pull subscription to a merge publication.
REM -- The following must be supplied on one line.
"\Program Files\Microsoft SQL Server\130\COM\REPLMERG.EXE" -Publisher %Publisher% -Subscriber %Subscriber% -Distributor %Publisher% -PublisherDB %PubDb% -SubscriberDB %SubDb% -Publication %PubName% -PublisherSecurityMode 1 -OutputVerboseLevel 1 -Output -SubscriberSecurityMode 1 -SubscriptionType 1 -DistributorSecurityMode 1 -Validate 3
Tugas Replikasi Umum Pembuatan Skrip
Berikut ini adalah beberapa tugas replikasi yang paling umum dapat diskrip menggunakan prosedur tersimpan sistem:
Mengonfigurasi penerbitan dan distribusi
Memodifikasi properti Penerbit dan Distributor
Menonaktifkan penerbitan dan distribusi
Membuat publikasi dan menentukan artikel
Menghapus publikasi dan artikel
Membuat langganan penarikan
Memodifikasi langganan penarikan
Menghapus langganan penarikan
Membuat langganan push
Memodifikasi langganan push
Menghapus langganan push
Menyinkronkan langganan penarikan