Replication System Stored Procedures ConceptsReplication System Stored Procedures Concepts

In questo argomento si applica a: SìSQL ServernonDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

In SQL ServerSQL Server, l'accesso a livello di codice a tutte le funzionalità configurabili dall'utente in una topologia di replica viene fornito da stored procedure di sistema.In SQL ServerSQL Server, programmatic access to all of the user-configurable functionality in a replication topology is provided by system stored procedures. Mentre le stored procedure possono essere eseguite singolarmente utilizzando SQL Server Management StudioSQL Server Management Studio o l'utilità della riga di comando sqlcmd, può rivelarsi vantaggioso scrivere file script Transact-SQLTransact-SQL che consentono di eseguire una sequenza logica di attività di replica.While stored procedures may be executed individually using the SQL Server Management StudioSQL Server Management Studio or the sqlcmd command-line utility, it may be beneficial to write Transact-SQLTransact-SQL script files that can be executed to perform a logical sequence of replication tasks.

L'esecuzione di attività di replica tramite script offre i vantaggi seguenti:Scripting replication tasks provides the following benefits:

  • Consente di conservare una copia permanente dei passaggi utilizzati per distribuire la topologia di replica.Keeps a permanent copy of the steps used to deploy your replication topology.

  • Consente di utilizzare un unico script per configurare più sottoscrittori.Uses a single script to configure multiple Subscribers.

  • Consente di formare in breve tempo nuovi amministratori di database permettendo loro di valutare, comprendere e modificare il codice, nonché di risolvere i problemi a livello del codice.Quickly educates new database administrators by enabling them to evaluate, understand, change, or troubleshoot the code.

    Importante

    È possibile che gli script siano all'origine di vulnerabilità nella sicurezza, in quanto possono richiamare funzioni di sistema all'insaputa dell'utente e senza richiederne l'intervento, nonché contenere credenziali di sicurezza in testo normale.Scripts can be the source of security vulnerabilities; they can invoke system functions without user knowledge or intervention and may contain security credentials in plain text. Prima di utilizzarli, verificare gli script in modo da individuare possibili problemi di sicurezza.Review scripts for security issues before you use them.

Creazione di script di replicaCreating Replication Scripts

Dal punto di vista della replica, uno script è una serie di una o più istruzioni Transact-SQLTransact-SQL in cui ogni istruzione esegue una stored procedure di replica.From the standpoint of replication, a script is a series of one or more Transact-SQLTransact-SQL statements where each statement executes a replication stored procedure. Gli script sono file di testo, spesso con l'estensione di file sql, che possono essere eseguiti utilizzando l'utilità sqlcmd.Scripts are text files, often with a .sql file extension, that can be run using the sqlcmd utility. Quando un file script viene eseguito, l'utilità esegue le istruzioni SQL archiviate nel file.When a script file is run, the utility executes the SQL statements stored in the file. Allo stesso modo, uno script può essere archiviato come oggetto query in un progetto di SQL Server Management StudioSQL Server Management Studio.Similarly, a script can be stored as a query object in a SQL Server Management StudioSQL Server Management Studio project.

Per creare script di replica è possibile procedere nei modi seguenti:Replication scripts can be created in the following ways:

  • Creare lo script in modo manuale.Manually create the script.

  • Utilizzare le caratteristiche di generazione degli script fornite nelle procedure guidate per la replica oppureUse the script generation features that are provided in the replication wizards or

  • SQL Server Management StudioSQL Server Management Studio.. Per altre informazioni, vedere Scripting Replication.For more information, see Scripting Replication.

  • Utilizzare RMO (Replication Management Objects) per generare lo script a livello di codice per la creazione di un oggetto RMO.Use Replication Management Objects (RMOs) to programmatically generate the script to create an RMO object.

    Quando si creano manualmente script di replica, tenere presente le considerazioni seguenti:When you manually create replication scripts, keep the following considerations in mind:

  • Gli script Transact-SQLTransact-SQL possono contenere uno o più batch. Transact-SQLTransact-SQL scripts have one or more batches. Il comando GO indica la fine di un batch.The GO command signals the end of a batch. Uno script Transact-SQLTransact-SQL che non include alcun comando GO viene eseguito come batch singolo.If a Transact-SQLTransact-SQL script does not have any GO commands, it is executed as a single batch.

  • Quando si eseguono più stored procedure di replica in un solo batch, tutte le procedure successive alla prima procedura nel batch devono essere precedute dalla parola chiave EXECUTE.When executing multiple replication stored procedures in a single batch, after the first procedure, all subsequent procedures in the batch must be preceded by the EXECUTE keyword.

  • Tutte le stored procedure in un batch devono essere compilate prima che un batch venga eseguito.All stored procedures in a batch must compile before a batch will execute. Tuttavia, dopo aver compilato il batch e creato un piano di esecuzione, potrebbe o meno verificarsi un errore di run-time.However, once the batch has been compiled, and an execution plan has been created, a run-time error may or may not occur.

  • Quando si creano script per la configurazione della replica, è necessario utilizzare l'autenticazione di Windows per evitare di archiviare le credenziali di sicurezza nel file script.When creating scripts to configure replication, you should use Windows Authentication to avoid storing security credentials in the script file. Se è necessario archiviare le credenziali in un file script, è fondamentale proteggere il file per evitare accessi non autorizzati.If you must store credentials in a script file, you must secure the file to prevent unauthorized access.

Script di replica di esempioSample Replication Script

Lo script seguente può essere eseguito per configurare la pubblicazione e la distribuzione in un server.The following script can be executed to setup publishing and distribution on a 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  

È quindi possibile salvare questo script localmente come instdistpub.sql in modo da poterlo eseguire più volte in base alle esigenze.This script can then be saved locally as instdistpub.sql so that it can be run or rerun when needed.

Lo script precedente include variabili di scripting sqlcmd usate in molti degli esempi di codice di replica presenti nella documentazione online di SQL ServerSQL Server.The previous script includes sqlcmd scripting variables, which are used in many of the replication code samples in SQL ServerSQL Server Books Online. Le variabili di scripting vengono definite mediante la sintassi $(MyVariable).Scripting variables are defined by using $(MyVariable) syntax. I valori per le variabili possono essere passati a uno script dalla riga di comando o in SQL Server Management StudioSQL Server Management Studio.Values for variables can be passed to a script at the command line or in SQL Server Management StudioSQL Server Management Studio. Per ulteriori informazioni, vedere la sezione successiva in questo argomento, "Esecuzione di script di replica".For more information, see the next section in this topic, "Executing Replication Scripts."

Esecuzione di script di replicaExecuting Replication Scripts

Dopo averlo creato, uno script di replica può essere eseguito in uno dei modi seguenti:Once created, a replication script can be executed in one of the following ways:

Creazione di un file query SQL in SQL Server Management StudioCreating a SQL Query File in SQL Server Management Studio

Un file script di replica di Transact-SQLTransact-SQL può essere creato come file query SQL in un progetto di SQL Server Management StudioSQL Server Management Studio.A replication Transact-SQLTransact-SQL script file can be created as a SQL Query file in a SQL Server Management StudioSQL Server Management Studio project. Dopo aver scritto lo script, è possibile stabilire una connessione al database per questo file query ed eseguire lo script.After the script is written, a connection can be made to the database for this query file and the script can be executed. Per altre informazioni su come creare script di Transact-SQLTransact-SQL con SQL Server Management StudioSQL Server Management Studio, vedere Editor di query e di testo (SQL Server Management Studio).For more information about how to create Transact-SQLTransact-SQL scripts by using SQL Server Management StudioSQL Server Management Studio, see Query and Text Editors (SQL Server Management Studio).

Per usare uno script che include variabili di scripting, è necessario che SQL Server Management StudioSQL Server Management Studio sia in esecuzione in modalità sqlcmd.To use a script that includes scripting variables, SQL Server Management StudioSQL Server Management Studio must be running in sqlcmd mode. In modalità sqlcmd, l'editor di query accetta la sintassi aggiuntiva specifica di sqlcmd, ad esempio il comando :setvar usato per assegnare un valore a una variabile.In sqlcmd mode, the Query Editor accepts additional syntax specific to sqlcmd, such as :setvar, which is used to a value for a variable. Per altre informazioni sulla modalità sqlcmd, vedere Modificare script SQLCMD con l'editor di query.For more information about sqlcmd mode, see Edit SQLCMD Scripts with Query Editor. Nello script seguente il comando :setvar viene usato per fornire un valore per la variabile $(DistPubServer).In the following script, :setvar is used to provide a value for the $(DistPubServer) variable.

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

Utilizzo dell'utilità sqlcmd dalla riga di comandoUsing the sqlcmd Utility from the Command Line

L'esempio seguente mostra come usare la riga di comando per eseguire il file di script instdistpub.sql con l'utilità sqlcmd:The following example shows how the command line is used to execute the instdistpub.sql script file using the sqlcmd utility:

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 viene utilizzata l'autenticazione di Windows per la connessione a SQL ServerSQL Server.In this example, the -E switch indicates that Windows Authentication is used when connecting to SQL ServerSQL Server. Quando si utilizza l'autenticazione di Windows, non è necessario archiviare un nome utente e una password nel file script.When using Windows Authentication, there is no need to store a username and password in the script file. Il nome e il percorso del file script vengono specificati dall'opzione -i e il nome del file di output viene specificato dall'opzione -o. Quando viene utilizzata questa opzione, l'output da SQL ServerSQL Server viene scritto in questo file anziché indirizzato alla console.The name and path of the script file is specified by the -i switch and the name of the output file is specified by the -o switch (output from SQL ServerSQL Server is written to this file instead of the console when this switch is used). L'utilità sqlcmd consente di passare variabili di scripting a uno script di Transact-SQLTransact-SQL durante l'esecuzione utilizzando l'opzione -v.The sqlcmd utility enables you to pass scripting variables to a Transact-SQLTransact-SQL script at runtime using the -v switch. In questo esempio, sqlcmd sostituisce ogni istanza di $(DistPubServer) nello script con il valore N'MyDistributorAndPublisher' prima dell'esecuzione.In this example, sqlcmd replaces every instance of $(DistPubServer) in the script with the value N'MyDistributorAndPublisher' before execution.

Nota

L'opzione -X disabilita le variabili di scripting.The -X switch disables scripting variables.

Automatizzazione di attività in un file batchAutomating Tasks in a Batch File

L'utilizzo di un file batch consente di automatizzare le attività di amministrazione della replica, le attività di sincronizzazione della replica e altre attività nello stesso file batch.By using a batch file, replication administration tasks, replication synchronization tasks, and other tasks can be automated in the same batch file. Il file batch seguente usa l'utilità sqlcmd per eliminare e ricreare il database di sottoscrizione e aggiungere una sottoscrizione pull di tipo merge.The following batch file uses the sqlcmd utility to drop and recreate the subscription database and add a merge pull subscription. Il file richiama quindi l'agente di merge per sincronizzare la nuova sottoscrizione:Then the file invokes the merge agent to synchronize the new subscription:

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  

Generazione di script per attività di replica comuniScripting Common Replication Tasks

Di seguito vengono illustrate alcune delle attività di replica più comuni per le quali è possibile generare script utilizzando stored procedure di sistema:The following are some of the most common replication tasks can be scripted using system stored procedures:

  • Configurazione della pubblicazione e della distribuzione.Configuring publishing and distribution

  • Modifica delle proprietà del server di pubblicazione e del server di distribuzione.Modifying Publisher and Distributor properties

  • Disabilitazione della pubblicazione e della distribuzione.Disabling publishing and distribution

  • Creazione di pubblicazioni e definizione di articoli.Creating publications and defining articles

  • Eliminazione di pubblicazioni e articoli.Deleting publications and articles

  • Creazione di una sottoscrizione pull.Creating a pull subscription

  • Modifica di una sottoscrizione pull.Modifying a pull subscription

  • Eliminazione di una sottoscrizione pull.Deleting a pull subscription

  • Creazione di una sottoscrizione push.Creating a push subscription

  • Modifica di una sottoscrizione push.Modifying a push subscription

  • Eliminazione di una sottoscrizione push.Deleting a push subscription

  • Sincronizzazione di una sottoscrizione pull.Synchronizing a pull subscription

Vedere ancheSee Also

Concetti di base relativi alla programmazione della replica Replication Programming Concepts
Stored procedure per la replica (Transact-SQL) Replication Stored Procedures (Transact-SQL)
Creazione di script di replicaScripting Replication