다음을 통해 공유


방법: 구독 다시 초기화(RMO 프로그래밍)

각 게시를 다시 초기화하도록 표시하여 다음 동기화 중에 새 스냅숏을 적용할 수 있습니다. RMO(복제 관리 개체)를 사용하여 프로그래밍 방식으로 구독을 다시 초기화할 수 있습니다. 사용되는 클래스는 구독이 속한 게시의 유형과 구독의 유형(밀어넣기 또는 끌어오기 구독)에 따라 다릅니다.

트랜잭션 게시에 대한 끌어오기 구독을 다시 초기화하려면

  1. ServerConnection 클래스를 사용하여 구독자 연결을 만듭니다.

  2. TransPullSubscription 클래스의 인스턴스를 만들고, PublicationName, DatabaseName, PublisherName, PublicationDBNameConnectionContext에 대해 1단계에서 만든 연결을 설정합니다.

  3. LoadProperties 메서드를 호출하여 개체 속성을 가져옵니다.

    [!참고]

    이 메서드가 false를 반환하는 경우 2단계에서 구독 속성이 올바르게 정의되지 않았거나 끌어오기 구독이 없는 것입니다.

  4. Reinitialize 메서드를 호출합니다. 이 메서드는 구독을 다시 초기화하도록 표시합니다.

  5. 끌어오기 구독을 동기화합니다. 자세한 내용은 방법: 끌어오기 구독 동기화(RMO Programming)를 참조하십시오.

트랜잭션 게시에 대한 밀어넣기 구독을 다시 초기화하려면

  1. ServerConnection 클래스를 사용하여 게시자 연결을 만듭니다.

  2. TransSubscription 클래스의 인스턴스를 만들고, PublicationName, DatabaseName, SubscriberName, SubscriptionDBNameConnectionContext에 대해 1단계에서 만든 연결을 설정합니다.

  3. LoadProperties 메서드를 호출하여 개체 속성을 가져옵니다.

    [!참고]

    이 메서드가 false를 반환하는 경우 2단계에서 구독 속성이 올바르게 정의되지 않았거나 밀어넣기 구독이 없는 것입니다.

  4. Reinitialize 메서드를 호출합니다. 이 메서드는 구독을 다시 초기화하도록 표시합니다.

  5. 밀어넣기 구독을 동기화합니다. 자세한 내용은 방법: 밀어넣기 구독 동기화(RMO Programming)를 참조하십시오.

병합 게시에 대한 끌어오기 구독을 다시 초기화하려면

  1. ServerConnection 클래스를 사용하여 구독자 연결을 만듭니다.

  2. MergePullSubscription 클래스의 인스턴스를 만들고, PublicationName, DatabaseName, PublisherName, PublicationDBNameConnectionContext에 대해 1단계에서 만든 연결을 설정합니다.

  3. LoadProperties 메서드를 호출하여 개체 속성을 가져옵니다.

    [!참고]

    이 메서드가 false를 반환하는 경우 2단계에서 구독 속성이 올바르게 정의되지 않았거나 끌어오기 구독이 없는 것입니다.

  4. Reinitialize 메서드를 호출합니다. 다시 초기화하기 전에 구독자의 변경 내용을 업로드하려면 true 값을 전달하고, 다시 초기화할 때 보류 중인 모든 변경 내용을 무시하려면 false를 전달합니다. 이 메서드는 구독을 다시 초기화하도록 표시합니다.

    [!참고]

    구독이 만료되면 변경 내용을 업로드할 수 없습니다. 자세한 내용은 병합 구독이 만료되면 변경 내용을 업로드해야 함을 참조하십시오.

  5. 끌어오기 구독을 동기화합니다. 자세한 내용은 방법: 끌어오기 구독 동기화(RMO Programming)를 참조하십시오.

병합 게시에 대한 밀어넣기 구독을 다시 초기화하려면

  1. ServerConnection 클래스를 사용하여 게시자 연결을 만듭니다.

  2. MergeSubscription 클래스의 인스턴스를 만들고, PublicationName, DatabaseName, SubscriberName, SubscriptionDBNameConnectionContext에 대해 1단계에서 만든 연결을 설정합니다.

  3. LoadProperties 메서드를 호출하여 개체 속성을 가져옵니다.

    [!참고]

    이 메서드가 false를 반환하는 경우 2단계에서 구독 속성이 올바르게 정의되지 않았거나 밀어넣기 구독이 없는 것입니다.

  4. Reinitialize 메서드를 호출합니다. 다시 초기화하기 전에 구독자의 변경 내용을 업로드하려면 true 값을 전달하고, 다시 초기화할 때 보류 중인 모든 변경 내용을 무시하려면 false를 전달합니다. 이 메서드는 구독을 다시 초기화하도록 표시합니다.

    [!참고]

    구독이 만료되면 변경 내용을 업로드할 수 없습니다. 자세한 내용은 병합 구독이 만료되면 변경 내용을 업로드해야 함을 참조하십시오.

  5. 밀어넣기 구독을 동기화합니다. 자세한 내용은 방법: 밀어넣기 구독 동기화(RMO Programming)를 참조하십시오.

다음 예에서는 트랜잭션 게시에 대한 끌어오기 구독을 다시 초기합니다.

          // Define server, publication, and database names.
            String subscriberName = subscriberInstance;
            String publisherName = publisherInstance;
            String publicationName = "AdvWorksProductTran";
            String publicationDbName = "AdventureWorks";
            String subscriptionDbName = "AdventureWorksReplica";

            // Create a connection to the Subscriber.
            ServerConnection conn = new ServerConnection(subscriberName);

            TransPullSubscription subscription;

            try
            {
                // Connect to the Subscriber.
                conn.Connect();

                // Define subscription properties.
                subscription = new TransPullSubscription();
                subscription.ConnectionContext = conn;
                subscription.DatabaseName = subscriptionDbName;
                subscription.PublisherName = publisherName;
                subscription.PublicationDBName = publicationDbName;
                subscription.PublicationName = publicationName;

                // If the pull subscription and the job exists, mark the subscription
                // for reinitialization and start the agent job.
                if (subscription.LoadProperties() && subscription.AgentJobId != null)
                {
                    subscription.Reinitialize();
                    subscription.SynchronizeWithJob();
                }
                else
                {
                    // Do something here if the subscription does not exist.
                    throw new ApplicationException(String.Format(
                        "A subscription to '{0}' does not exists on {1}",
                        publicationName, subscriberName));
                }
            }
            catch (Exception ex)
            {
                // Do appropriate error handling here.
                throw new ApplicationException("The subscription could not be reinitialized.", ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks"
Dim subscriptionDbName As String = "AdventureWorksReplica"

' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

Dim subscription As TransPullSubscription

Try
    ' Connect to the Subscriber.
    conn.Connect()

    ' Define subscription properties.
    subscription = New TransPullSubscription()
    subscription.ConnectionContext = conn
    subscription.DatabaseName = subscriptionDbName
    subscription.PublisherName = publisherName
    subscription.PublicationDBName = publicationDbName
    subscription.PublicationName = publicationName

    ' If the pull subscription and the job exists, mark the subscription
    ' for reinitialization and start the agent job.
    If subscription.LoadProperties() And (Not subscription.AgentJobId Is Nothing) Then
        subscription.Reinitialize()
        subscription.SynchronizeWithJob()
    Else
        ' Do something here if the subscription does not exist.
        Throw New ApplicationException(String.Format( _
         "A subscription to '{0}' does not exists on {1}", _
         publicationName, subscriberName))
    End If
Catch ex As Exception
    ' Do appropriate error handling here.
    Throw New ApplicationException("The subscription could not be reinitialized.", ex)
Finally
    conn.Disconnect()
End Try

다음 예에서는 구독자에서 보류 중인 변경 내용을 먼저 업로드한 다음 병합 게시에 대한 끌어오기 구독을 다시 초기화합니다.

         // Define server, publication, and database names.
            String subscriberName = subscriberInstance;
            String publisherName = publisherInstance;
            String publicationName = "AdvWorksSalesOrdersMerge";
            String publicationDbName = "AdventureWorks";
            String subscriptionDbName = "AdventureWorksReplica";

            // Create a connection to the Subscriber.
            ServerConnection conn = new ServerConnection(subscriberName);

            MergePullSubscription subscription;

            try
            {
                // Connect to the Subscriber.
                conn.Connect();

                // Define subscription properties.
                subscription = new MergePullSubscription();
                subscription.ConnectionContext = conn;
                subscription.DatabaseName = subscriptionDbName;
                subscription.PublisherName = publisherName;
                subscription.PublicationDBName = publicationDbName;
                subscription.PublicationName = publicationName;

                // If the pull subscription and the job exists, mark the subscription
                // for reinitialization after upload and start the agent job.
                if (subscription.LoadProperties() && subscription.AgentJobId != null)
                {
                    subscription.Reinitialize(true);
                    subscription.SynchronizeWithJob();
                }
                else
                {
                    // Do something here if the subscription does not exist.
                    throw new ApplicationException(String.Format(
                        "A subscription to '{0}' does not exists on {1}",
                        publicationName, subscriberName));
                }
            }
            catch (Exception ex)
            {
                // Do appropriate error handling here.
                throw new ApplicationException("The subscription could not be synchronized.", ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks"
Dim subscriptionDbName As String = "AdventureWorksReplica"

' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

Dim subscription As MergePullSubscription

Try
    ' Connect to the Subscriber.
    conn.Connect()

    ' Define subscription properties.
    subscription = New MergePullSubscription()
    subscription.ConnectionContext = conn
    subscription.DatabaseName = subscriptionDbName
    subscription.PublisherName = publisherName
    subscription.PublicationDBName = publicationDbName
    subscription.PublicationName = publicationName

    ' If the pull subscription and the job exists, mark the subscription
    ' for reinitialization after upload and start the agent job.
    If subscription.LoadProperties() And (Not subscription.AgentJobId Is Nothing) Then
        subscription.Reinitialize(True)
        subscription.SynchronizeWithJob()
    Else
        ' Do something here if the subscription does not exist.
        Throw New ApplicationException(String.Format( _
         "A subscription to '{0}' does not exists on {1}", _
         publicationName, subscriberName))
    End If
Catch ex As Exception
    ' Do appropriate error handling here.
    Throw New ApplicationException("The subscription could not be synchronized.", ex)
Finally
    conn.Disconnect()
End Try