Procedura: Creazione dello snapshot iniziale (programmazione RMO)
L'agente snapshot genera gli snapshot al termine della creazione di una pubblicazione. È possibile generare questi snapshot a livello di programmazione tramite gli oggetti RMO (Replication Management Objects) e l'accesso diretto tramite codice gestito alle funzionalità dell'agente di replica. Gli oggetti utilizzati dipendono dal tipo di replica. L'agente snapshot può essere avviato in modo sincrono tramite l'oggetto SnapshotGenerationAgent o in modo asincrono tramite il processo dell'agente. Dopo la generazione, lo snapshot iniziale viene trasferito e applicato al Sottoscrittore la prima volta che la sottoscrizione viene sincronizzata. È necessario rieseguire l'agente ogni volta che lo snapshot esistente non contiene più dati validi e aggiornati. Per ulteriori informazioni, vedere Manutenzione delle pubblicazioni.
Per le pubblicazioni di tipo merge che utilizzano filtri con parametri è necessario uno snapshot a due parti. Per ulteriori informazioni, vedere Procedura: Creazione di uno snapshot per una pubblicazione di tipo merge con filtri con parametri (programmazione RMO).
Nota sulla sicurezza |
---|
Se possibile, richiedere agli utenti di immettere le credenziali di protezione 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 snapshot o transazionale avviando il processo dell'agente snapshot (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 false, le proprietà della pubblicazione sono state definite in modo non corretto nel passaggio 2 oppure la pubblicazione non esiste.
Se il valore di SnapshotAgentExists è false, chiamare CreateSnapshotAgent per creare il processo dell'agente snapshot per questa pubblicazione.
Chiamare il metodo StartSnapshotGenerationAgentJob per avviare il processo dell'agente che genera lo snapshot per la pubblicazione.
(Facoltativo) Quando il valore di SnapshotAvailable è true, lo snapshot è disponibile per i Sottoscrittori.
Per generare lo snapshot iniziale per una pubblicazione snapshot o transazionale 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 il valore Transactional o Snapshot per ReplicationType.
Chiamare il metodo GenerateSnapshot.
Per generare lo snapshot iniziale per una pubblicazione di tipo merge avviando il processo dell'agente snapshot (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 false, le proprietà della pubblicazione sono state definite in modo non corretto nel passaggio 2 oppure la pubblicazione non esiste.
Se il valore di SnapshotAgentExists è false, chiamare CreateSnapshotAgent per creare il processo dell'agente snapshot per questa pubblicazione.
Chiamare il metodo StartSnapshotGenerationAgentJob per avviare il processo dell'agente che genera lo snapshot per la 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.
Esempio
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 = "AdventureWorks2008R2";
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 = "AdventureWorks2008R2"
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 viene avviato l'agente snapshot in modo asincrono per generare lo snapshot iniziale per una pubblicazione transazionale.
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2008R2";
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 = "AdventureWorks2008R2"
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
Vedere anche