Aracılığıyla paylaş


Replikasyon Sistemi Depolanmış İşlemler Kavramları

Şunlar için geçerlidir:SQL ServerAzure SQL Yönetilen Örneği

SQL Server'da, bir çoğaltma topolojisindeki kullanıcı tarafından yapılandırılabilir tüm işlevlere programatik erişim sistem olarak depolanmış prosedürler tarafından sağlanır. Saklanan prosedürler SQL Server Management Studio veya sqlcmd komut satırı aracı kullanılarak tek tek çalıştırılabilse de, mantıksal bir replikasyon görevi dizisini gerçekleştirmek için yürütülebilecek Transact-SQL script dosyaları yazmak faydalı olabilir.

Örnekleme betik görevleri aşağıdaki faydaları sağlar:

  • Replikasyon topolojinizi dağıtmak için kullanılan adımların kalıcı bir kopyasını tutar.

  • Birden fazla aboneyi yapılandırmak için tek bir betik kullanır.

  • Yeni veritabanı yöneticilerini hızlıca eğitmek, kodu değerlendirmek, anlamak, değiştirmek veya sorun gidermek için olanak tanır.

    Önemli

    Scriptler güvenlik açıklarının kaynağı olabilir; Kullanıcı bilgisi veya müdahalesi olmadan sistem fonksiyonlarını çağırabilirler ve güvenlik bilgilerini düz metin olarak içerebilirler. Kullanmadan önce güvenlik sorunları için betikleri gözden geçirin.

Replikasyon Scriptleri Oluşturmak

Çoğaltma açısından bakıldığında, script, her ifadenin bir replikasyon depolanmış prosedürünü yürüttüğü bir veya daha fazla Transact-SQL ifadesinden oluşan bir dizidir. Scriptler, genellikle .sql bir dosya uzantısı olan ve sqlcmd yardımcı programı kullanılarak çalıştırılabilen metin dosyalarıdır. Bir script dosyası çalıştırıldığında, yardımcı dosyada saklanan SQL ifadelerini çalıştırır. Benzer şekilde, bir script SQL Server Management Studio projesinde sorgu nesnesi olarak depolanabilir.

Çoğaltma betikleri aşağıdaki şekillerde oluşturulabilir:

  • Senaryoyu manuel olarak oluşturun.

  • Çoğaltma büyücülerinde sağlanan script oluşturma özelliklerini kullanın veya

  • SQL Server Management Studio. Daha fazla bilgi için Scripting Replication bölümüne bakınız.

  • RMO nesnesi oluşturmak için betiği programlı olarak oluşturmak için Replikasyon Yönetim Nesneleri (RMO) kullanın.

Çoğaltma betiklerini manuel olarak oluştururken, aşağıdaki hususları aklınızda bulundurun:

  • Transact-SQL scriptlerde bir veya daha fazla parti bulunur. GO komutu bir partinin bittiğini işaret eder. Bir Transact-SQL scriptinde GO komutu yoksa, tek bir toplu olarak çalıştırılır.

  • Tek bir toplu toplu tekrarlama depolanan prosedür çalıştırıldığında, ilk prosedürden sonra, toplu aşamadaki tüm sonraki prosedürlerin önünde EXECUTE anahtar kelimesi olmalıdır.

  • Bir toplu bölümdeki tüm depolanan prosedürler bir toplu çalışmadan önce derlenmelidir. Ancak, toplu derlendikten ve bir yürütme planı oluşturulduktan sonra, çalışma zamanı hatası meydana gelebilir veya olmayabilir.

  • Replikasyonu yapılandırmak için script oluştururken, güvenlik kimlik bilgilerini script dosyasında saklamaktan kaçınmak için Windows Authentication kullanmalısınız. Kimlik bilgilerini bir betik dosyasında depolamanız gerekiyorsa, yetkisiz erişimi önlemek için dosyanın güvenliğini sağlamalısınız.

Örnek Replikasyon Scripti

Aşağıdaki betik, bir sunucuda yayınlama ve dağıtım kurulumu için çalıştırılabilir.

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

Bu betik daha sonra yerel instdistpub.sql olarak kaydedilebilir ve gerektiğinde çalıştırılabilir veya tekrar çalıştırılabilir.

Önceki betik, SQL Server Books Online'daki birçok replikasyon kodu örneğinde kullanılan sqlcmd betik değişkenlerini içerir. Scripting değişkenleri sözdizimi kullanılarak $(MyVariable) tanımlanır. Değişkenler için değerler, komut satırında veya SQL Server Management Studio'da bir script'e iletilebilir. Daha fazla bilgi için, bu konunun bir sonraki bölümü olan "Çoğaltma Scriptlerini Yürütme" bölümüne bakınız.

Çoğaltma Scriptleri Yürütülmesi

Oluşturulduktan sonra, bir replikasyon betiği aşağıdaki yöntemlerden biriyle çalıştırılabilir:

SQL Server Management Studio'da SQL Sorgu Dosyası Oluşturma

Bir replikasyon Transact-SQL script dosyası, SQL Server Management Studio projesinde SQL Sorgu dosyası olarak oluşturulabilir. Script yazıldıktan sonra, bu sorgu dosyası için veritabanına bağlantı kurulabilir ve script çalıştırılabilir. SQL Server Management Studio kullanılarak Transact-SQL betikleri nasıl oluşturulacağı hakkında daha fazla bilgi için Sorgu ve Metin Düzenleyicileri (SQL Server Management Studio) bölümüne bakınız.

Scripting değişkenleri içeren bir betik kullanmak için SQL Server Management Studio sqlcmd modunda çalışmalıdır. sqlcmd modunda, Sorgu Düzenleyici sqlcmd'ye özgü ek sözdizimi kabul eder; örneğin :setvar, bu değişken için bir değer için kullanılır. sqlcmd modu hakkında daha fazla bilgi için Sorgu Düzenleyici ile SQLCMD Scripts Düzenle'e bakınız. Aşağıdaki betikte, :setvar değişken için $(DistPubServer) bir değer sağlamak için kullanılır.

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

Komut Satırından sqlcmd Utility kullanılarak

Aşağıdaki örnek, komut satırının sqlcmd aracı kullanılarak script dosyasını çalıştırmak instdistpub.sql için nasıl kullanıldığını göstermektedir:

sqlcmd.exe -E -S sqlserverinstance -i C:\instdistpub.sql -o C:\output.log -v DistPubServer="N'MyDistributorAndPublisher'"  

Bu örnekte, -E anahtar SQL Server'a bağlanırken Windows Kimlik Doğrulamasının kullanıldığını gösterir. Windows Kimlik Doğrulaması kullanılırken, betik dosyasında kullanıcı adı ve şifre saklamaya gerek yoktur. Script dosyasının adı ve yolu switch -i tarafından, çıkış dosyasının adı ise switch tarafından belirlenir -o (bu anahtar kullanıldığında SQL Server'dan çıkan çıktı, konsol yerine bu dosyaya yazılır). Bu sqlcmd program, anahtar kullanarak -v çalışma zamanı Transact-SQL bir scripte script değişkenlerini iletmenize olanak tanır. Bu örnekte, sqlcmd script'teki her örnek $(DistPubServer) , çalıştırmadan önceki değerle N'MyDistributorAndPublisher' değiştirilir.

Uyarı

Anahtar, -X script değişkenlerini devre dışı bırakıyor.

Bir Toplu Dosyada Görevleri Otomatikleştirme

Toplu dosya kullanılarak, replikasyon yönetimi görevleri, replikasyon senkronizasyon görevleri ve diğer görevler aynı toplu dosyada otomatikleştirilebilir. Aşağıdaki toplu dosya, sqlcmd aracını kullanarak abonelik veritabanını bırakıp yeniden oluşturuyor ve merge pull aboneliği ekler. Sonra dosya, yeni aboneliği senkronize etmek için birleştirme ajanını çağırıyor:

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  
  

Ortak Çoğaltma Görevlerini Betlemenin

Aşağıda, sistem depolanan prosedürler kullanılarak betiklenebilecek en yaygın çoğaltma görevlerinden bazıları yer almaktadır:

  • Yayın ve dağıtımın yapılandırılması

  • Yayıncı ve Dağıtıcı Özelliklerinin Değiştirilmesi

  • Yayıncılık ve dağıtımın durdurulması

  • Yayınlar oluşturmak ve makaleleri tanımlamak

  • Yayınların ve makalelerin silinmesi

  • Pull aboneliği oluşturma

  • Pull aboneliğini değiştirmek

  • Pull aboneliğini silmek

  • Push aboneliği oluşturma

  • Push aboneliğini değiştirmek

  • Push aboneliğini silmek

  • Pull aboneliğini senkronize etmek