How to: Create the Initial Snapshot (RMO Programming)
The Snapshot Agent generates snapshots after a publication is created. You can generate these snapshots programmatically by using Replication Management Objects (RMO) and direct managed code access to replication agent functionalities. The objects you use depend on the type of replication. The Snapshot Agent can be started synchronously using the SnapshotGenerationAgent object or asynchronously using the agent job. After the initial snapshot has been generated, it is transferred to and applied at the Subscriber when the subscription is first synchronized. You will need to rerun the agent whenever the existing snapshot no longer contains valid, up-to-date data. For more information, see Maintaining Publications.
Merge publications that use parameterized filters require a two-part snapshot. For more information, see How to: Create a Snapshot for a Merge Publication with Parameterized Filters (RMO Programming).
Security Note |
---|
When possible, prompt users to enter security credentials at runtime. If you must store credentials, use the cryptographic services provided by the Microsoft Windows .NET Framework. |
To generate the initial snapshot for a snapshot or transactional publication by starting the Snapshot Agent job (asynchronous)
Create a connection to the Publisher by using the ServerConnection class.
Create an instance of the TransPublication class. Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the connection created in step 1.
Call the LoadProperties method to load the remaining properties of the object. If this method returns false, either the publication properties in step 2 were defined incorrectly or the publication does not exist.
If the value of SnapshotAgentExists is false, call CreateSnapshotAgent to create the snapshot agent job for this publication.
Call the StartSnapshotGenerationAgentJob method to start the agent job that generates the snapshot for this publication.
(Optional) When the value of SnapshotAvailable is true, the snapshot is available to Subscribers.
To generate the initial snapshot for a snapshot or transactional publication by running the Snapshot Agent (synchronous)
Create an instance of the SnapshotGenerationAgent class, and set the following required properties:
Publisher - name of the Publisher
PublisherDatabase - name of the publication database
Publication - name of the publication
Distributor - name of the Distributor
PublisherSecurityMode - a value of Integrated to use Windows Authentication when connecting to the Publisher or a value of Standard and values for PublisherLogin and PublisherPassword to use SQL Server Authentication when connecting to the Publisher. Windows Authentication is recommended.
DistributorSecurityMode - a value of Integrated to use Windows Authentication when connecting to the Distributor or a value of Standard and values for DistributorLogin and DistributorPassword to use SQL Server Authentication when connecting to the Distributor. Windows Authentication is recommended.
Set a value of Transactional or Snapshot for ReplicationType.
Call the GenerateSnapshot method.
To generate the initial snapshot for a merge publication by starting the Snapshot Agent job (asynchronous)
Create a connection to the Publisher by using the ServerConnection class.
Create an instance of the MergePublication class. Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the connection created in step 1.
Call the LoadProperties method to load the remaining properties of the object. If this method returns false, either the publication properties in step 2 were defined incorrectly or the publication does not exist.
If the value of SnapshotAgentExists is false, call CreateSnapshotAgent to create the snapshot agent job for this publication.
Call the StartSnapshotGenerationAgentJob method to start the agent job that generates the snapshot for this publication.
(Optional) When the value of SnapshotAvailable is true, the snapshot is available to Subscribers.
To generate the initial snapshot for a merge publication by running the Snapshot Agent (synchronous)
Create an instance of the SnapshotGenerationAgent class, and set the following required properties:
Publisher - name of the Publisher
PublisherDatabase - name of the publication database
Publication - name of the publication
Distributor - name of the Distributor
PublisherSecurityMode - a value of Integrated to use Windows Authentication when connecting to the Publisher or a value of Standard and values for PublisherLogin and PublisherPassword to use SQL Server Authentication when connecting to the Publisher. Windows Authentication is recommended.
DistributorSecurityMode - a value of Integrated to use Windows Authentication when connecting to the Distributor or a value of Standard and values for DistributorLogin and DistributorPassword to use SQL Server Authentication when connecting to the Distributor. Windows Authentication is recommended.
Set a value of Merge for ReplicationType.
Call the GenerateSnapshot method.
Example
This example synchronously runs the Snapshot Agent to generate the initial snapshot for a transactional publication.
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks";
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 = "AdventureWorks"
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
This example asynchronously starts the agent job to generate the initial snapshot for a transactional publication.
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks";
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 = "AdventureWorks"
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