Condividi tramite


Concetti relativi alle stored procedure del sistema di replica

In SQL Server l'accesso a livello di codice a tutte le funzionalità configurabili dall'utente in una topologia di replica viene fornito dalle stored procedure di sistema. Anche se le stored procedure possono essere eseguite singolarmente usando SQL Server Management Studio o l'utilità della riga di comando sqlcmd, può essere utile scrivere Transact-SQL file di script che possono essere eseguiti per eseguire una sequenza logica di attività di replica.

Le attività di replica di scripting offrono i vantaggi seguenti:

  • Mantiene una copia permanente dei passaggi usati per distribuire la topologia di replica.

  • Usa un singolo script per configurare più Sottoscrittori.

  • Informare rapidamente i nuovi amministratori di database consentendo loro di valutare, comprendere, modificare o risolvere i problemi del codice.

    Importante

    Gli script possono essere l'origine delle vulnerabilità di sicurezza; possono richiamare funzioni di sistema senza conoscenza o intervento dell'utente e possono contenere credenziali di sicurezza in testo normale. Esaminare gli script per i problemi di sicurezza prima di usarli.

Creazione di script di replica

Dal punto di vista della replica, uno script è una serie di una o più istruzioni Transact-SQL in cui ogni istruzione esegue una stored procedure di replica. Gli script sono file di testo, spesso con estensione di file .sql, che possono essere eseguiti usando l'utilità sqlcmd. Quando viene eseguito un file di script, l'utilità esegue le istruzioni SQL archiviate nel file. Analogamente, uno script può essere archiviato come oggetto query in un progetto di SQL Server Management Studio.

Gli script di replica possono essere creati nei modi seguenti:

  • Creare manualmente lo script.

  • Usare le funzionalità di generazione di script fornite nelle procedure guidate di replica o

  • SQL Server Management Studio. Per altre informazioni, vedere Scripting Replication.

  • Usare RMO (Replication Management Objects) per generare lo script a livello di codice per creare un oggetto RMO.

Quando si creano manualmente script di replica, tenere presenti le considerazioni seguenti:

  • Transact-SQL script hanno uno o più batch. Il comando GO segnala la fine di un batch. Se uno script Transact-SQL non dispone di comandi GO, viene eseguito come singolo batch.

  • Quando si eseguono più stored procedure di replica in un singolo batch, dopo la prima procedura, tutte le procedure successive nel batch devono essere precedute dalla parola chiave EXECUTE.

  • Tutte le stored procedure in un batch devono essere compilate prima dell'esecuzione di un batch. Tuttavia, dopo aver compilato il batch e aver creato un piano di esecuzione, potrebbe verificarsi o meno un errore di run-time.

  • Quando si creano script per configurare la replica, è consigliabile usare l'autenticazione di Windows per evitare di archiviare le credenziali di sicurezza nel file di script. Se è necessario archiviare le credenziali in un file di script, è necessario proteggere il file per impedire l'accesso non autorizzato.

Script di replica di esempio

Lo script seguente può essere eseguito per configurare la pubblicazione e la distribuzione in un 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'AdventureWorks2012';   
  
-- 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 AdventureWorks2012 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  
  

Questo script può quindi essere salvato in locale in instdistpub.sql modo che possa essere eseguito o rieseguito quando necessario.

Lo script precedente include variabili di scripting sqlcmd , usate in molti degli esempi di codice di replica nella documentazione online di SQL Server. Le variabili di scripting vengono definite usando $(MyVariable) la sintassi . I valori per le variabili possono essere passati a uno script nella riga di comando o in SQL Server Management Studio. Per altre informazioni, vedere la sezione successiva di questo argomento" "Esecuzione di script di replica".

Esecuzione di script di replica

Dopo la creazione, è possibile eseguire uno script di replica in uno dei modi seguenti:

Creazione di un file di query SQL in SQL Server Management Studio

Una replica Transact-SQL file di script può essere creato come file di query SQL in un progetto di SQL Server Management Studio. Dopo aver scritto lo script, è possibile stabilire una connessione al database per questo file di query e lo script può essere eseguito. Per altre informazioni su come creare script Transact-SQL tramite SQL Server Management Studio, vedere Editor di query e testo (SQL Server Management Studio).

Per usare uno script che include variabili di scripting, SQL Server Management Studio deve essere in esecuzione in modalità sqlcmd . In modalità sqlcmd , l'editor di query accetta una sintassi aggiuntiva specifica per sqlcmd, ad esempio :setvar, che viene usata per un valore per una variabile. Per altre informazioni sulla modalità sqlcmd , vedere Modificare script SQLCMD con l'editor di query. Nello script :setvar seguente viene usato per fornire un valore per la $(DistPubServer) variabile.

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

Uso dell'utilità sqlcmd dalla riga di comando

L'esempio seguente illustra come viene usata la riga di comando per eseguire il instdistpub.sql file di script usando l'utilità sqlcmd:

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

In questo esempio, l'opzione -E indica che l'autenticazione di Windows viene usata per la connessione a SQL Server. Quando si usa l'autenticazione di Windows, non è necessario archiviare un nome utente e una password nel file di script. Il nome e il percorso del file di script vengono specificati dall'opzione -i e il nome del file di output viene specificato dall'opzione (l'output -o di SQL Server viene scritto in questo file anziché nella console quando viene usata questa opzione). L'utilità sqlcmd consente di passare variabili di scripting a uno script Transact-SQL in fase di esecuzione usando l'opzione -v . In questo esempiosqlcmd, sostituisce ogni istanza di nello script con il valore N'MyDistributorAndPublisher' prima dell'esecuzione$(DistPubServer).

Annotazioni

L'opzione -X disabilita le variabili di scripting.

Automazione delle attività in un file batch

Usando un file batch, le attività di amministrazione della replica, le attività di sincronizzazione della replica e altre attività possono essere automatizzate nello stesso file batch. Il file batch seguente usa l'utilità sqlcmd per eliminare e ricreare il database di sottoscrizione e aggiungere una sottoscrizione pull di tipo merge. Il file richiama quindi l'agente di merge per sincronizzare la nuova sottoscrizione:

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

Scripting di attività di replica comuni

Di seguito sono riportate alcune delle attività di replica più comuni che è possibile creare script usando stored procedure di sistema:

  • Configurazione della pubblicazione e della distribuzione

  • Modifica delle proprietà del server di pubblicazione e del server di distribuzione

  • Disabilitazione della pubblicazione e della distribuzione

  • Creazione di pubblicazioni e definizione di articoli

  • Eliminazione di pubblicazioni e articoli

  • Creazione di una sottoscrizione pull

  • Modifica di una sottoscrizione pull

  • Eliminazione di una sottoscrizione pull

  • Creazione di una sottoscrizione push

  • Modifica di una sottoscrizione push

  • Eliminazione di una sottoscrizione push

  • Sincronizzazione di una sottoscrizione pull

Vedere anche

Concetti di base relativi alla programmazione della replica
Stored procedure di replica (Transact-SQL)
Scripting Replication