Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Istanza gestita di SQL di Azure
Questo articolo descrive come creare e applicare lo snapshot iniziale in SQL Server utilizzando SQL Server Management Studio, Transact-SQL o Replication Management Objects (RMO). Per le pubblicazioni di tipo merge che utilizzano filtri con parametri è necessario uno snapshot a due parti. Per altre informazioni, vedere Creazione di uno snapshot per una pubblicazione di tipo merge con filtri con parametri.
agente di snapshot genera snapshot dopo la creazione di una pubblicazione. Puoi generare snapshot:
- Immediatamente. Per impostazione predefinita, il New Publication Wizard genera uno snapshot per una pubblicazione di merge immediatamente dopo la creazione della pubblicazione.
- A un'ora pianificata. Specificare una pianificazione nella pagina agente di snapshot della Creazione guidata Nuova pubblicazione oppure quando si utilizzano stored procedure o oggetti di gestione della replica (RMO).
- Manualmente. Eseguire l'agente di snapshot dal prompt dei comandi o da SQL Server Management Studio. Per altre informazioni sull'esecuzione degli agenti, vedere Concetti di base relativi ai file eseguibili dell'agente di replica e Avviare e arrestare un agente di replica (SQL Server Management Studio).
Per la replica delle fusioni, l'agente di snapshot genera uno snapshot ogni volta che viene eseguito. Per la Replica Transazionale, la generazione degli snapshot dipende dall'impostazione della proprietà di pubblicazione immediate_sync. Se la proprietà è impostata su TRUE (il valore predefinito quando si utilizza il New Publication Wizard), l'agente di snapshot genera uno snapshot ogni volta che viene eseguito, e può applicare lo snapshot a un Abbonato in qualsiasi momento. Se la proprietà è impostata su FALSE (il valore predefinito quando si usa sp_addpublication), il agente di snapshot genera uno snapshot solo se viene aggiunto un nuovo abbonamento dall'ultima agente di snapshot eseguita; Gli abbonati devono attendere che il agente di snapshot si completi prima di poter sincronizzarsi.
Di default, l'agente di snapshot salva gli snapshot generati nella cartella degli snapshot predefinita situata sul Distributore. Puoi anche salvare file snapshot su supporti rimovibili come dischi rimovibili, CD-ROM o in luoghi diversi dalla cartella snapshot predefinita. Puoi anche comprimere i file per renderli più facili da memorizzare e trasferire, ed eseguire script prima o dopo che l'agente di snapshot applica lo snapshot all'abbonato. Per altre informazioni su queste opzioni, vedere Snapshot Options.
Se lo snapshot è per una pubblicazione di merge che utilizza filtri parametrizzati, l'agente di snapshot crea lo snapshot utilizzando un processo in due parti. Innanzitutto, crea uno schema snapshot che contiene gli script di replicazione e lo schema degli oggetti pubblicati, ma non i dati. Ogni sottoscrizione viene quindi inizializzata con uno snapshot che include gli script e lo schema copiati dallo snapshot dello schema, nonché i dati appartenenti alla partizione della sottoscrizione. Per altre informazioni, vedere Snapshots for Merge Publications with Parameterized Filters.
Dopo che l'agente di snapshot crea lo snapshot presso il Publisher e lo memorizza in una posizione predefinita o alternativa, puoi trasferire lo snapshot all'Abbonato e applicarlo. Il agente di distribuzione (per snapshot o Transactional Replication) o agente di merge (per la replica di fusione) trasferisce lo snapshot e applica lo schema e i file di dati al database in abbonamento sull'Abbonato durante la sincronizzazione iniziale. Di default, la sincronizzazione iniziale avviene immediatamente dopo aver creato un abbonamento se si utilizza il New Subscription Wizard. L'opzione Inizializza Quando nella pagina Inizializza Abbonamenti del wizard controlla questo comportamento. Quando lo agente di snapshot genera snapshot dopo l'inizializzazione di un abbonamento, non li applica a un Abbonato a meno che tu non segni un abbonamento per la riinizializzazione. Per altre informazioni, vedere Reinizializzare le sottoscrizioni.
Dopo aver applicato lo snapshot iniziale, l'agente di distribuzione o l'agente di merge propaga gli aggiornamenti successivi e le altre modifiche dei dati. Quando gli snapshot vengono distribuiti e applicati ai sottoscrittori, sono interessati solo i sottoscrittori in attesa dello snapshot iniziale o di nuovi snapshot. Gli altri abbonati a quella pubblicazione (quelli che già ricevono inserti, aggiornamenti, cancellazioni o altre modifiche ai dati pubblicati) non sono interessati.
Per visualizzare o modificare la posizione della cartella snapshot predefinita, vedere
SQL Server Management Studio: Modificare le opzioni snapshot
Programmazione della replica e programmazione RMO: Configurare la pubblicazione e la distribuzione
Posizione predefinita degli snapshot
Specificare la posizione predefinita degli snapshot nella pagina Cartella snapshot della Configurazione guidata distribuzione. Per altre informazioni sull'uso di questa procedura guidata, vedere Configurare la pubblicazione e la distribuzione. Se si crea una pubblicazione in un server non configurato come Distributore, specificare un percorso predefinito per lo snapshot nella pagina Cartella snapshot della Creazione guidata Nuova pubblicazione. Per altre informazioni sull'uso di questa procedura guidata, vedere Creare una pubblicazione.
Modificare la posizione predefinita dello snapshot nella pagina Editori della finestra di dialogo Proprietà distributore - <Distributore>. Per altre informazioni, vedere Visualizzare e modificare le proprietà del server di pubblicazione e del database di distribuzione. Impostare la cartella snapshot per ogni pubblicazione nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione>. Per altre informazioni, vedere View and Modify Publication Properties.
Modificare la posizione predefinita degli snapshot
Nella pagina Publishers della finestra di dialogo Distributor Properties - <Distributor>, seleziona il pulsante proprietà (...) per il Publisher per il quale vuoi cambiare la posizione predefinita dell'istantaneo.
Nella finestra di dialogo Proprietà dell'editore - <Editore>, specificare un valore per la proprietà Cartella snapshot predefinita.
Nota
L'agente di snapshot necessita dei permessi di scrittura per la directory che specifichi, mentre il agente di distribuzione o agente di merge necessita dei permessi di lettura. Se usi le sottoscrizioni pull, devi specificare una directory condivisa come percorso universale di denominazione (UNC), come \\computername\snapshot. Per altre informazioni, vedere Proteggere la cartella snapshot.
Seleziona OK.
Crea istantanea
Di default, se SQL Server Agent è in esecuzione, l'agente di snapshot genera uno snapshot immediatamente dopo aver creato una pubblicazione utilizzando il New Publication Wizard. Di default, l'agente di distribuzione (per snapshot e Transactional Replication) o agente di merge (per gli abbonamenti di fusione) applica quindi lo snapshot per tutti gli abbonamenti. Puoi anche generare uno snapshot usando SQL Server Management Studio e Replication Monitor. Per informazioni sull'avvio di Monitoraggio replica, vedere Avviare Monitoraggio replica.
Utilizzo di SQL Server Management Studio
- Connettersi al server di pubblicazione in Management Studio e quindi espandere il nodo del server.
- Espandere la cartella Replica e quindi la cartella Pubblicazioni locali .
- Clicca con il tasto destro sulla pubblicazione per cui vuoi creare una snapshot, poi seleziona View agente di snapshot Status.
- Nella finestra di dialogo View agente di snapshot Status - <Publication>, seleziona Start.
Quando il agente di snapshot termina di generare lo snapshot, mostra un messaggio, come "[100%] È stato generato uno snapshot di 17 articoli."
In Monitoraggio della replica
- In Monitoraggio replica, espandere un gruppo Publisher nel riquadro di sinistra, quindi espandere un Publisher.
- Clicca con il tasto destro sulla pubblicazione per cui vuoi generare una snapshot, poi seleziona Genera snapshot.
- Per visualizzare lo stato dell'agente di snapshot, seleziona la scheda Agents. Per informazioni più dettagliate, clicca con il tasto destro su agente di snapshot nella griglia, poi seleziona Visualizza dettagli.
Utilizzo di Transact-SQL
Puoi creare snapshot iniziali in modo programmativo creando ed eseguendo un job agente di snapshot oppure eseguendo il file eseguibile agente di snapshot da un file batch. Dopo la generazione, lo snapshot iniziale viene trasferito e applicato al Sottoscrittore la prima volta che la sottoscrizione viene sincronizzata. Se esegui lo agente di snapshot da un prompt dei comandi o da un file batch, devi rieseguire l'agente ogni volta che lo snapshot esistente diventa invalido.
Importante
Se possibile, richiedere agli utenti di immettere le credenziali di sicurezza in fase di esecuzione. Se è necessario archiviare le credenziali in un file di script, proteggere tale file per impedire l'accesso non autorizzato.
Creare una pubblicazione snapshot, transazionale o di tipo merge. Per altre informazioni, vedere Create a Publication.
Eseguire sp_addpublication_snapshot (Transact-SQL). Specificare @publication e i parametri seguenti:
@job_login , che specifica le credenziali dell'autenticazione di Windows con cui l'agente snapshot viene eseguito nel server di distribuzione.
@job_password, che corrisponde alla password per le credenziali di Windows specificate.
(Opzionale) Un valore di 0 per @publisher_security_mode se l'agente utilizza SQL Server Autenticazione quando si collega al Publisher. In questo caso, è necessario specificare anche le informazioni di accesso dell'autenticazione di SQL Server per @publisher_login e @publisher_password.
(Facoltativo) Una pianificazione di sincronizzazione per il processo dell'agente Snapshot. Per altre informazioni, vedere Specify Synchronization Schedules.
Importante
Quando configuri un Publisher con un Distributore remoto, i valori che fornisci per tutti i parametri, inclusi job_login e job_password, vengono inviati al Distributore come testo semplice. Cripta la connessione tra il Publisher e il suo Distributore remoto prima di eseguire questa procedura memorizzata. Per altre informazioni, vedere Abilitare le connessioni crittografate al motore di database (Gestione configurazione SQL Server).
Aggiungere articoli alla pubblicazione. Per altre informazioni, vedere definire un articolo.
Nel server di pubblicazione, nel database di pubblicazione, eseguire sp_startpublication_snapshot (Transact-SQL), specificando il valore di @publication dal passaggio 1.
Applicare un'istantanea
Utilizzo di SQL Server Management Studio
Dopo aver generato lo snapshot, sincronizza l'abbonamento con il agente di distribuzione o il agente di merge per applicarlo:
Se l'agente viene eseguito in modo continuo (predefinito per la replica transazionale), applica automaticamente lo snapshot dopo averlo generato.
Se l'agente gira su una programmazione, applica lo snapshot la volta successiva che viene eseguito.
Se l'agente viene eseguito su richiesta, applica lo snapshot la volta successiva che lo esegui.
Per ulteriori informazioni sulla sincronizzazione delle sottoscrizioni, vedere Synchronize a Push Subscription e Synchronize a Pull Subscription.
Usare Transact-SQL
Creare una pubblicazione snapshot, transazionale o di tipo merge. Per altre informazioni, vedere Create a Publication.
Aggiungere articoli alla pubblicazione. Per altre informazioni, vedere definire un articolo.
Dal prompt dei comandi o in un file batch, avviare l'Agente snapshot di replica eseguendo snapshot.exe, specificando i seguenti argomenti della riga di comando:
- -Pubblicazione
- -Publisher
- -Distributore
- -PublisherDB
- -ReplicationType
Se usi l'autenticazione SQL Server, specifica anche i seguenti argomenti:
- -DistributorLogin
- -DistributorPassword
- -DistributorSecurityMode = 0
- -PublisherLogin
- -PublisherPassword
- = 0
Esempi (Transact-SQL)
Questo esempio mostra come creare una pubblicazione transazionale e aggiungere un processo di agente di snapshot per la nuova pubblicazione (utilizzando le variabili di script di sqlcmd). L'esempio avvia anche il job.
-- To avoid storing the login and password in the script file, the values
-- are passed into SQLCMD as scripting variables. 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".
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2022'; --publication database
SET @publication = N'AdvWorksCustomerTran'; -- transactional publication name
SET @login = $(Login);
SET @password = $(Password);
USE [AdventureWorks]
-- Enable transactional and snapshot replication on the publication database.
EXEC sp_replicationdboption
@dbname = @publicationDB,
@optname = N'publish',
@value = N'true';
-- Execute sp_addlogreader_agent to create the agent job.
EXEC sp_addlogreader_agent
@job_login = @login,
@job_password = @password,
-- Explicitly specify the security mode used when connecting to the Publisher.
@publisher_security_mode = 1;
-- Create new transactional publication, using the defaults.
USE [AdventureWorks2022]
EXEC sp_addpublication
@publication = @publication,
@description = N'transactional publication';
-- Create a new snapshot job for the publication, using the defaults.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password;
-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO
In questo esempio viene creata una pubblicazione di tipo merge e viene aggiunto un processo di agente di snapshot (utilizzando le variabili sqlcmd) per tale pubblicazione. Questo esempio avvia anche il job.
-- To avoid storing the login and password in the script file, the value
-- is passed into SQLCMD as a scripting variable. 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".
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2022';
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @login = $(Login);
SET @password = $(Password);
-- Enable merge replication on the publication database.
USE master
EXEC sp_replicationdboption
@dbname = @publicationDB,
@optname=N'merge publish',
@value = N'true';
-- Create new merge publication, using the defaults.
USE [AdventureWorks]
EXEC sp_addmergepublication
@publication = @publication,
@description = N'Merge publication.';
-- Create a new snapshot job for the publication, using the defaults.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password;
-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO
I seguenti argomenti della riga di comando avviano lo agente di snapshot per generare lo snapshot per una pubblicazione merge.
Nota
Le interruzioni di riga sono state aggiunte per agevolare la lettura. In un file batch, devi effettuare comandi in una singola riga.
REM -- Declare variables
SET Publisher=%InstanceName%
SET PublicationDB=AdventureWorks2022
SET Publication=AdvWorksSalesOrdersMerge
REM --Start the Snapshot Agent to generate the snapshot for AdvWorksSalesOrdersMerge.
"C:\Program Files\Microsoft SQL Server\120\COM\SNAPSHOT.EXE" -Publication %Publication%
-Publisher %Publisher% -Distributor %Publisher% -PublisherDB %PublicationDB%
-ReplicationType 2 -OutputVerboseLevel 1 -DistributorSecurityMode 1
Utilizzo di RMO (Replication Management Objects)
L'agente di snapshot genera istantanee dopo aver creato una pubblicazione. Puoi generare programmaticamente questi snapshot utilizzando i Replication Management Objects (RMO) e l'accesso diretto al codice gestito alle funzionalità degli agenti di replicazione. Gli oggetti utilizzati dipendono dal tipo di replica. Puoi avviare lo agente di snapshot in modo sincrono usando l'oggetto SnapshotGenerationAgent oppure asincronamente usando il job agente. Dopo la generazione dello snapshot iniziale, l'agente di snapshot lo trasferisce all'Abbonato e lo applica quando l'abbonamento viene sincronizzato per la prima volta. Devi rieseguire l'agente ogni volta che lo snapshot esistente non contiene più dati validi e aggiornati. Per altre informazioni, vedere Gestire le pubblicazioni.
Importante
Se possibile, richiedere agli utenti di immettere le credenziali di sicurezza in fase di esecuzione. Se è necessario archiviare le credenziali, utilizzare i servizi di crittografia offerti da Microsoft Windows .NET Framework.
Per generare lo snapshot iniziale per una pubblicazione di tipo snapshot o transazionale avviando il job di agente di snapshot (in modo asincrono)
Creare una connessione al server di pubblicazione tramite la classe ServerConnection .
Creare un'istanza della classe TransPublication. Impostare le proprietà Name e DatabaseName per la pubblicazione, quindi impostare la proprietà ConnectionContext sulla connessione creata nel passaggio 1.
Chiamare il metodo LoadProperties per caricare le proprietà rimanenti dell'oggetto. Se questo metodo restituisce falso, o le proprietà di pubblicazione nel passo 2 sono definite in modo errato oppure la pubblicazione non esiste.
Se il valore di SnapshotAgentExists è false, richiamare CreateSnapshotAgent per creare il job dell'agente snapshot per questa pubblicazione.
Chiamare il metodo StartSnapshotGenerationAgentJob per avviare il processo agente che genera lo snapshot di questa pubblicazione.
(Facoltativo) Quando il valore di SnapshotAvailable è true, lo snapshot è disponibile per i Sottoscrittori.
Per generare lo snapshot iniziale per una pubblicazione di tipo snapshot o transazionale eseguendo l'agente Snapshot (in modalità sincrona)
Creare un'istanza della classe SnapshotGenerationAgent e impostare le seguenti proprietà obbligatorie:
Publisher : nome del server di pubblicazione
PublisherDatabase : nome del database di pubblicazione
Publication : nome della pubblicazione
Distributor : nome del server di distribuzione
PublisherSecurityMode : valore Integrated per utilizzare l'autenticazione di Windows per le connessioni al server di pubblicazione o valore Standard e valori relativi a PublisherLogin e PublisherPassword per utilizzare l'autenticazione di SQL Server per le connessioni al server di pubblicazione. L'autenticazione di Windows è la scelta consigliata.
DistributorSecurityMode : valore Integrated per utilizzare l'autenticazione di Windows per le connessioni al server di distribuzione o valore Standard e valori relativi a DistributorLogin e DistributorPassword per utilizzare l'autenticazione di SQL Server per le connessioni al server di distribuzione. L'autenticazione di Windows è la scelta consigliata.
Impostare il valore Transactional o Snapshot per ReplicationType.
Chiamare il metodo GenerateSnapshot .
Per generare lo snapshot iniziale per una pubblicazione di merge avviando il processo di agente di snapshot (in modo asincrono)
Creare una connessione al server di pubblicazione tramite la classe ServerConnection .
Creare un'istanza della classe MergePublication. Impostare le proprietà Name e DatabaseName per la pubblicazione, quindi impostare la proprietà ConnectionContext sulla connessione creata nel passaggio 1.
Chiamare il metodo LoadProperties per caricare le proprietà rimanenti dell'oggetto. Se questo metodo restituisce falso, o le proprietà di pubblicazione nel passo 2 sono definite in modo errato oppure la pubblicazione non esiste.
Se il valore di SnapshotAgentExists è false, richiamare CreateSnapshotAgent per creare il job dell'agente snapshot per questa pubblicazione.
Chiamare il metodo StartSnapshotGenerationAgentJob per avviare il processo agente che genera lo snapshot di questa pubblicazione.
(Facoltativo) Quando il valore di SnapshotAvailable è true, lo snapshot è disponibile per i Sottoscrittori.
Per generare lo snapshot iniziale per una pubblicazione di tipo merge eseguendo il processo dell'agente snapshot (modo sincrono)
Creare un'istanza della classe SnapshotGenerationAgent e impostare le seguenti proprietà obbligatorie:
Publisher : nome del server di pubblicazione
PublisherDatabase : nome del database di pubblicazione
Publication : nome della pubblicazione
Distributor : nome del server di distribuzione
PublisherSecurityMode : valore Integrated per utilizzare l'autenticazione di Windows per le connessioni al server di pubblicazione o valore Standard e valori relativi a PublisherLogin e PublisherPassword per utilizzare l'autenticazione di SQL Server per le connessioni al server di pubblicazione. L'autenticazione di Windows è la scelta consigliata.
DistributorSecurityMode : valore Integrated per utilizzare l'autenticazione di Windows per le connessioni al server di distribuzione o valore Standard e valori relativi a DistributorLogin e DistributorPassword per utilizzare l'autenticazione di SQL Server per le connessioni al server di distribuzione. L'autenticazione di Windows è la scelta consigliata.
Impostare un valore di Merge per ReplicationType.
Chiamare il metodo GenerateSnapshot .
Esempi (RMO)
In questo esempio viene eseguito l'agente snapshot in modo sincrono per generare lo snapshot iniziale per una pubblicazione transazionale.
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";
string publisherName = publisherInstance;
string distributorName = publisherInstance;
SnapshotGenerationAgent agent;
try
{
// Set the required properties for Snapshot Agent.
agent = new SnapshotGenerationAgent();
agent.Distributor = distributorName;
agent.DistributorSecurityMode = SecurityMode.Integrated;
agent.Publisher = publisherName;
agent.PublisherSecurityMode = SecurityMode.Integrated;
agent.Publication = publicationName;
agent.PublisherDatabase = publicationDbName;
agent.ReplicationType = ReplicationType.Transactional;
// Start the agent synchronously.
agent.GenerateSnapshot();
}
catch (Exception ex)
{
// Implement custom application error handling here.
throw new ApplicationException(String.Format(
"A snapshot could not be generated for the {0} publication."
, publicationName), ex);
}
' Set the Publisher, publication database, and publication names.
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2022"
Dim publisherName As String = publisherInstance
Dim distributorName As String = publisherInstance
Dim agent As SnapshotGenerationAgent
Try
' Set the required properties for Snapshot Agent.
agent = New SnapshotGenerationAgent()
agent.Distributor = distributorName
agent.DistributorSecurityMode = SecurityMode.Integrated
agent.Publisher = publisherName
agent.PublisherSecurityMode = SecurityMode.Integrated
agent.Publication = publicationName
agent.PublisherDatabase = publicationDbName
agent.ReplicationType = ReplicationType.Transactional
' Start the agent synchronously.
agent.GenerateSnapshot()
Catch ex As Exception
' Implement custom application error handling here.
Throw New ApplicationException(String.Format( _
"A snapshot could not be generated for the {0} publication." _
, publicationName), ex)
End Try
In questo esempio si avvia in modo asincrono il job dell'agente Snapshot per generare lo snapshot iniziale per una pubblicazione transazionale.
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";
string publisherName = publisherInstance;
TransPublication publication;
// Create a connection to the Publisher using Windows Authentication.
ServerConnection conn;
conn = new ServerConnection(publisherName);
try
{
// Connect to the Publisher.
conn.Connect();
// Set the required properties for an existing publication.
publication = new TransPublication();
publication.ConnectionContext = conn;
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
if (publication.LoadProperties())
{
// Start the Snapshot Agent job for the publication.
publication.StartSnapshotGenerationAgentJob();
}
else
{
throw new ApplicationException(String.Format(
"The {0} publication does not exist.", publicationName));
}
}
catch (Exception ex)
{
// Implement custom application error handling here.
throw new ApplicationException(String.Format(
"A snapshot could not be generated for the {0} publication."
, publicationName), ex);
}
finally
{
conn.Disconnect();
}
' Set the Publisher, publication database, and publication names.
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2022"
Dim publisherName As String = publisherInstance
Dim publication As TransPublication
' Create a connection to the Publisher using Windows Authentication.
Dim conn As ServerConnection
conn = New ServerConnection(publisherName)
Try
' Connect to the Publisher.
conn.Connect()
' Set the required properties for an existing publication.
publication = New TransPublication()
publication.ConnectionContext = conn
publication.Name = publicationName
publication.DatabaseName = publicationDbName
If publication.LoadProperties() Then
' Start the Snapshot Agent job for the publication.
publication.StartSnapshotGenerationAgentJob()
Else
Throw New ApplicationException(String.Format( _
"The {0} publication does not exist.", publicationName))
End If
Catch ex As Exception
' Implement custom application error handling here.
Throw New ApplicationException(String.Format( _
"A snapshot could not be generated for the {0} publication." _
, publicationName), ex)
Finally
conn.Disconnect()
End Try
Blocco all'applicazione dello snapshot iniziale
Se hai più pubblicazioni che pubblicano dati in un unico database presso gli abbonati, noti che solo una pubblicazione può applicare il proprio snapshot alla volta mentre applica gli snapshot iniziali.
Potresti vedere una risorsa di attesa simile alla seguente quando rivedi l'attività SQL:
APP: 18:16384:[snapshot_delivery_in_progress_Tr]:(9bcdaf92)
APP: 5:16384:[snapshot_delivery_in_progress_Er]:(3c3b7db9)
Interrogare il comportamento di blocco potrebbe mostrare risorse simili alle seguenti:
APP 16384:[appname]:(fbe42d68) XAPP 16384:[snapshot_del]:(9bcdaf92) X
Questo comportamento è impostato a livello di progettazione. Si verifica perché viene usato un blocco dell'applicazione per impedire a più agenti di replica di applicare contemporaneamente snapshot di pubblicazioni diverse allo stesso database sottoscrittore. Poiché il blocco applicativo contiene il nome del database degli abbonati, qualsiasi pubblicazione che pubblica nello stesso database degli abbonati sarà interessata. Il risultato è che è possibile inserire un unico snapshot nel database sottoscrittore in un dato momento.
In questa situazione, vengono usati blocchi in modalità esclusiva per contribuire a evitare che gli agenti di replica vadano in deadlock tra loro.
Per aggirare questo problema, specificare un database sottoscrittore diverso per ogni pubblicazione.
Contenuto correlato
- Creare una pubblicazione
- Crea un abbonamento Pull
- Creare una sottoscrizione push
- Specificare le pianificazioni della sincronizzazione
- Inizia un abbonamento con una istantanea per una nuova pubblicazione
- Concetti sugli Oggetti di Gestione della Replica
- Procedure consigliate per la sicurezza della replica
- Concetti sulle procedure memorizzate del sistema di replica
- Usare sqlcmd con variabili di scripting