Поделиться через


Как создать исходный моментальный снимок (программирование объектов RMO)

После создания публикации агент моментальных снимков создает моментальный снимок. Создание моментального снимка и прямой доступ из управляемого кода к функциям агента репликации могут производиться программным путем с помощью объектов RMO. Какие именно объекты при этом применяются, зависит от типа репликации. Агент моментальных снимков может быть запущен как синхронно с помощью объекта SnapshotGenerationAgent, так и в асинхронном режиме из задания агента. После создания исходного моментального снимка он передается на сервер подписчика и применяется при первом сеансе синхронизации подписки. Когда данные в существующем моментальном снимке устарели, соответствующий ему агент должен быть запущен повторно. Дополнительные сведения см. в разделе Обслуживание публикаций.

Публикации слиянием, использующие параметризованные фильтры, требуют моментальных снимков, состоящих из двух частей. Дополнительные сведения см. в разделе Как создать моментальный снимок для публикации слиянием с параметризованными фильтрами (программирование объектов RMO).

Примечание по безопасностиПримечание по безопасности

При возможности предлагайте пользователям вводить учетные данные системы безопасности во время выполнения. Если необходимо хранить учетные данные, используйте службы шифрования, предоставляемые платформой Microsoft Windows .NET Framework.

Создание исходного моментального снимка для публикации транзакций или моментальных снимков из задания агента моментальных снимков (в асинхронном режиме)

  1. Создайте соединение с издателем с помощью класса ServerConnection.

  2. Создайте экземпляр класса TransPublication. Задайте для публикации свойства Name и DatabaseName, а также установите созданное на шаге 1 соединение ServerConnection в качестве значения для свойства.

  3. Вызовите метод LoadProperties, чтобы загрузить оставшиеся свойства объекта. Если этот метод возвращает false, то либо на шаге 2 были неверно определены свойства публикации, либо публикация не существует.

  4. Если значение SnapshotAgentExists равно false, то для создания задания агента моментальных снимков для этой публикации вызовите метод CreateSnapshotAgent.

  5. Вызовите метод StartSnapshotGenerationAgentJob, чтобы запустить задание агента, которое создает моментальный снимок для этой публикации.

  6. Если параметр SnapshotAvailable имеет значение true, моментальный снимок доступен для подписчиков (необязательно).

Создание исходного моментального снимка для публикации транзакций или моментальных снимков запуском агента моментальных снимков (в синхронном режиме)

  1. Создайте экземпляр класса SnapshotGenerationAgent и укажите следующие необходимые свойства.

    • Publisher — имя издателя.

    • PublisherDatabase — имя базы данных публикации.

    • Publication — имя публикации.

    • Distributor — имя распространителя.

    • PublisherSecurityMode — значение параметра Integrated, чтобы использовать проверку подлинности Windows для соединения с издателем, или значение Standard и значения параметров PublisherLogin и PublisherPassword, чтобы использовать проверку подлинности SQL Server для соединения с издателем. Рекомендуется использовать проверку подлинности Windows.

    • DistributorSecurityMode — значение параметра Integrated, чтобы использовать проверку подлинности Windows для соединения с распространителем, или значение Standard и значения параметров DistributorLogin и DistributorPassword, чтобы использовать проверку подлинности SQL Server для соединения с распространителем. Рекомендуется использовать проверку подлинности Windows.

  2. Укажите значение Transactional или Snapshot в параметре ReplicationType.

  3. Вызовите метод GenerateSnapshot.

Создание исходного моментального снимка для публикации слиянием из задания агента моментальных снимков (в асинхронном режиме)

  1. Создайте соединение с издателем с помощью класса ServerConnection.

  2. Создайте экземпляр класса MergePublication. Задайте для публикации свойства Name и DatabaseName, а также установите созданное на шаге 1 соединение ServerConnection в качестве значения для свойства.

  3. Вызовите метод LoadProperties, чтобы загрузить оставшиеся свойства объекта. Если этот метод возвращает false, то либо на шаге 2 были неверно определены свойства публикации, либо публикация не существует.

  4. Если значение SnapshotAgentExists равно false, то для создания задания агента моментальных снимков для этой публикации вызовите метод CreateSnapshotAgent.

  5. Вызовите метод StartSnapshotGenerationAgentJob, чтобы запустить задание агента, которое создает моментальный снимок для этой публикации.

  6. Если параметр SnapshotAvailable имеет значение true, моментальный снимок доступен для подписчиков (необязательно).

Создание исходного моментального снимка для публикации слиянием запуском агента моментальных снимков (в синхронном режиме)

  1. Создайте экземпляр класса SnapshotGenerationAgent и укажите следующие необходимые свойства.

    • Publisher — имя издателя.

    • PublisherDatabase — имя базы данных публикации.

    • Publication — имя публикации.

    • Distributor — имя распространителя.

    • PublisherSecurityMode — значение параметра Integrated, чтобы использовать проверку подлинности Windows для соединения с издателем, или значение Standard и значения параметров PublisherLogin и PublisherPassword, чтобы использовать проверку подлинности SQL Server для соединения с издателем. Рекомендуется использовать проверку подлинности Windows.

    • DistributorSecurityMode — значение параметра Integrated, чтобы использовать проверку подлинности Windows для соединения с распространителем, или значение Standard и значения параметров DistributorLogin и DistributorPassword, чтобы использовать проверку подлинности SQL Server для соединения с распространителем. Рекомендуется использовать проверку подлинности Windows.

  2. Укажите значение Merge в параметре ReplicationType.

  3. Вызовите метод GenerateSnapshot.

Пример

В следующем примере производится синхронный запуск агента моментальных снимков, который создает исходный моментальный снимок публикации транзакций.

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

В следующем примере производится асинхронный запуск задания агента моментальных снимков, который создает исходный моментальный снимок публикации транзакций.

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