끌어오기 구독 동기화Synchronize a Pull Subscription

이 항목 적용 대상: 예SQL Server없습니다Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse 이 항목에서는 SQL Server Management StudioSQL Server Management Studio, 복제 에이전트 또는 RMO(복제 관리 개체)를 사용하여 SQL Server 2017SQL Server 2017에서 끌어오기 구독을 동기화하는 방법에 대해 설명합니다. This topic describes how to synchronize a pull subscription in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio, replication agents, or Replication Management Objects (RMO).

항목 내용In This Topic

SQL Server Management Studio 사용Using SQL Server Management Studio

구독은 배포 에이전트(스냅숏 및 트랜잭션 복제의 경우) 또는 병합 에이전트(병합 복제의 경우)에 의해 동기화됩니다.Subscriptions are synchronized by the Distribution Agent (for snapshot and transactional replication) or the Merge Agent (for merge replication). 에이전트는 지속적으로 실행하거나 수요에 따라 실행하거나 일정에 따라 실행할 수 있습니다.Agents can run continuously, run on demand, or run on a schedule. 동기화 일정을 설정하는 방법은 동기화 일정 지정을 참조하세요.For more information about specifying synchronization schedules, see Specify Synchronization Schedules.

로컬 구독 SQL Server Management StudioSQL Server Management Studio폴더에서 요청 시 구독을 동기화합니다.Synchronize a subscription on demand from the Local Subscriptions folder in SQL Server Management StudioSQL Server Management Studio.

Management Studio에서 요청 시 끌어오기 구독을 동기화하려면To synchronize a pull subscription on demand in Management Studio

  1. Management StudioManagement Studio에서 구독자에 연결한 다음 해당 서버 노드를 확장합니다.Connect to the Subscriber in Management StudioManagement Studio, and then expand the server node.

  2. 복제 폴더를 확장한 다음 로컬 구독 폴더를 확장합니다.Expand the Replication folder, and then expand the Local Subscriptions folder.

  3. 동기화할 구독을 마우스 오른쪽 단추로 클릭한 다음 동기화 상태 보기를 클릭합니다.Right-click the subscription you want to synchronize, and then click View Synchronization Status.

  4. 동기화 상태 보기 - <Subscriber>:<SubscriptionDatabase> 대화 상자에서 시작을 클릭합니다.In the View Synchronization Status - <Subscriber>:<SubscriptionDatabase> dialog box, click Start. 동기화가 완료되면 동기화 완료 라는 메시지가 표시됩니다.When synchronization is complete, the message Synchronization completed is displayed.

  5. 닫기를 클릭합니다.Click Close.

Replication AgentsReplication Agents

끌어오기 구독은 명령 프롬프트에서 적합한 복제 에이전트 실행 파일을 호출하여 프로그래밍 방식으로 요청 시 동기화할 수 있습니다.Pull subscriptions can be synchronized programmatically and on-demand by invoking the appropriate replication agent executable file from the command prompt. 호출한 복제 에이전트 실행 파일은 끌어오기 구독이 속한 게시 유형에 따라 달라집니다.The replication agent executable file that is invoked will depend on the type of publication to which the pull subscription belongs. 자세한 내용은 Replication Agents을 참조하세요.For more information, see Replication Agents.

참고

복제 에이전트는 명령 프롬프트에서 에이전트를 시작한 사용자의 Windows 인증 자격 증명을 사용하여 로컬 서버에 연결합니다.Replication agents connect to the local server using the Windows Authentication credentials of the user who started the agent from the command prompt. 이러한 자격 증명은 Windows 통합 인증을 사용하여 원격 서버에 연결할 때도 사용됩니다.These Windows credentials are also used when connecting to remote servers using Windows Integrated Authentication.

명령 프롬프트 또는 배치 파일에서 배포 에이전트를 시작하려면To start the distribution agent from the command prompt or from a batch file

  1. _명령 프롬프트 또는 배치 파일에서 distrib.exe 를 실행하여 복제 배포 에이전트를 시작하고 다음 명령줄 인수를 지정합니다.From the command prompt or in a batch file, start the Replication Distribution Agent by running distrib.exe, specifying the following command-line arguments:

    • -Publisher-Publisher

    • -PublisherDB-PublisherDB

    • -Distributor-Distributor

    • -DistributorSecurityMode = 1-DistributorSecurityMode = 1

    • -Subscriber-Subscriber

    • -SubscriberDB-SubscriberDB

    • -SubscriberSecurityMode = 1-SubscriberSecurityMode = 1

    • -SubscriptionType = 1-SubscriptionType = 1

      SQL ServerSQL Server 인증을 사용하는 경우 다음 인수도 지정해야 합니다.If you are using SQL ServerSQL Server Authentication, you must also specify the following arguments:

    • -DistributorLogin-DistributorLogin

    • -DistributorPassword-DistributorPassword

    • -DistributorSecurityMode = @publisher_security_mode-DistributorSecurityMode = 0

    • -PublisherLogin-PublisherLogin

    • -PublisherPassword-PublisherPassword

    • -PublisherSecurityMode = 0-PublisherSecurityMode = 0

    • -SubscriberLogin-SubscriberLogin

    • -SubscriberPassword-SubscriberPassword

    • -SubscriberSecurityMode = 0-SubscriberSecurityMode = 0

명령 프롬프트 또는 배치 파일에서 병합 에이전트를 시작하려면To start the merge agent from the command prompt or from a batch file

  1. 명령 프롬프트 또는 배치 파일에서 replmerg.exe 를 실행하여 복제 병합 에이전트를 시작하고 다음 명령줄 인수를 지정합니다.From the command prompt or in a batch file, start the Replication Merge Agent by running replmerg.exe, specifying the following command-line arguments:

    • -Publisher-Publisher

    • -PublisherDB-PublisherDB

    • -PublisherSecurityMode = 1-PublisherSecurityMode = 1

    • -Publication-Publication

    • -Distributor-Distributor

    • -DistributorSecurityMode = 1-DistributorSecurityMode = 1

    • -Subscriber-Subscriber

    • -SubscriberSecurityMode = 1-SubscriberSecurityMode = 1

    • -SubscriberDB-SubscriberDB

    • -SubscriptionType = 1-SubscriptionType = 1

      SQL ServerSQL Server 인증을 사용하는 경우 다음 인수도 지정해야 합니다.If you are using SQL ServerSQL Server Authentication, you must also specify the following arguments:

    • -DistributorLogin-DistributorLogin

    • -DistributorPassword-DistributorPassword

    • -DistributorSecurityMode = @publisher_security_mode-DistributorSecurityMode = 0

    • -PublisherLogin-PublisherLogin

    • -PublisherPassword-PublisherPassword

    • -PublisherSecurityMode = 0-PublisherSecurityMode = 0

    • -SubscriberLogin-SubscriberLogin

    • -SubscriberPassword-SubscriberPassword

    • -SubscriberSecurityMode = 0-SubscriberSecurityMode = 0

예(복제 에이전트)Examples (Replication Agents)

다음 예에서는 배포 에이전트를 시작하여 끌어오기 구독을 동기화합니다.The following example starts the Distribution Agent to synchronize a pull subscription. 모든 연결은 Windows 인증을 사용하여 만듭니다.All connections are made using Windows Authentication.

 -- Declare the variables.  
SET Publisher=%instancename%  
SET Subscriber=%instancename%  
SET PublicationDB=AdventureWorks  
SET SubscriptionDB=AdventureWorksReplica   
SET Publication=AdvWorksProductsTran  

-- Start the Distribution Agent.  
-- The following command must be supplied without line breaks.  
"C:\Program Files\Microsoft SQL Server\100\COM\DISTRIB.EXE" -Subscriber %Subscriber%   
-SubscriberDB %SubscriptionDB% -SubscriberSecurityMode 1 -Publication %Publication%   
-Publisher %Publisher% -PublisherDB %PublicationDB% -Distributor %Publisher%   
-DistributorSecurityMode 1 -Continuous -SubscriptionType 1;  

다음 예에서는 병합 에이전트를 시작하여 끌어오기 구독을 동기화합니다.The following example starts the Merge Agent to synchronize a pull subscription. 모든 연결은 Windows 인증을 사용하여 만듭니다.All connections are made using Windows Authentication.

-- Declare the variables.  
SET Publisher=%instancename%  
SET Subscriber=%instancename%  
SET PublicationDB=AdventureWorks  
SET SubscriptionDB=AdventureWorksReplica   
SET Publication=AdvWorksSalesOrdersMerge  

--Start the Merge Agent with concurrent upload and download processes.  
-- The following command must be supplied without line breaks.  
"C:\Program Files\Microsoft SQL Server\100\COM\REPLMERG.EXE" -Publication %Publication%    
-Publisher %Publisher%  -Subscriber  %Subscriber%  -Distributor %Publisher%    
-PublisherDB %PublicationDB%  -SubscriberDB %SubscriptionDB% -PublisherSecurityMode 1    
-OutputVerboseLevel 2  -SubscriberSecurityMode 1  -SubscriptionType 1 -DistributorSecurityMode 1    
-Validate 3  -ParallelUploadDownload 1 ;  

RMO(복제 관리 개체) 사용Using Replication Management Objects (RMO)

RMO(복제 관리 개체) 및 관리 코드 액세스를 사용하여 복제 에이전트 기능에 프로그래밍 방식으로 끌어오기 구독을 동기화할 수 있습니다.You can synchronize pull subscriptions programmatically by using Replication Management Objects (RMO) and managed code access to replication agent functionalities. 끌어오기 구독을 동기화하는 데 사용하는 클래스는 구독이 속한 게시 유형에 따라 달라집니다.The classes you use to synchronize a pull subscription depend on the type of publication to which the subscription belongs.

참고

동기화가 응용 프로그램에 영향을 미치지 않고 자율적으로 실행하도록 하려면 에이전트를 비동기적으로 시작합니다.If you want to start a synchronization that runs autonomously without affecting your application, start the agent asynchronously. 그러나 진행률 표시줄을 표기하기 위해 동기화 프로세스 동안 동기화 결과를 모니터링하고 에이전트에서 콜백을 받으려면 에이전트를 동기적으로 시작해야 합니다.However, if you want to monitor the outcome of the synchronization and receive callbacks from the agent during the synchronization process (for example, to display a progress bar), you should start the agent synchronously. For MicrosoftMicrosoft SQL Server 2005 Express EditionSQL Server 2005 Express Edition 구독자의 경우 에이전트를 동기적으로 시작해야 합니다.For MicrosoftMicrosoft SQL Server 2005 Express EditionSQL Server 2005 Express Edition Subscribers, you must start the agent synchronously.

스냅숏 또는 트랜잭션 게시에 끌어오기 구독을 동기화하려면To synchronize a pull subscription to a snapshot or transactional publication

  1. ServerConnection 클래스를 사용하여 구독자 연결을 만듭니다.Create a connection to the Subscriber by using the ServerConnection class.

  2. TransPullSubscription 클래스의 인스턴스를 만들고 다음 속성을 설정합니다.Create an instance of the TransPullSubscription class, and set the following properties:

  3. LoadProperties 메서드를 호출하여 나머지 구독 속성을 얻습니다.Call the LoadProperties method to get the remaining subscription properties. 이 메서드가 false를 반환하는 경우 구독이 있는지 확인합니다.If this method returns false, verify that the subscription exists.

  4. 다음 방법 중 하나로 구독자에서 배포 에이전트를 시작합니다.Start the Distribution Agent at the Subscriber in one of the following ways:

병합 게시에 끌어오기 구독을 동기화하려면To synchronize a pull subscription to a merge publication

  1. ServerConnection 클래스를 사용하여 구독자 연결을 만듭니다.Create a connection to the Subscriber by using the ServerConnection class.

  2. MergePullSubscription 클래스의 인스턴스를 만들고 다음 속성을 설정합니다.Create an instance of the MergePullSubscription class, and set the following properties:

  3. LoadProperties 메서드를 호출하여 나머지 구독 속성을 얻습니다.Call the LoadProperties method to get the remaining subscription properties. 이 메서드가 false를 반환하는 경우 구독이 있는지 확인합니다.If this method returns false, verify that the subscription exists.

  4. 다음 방법 중 하나로 구독자에서 병합 에이전트를 시작합니다.Start the Merge Agent at the Subscriber in one of the following ways:

예(RMO)Examples (RMO)

다음은 트랜잭션 게시에 끌어오기 구독을 동기화하는 예로, 에이전트 작업을 사용하여 에이전트를 비동기적으로 시작합니다.This example synchronizes a pull subscription to a transactional publication, where the agent is started asynchronously using the agent job.

// 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, start the agent job.  
    if (subscription.LoadProperties() && subscription.AgentJobId != null)  
    {  
        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 = "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, start the agent job.  
    If subscription.LoadProperties() And Not subscription.AgentJobId Is Nothing Then  
        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  

다음은 트랜잭션 게시에 끌어오기 구독을 동기화하는 예로, 에이전트를 동기적으로 시작합니다.This example synchronizes a pull subscription to a transactional publication, where the agent is started synchronously.

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

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

TransPullSubscription subscription;  

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

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

    // If the pull subscription exists, then start the synchronization.  
    if (subscription.LoadProperties())  
    {  
        // Check that we have enough metadata to start the agent.  
        if (subscription.PublisherSecurity != null)  
        {  
            // Synchronously start the Distribution Agent for the subscription.  
            subscription.SynchronizationAgent.Synchronize();  
        }  
        else  
        {  
            throw new ApplicationException("There is insufficent metadata to " +  
                "synchronize the subscription. Recreate the subscription with " +  
                "the agent job or supply the required agent properties at run time.");  
        }  
    }  
    else  
    {  
        // Do something here if the pull subscription does not exist.  
        throw new ApplicationException(String.Format(  
            "A subscription to '{0}' does not exist on {1}",  
            publicationName, subscriberName));  
    }  
}  
catch (Exception ex)  
{  
    // Implement appropriate error handling here.  
    throw new ApplicationException("The subscription could not be " +  
        "synchronized. Verify that the subscription has " +  
        "been defined correctly.", ex);  
}  
finally  
{  
    conn.Disconnect();  
}  
' Define the server, publication, and database names.  
Dim subscriberName As String = subscriberInstance  
Dim publisherName As String = publisherInstance  
Dim publicationName As String = "AdvWorksProductTran"  
Dim subscriptionDbName As String = "AdventureWorksReplica"  
Dim publicationDbName As String = "AdventureWorks"  

' 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 the pull subscription.  
    subscription = New TransPullSubscription()  
    subscription.ConnectionContext = conn  
    subscription.DatabaseName = subscriptionDbName  
    subscription.PublisherName = publisherName  
    subscription.PublicationDBName = publicationDbName  
    subscription.PublicationName = publicationName  

    ' If the pull subscription exists, then start the synchronization.  
    If subscription.LoadProperties() Then  
        ' Check that we have enough metadata to start the agent.  
        If Not subscription.PublisherSecurity Is Nothing Then  

            ' Write agent output to a log file.  
            subscription.SynchronizationAgent.Output = "distagent.log"  
            subscription.SynchronizationAgent.OutputVerboseLevel = 2  

            ' Synchronously start the Distribution Agent for the subscription.  
            subscription.SynchronizationAgent.Synchronize()  
        Else  
            Throw New ApplicationException("There is insufficent metadata to " + _  
             "synchronize the subscription. Recreate the subscription with " + _  
             "the agent job or supply the required agent properties at run time.")  
        End If  
    Else  
        ' Do something here if the pull subscription does not exist.  
        Throw New ApplicationException(String.Format( _  
         "A subscription to '{0}' does not exist on {1}", _  
         publicationName, subscriberName))  
    End If  
Catch ex As Exception  
    ' Implement appropriate error handling here.  
    Throw New ApplicationException("The subscription could not be " + _  
     "synchronized. Verify that the subscription has " + _  
     "been defined correctly.", ex)  
Finally  
    conn.Disconnect()  
End Try  

다음은 병합 게시에 끌어오기 구독을 동기화하는 예로, 에이전트 작업을 사용하여 에이전트를 비동기적으로 시작합니다.This example synchronizes a pull subscription to a merge publication, where the agent is started asynchronously using the agent job.

// 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, start the agent job.  
    if (subscription.LoadProperties() && subscription.AgentJobId != null)  
    {  
        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, start the agent job.  
    If subscription.LoadProperties() And Not subscription.AgentJobId Is Nothing Then  
        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  

다음은 병합 게시에 끌어오기 구독을 동기화하는 예로, 에이전트를 동기적으로 시작합니다.This example synchronizes a pull subscription to a merge publication, where the agent is started synchronously.

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

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

MergePullSubscription subscription;  

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

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

    // If the pull subscription exists, then start the synchronization.  
    if (subscription.LoadProperties())  
    {  
        // Check that we have enough metadata to start the agent.  
        if (subscription.PublisherSecurity != null || subscription.DistributorSecurity != null)  
        {  
            // Synchronously start the Merge Agent for the subscription.  
            subscription.SynchronizationAgent.Synchronize();  
        }  
        else  
        {  
            throw new ApplicationException("There is insufficent metadata to " +  
                "synchronize the subscription. Recreate the subscription with " +  
                "the agent job or supply the required agent properties at run time.");  
        }  
    }  
    else  
    {  
        // Do something here if the pull subscription does not exist.  
        throw new ApplicationException(String.Format(  
            "A subscription to '{0}' does not exist on {1}",  
            publicationName, subscriberName));  
    }  
}  
catch (Exception ex)  
{  
    // Implement appropriate error handling here.  
    throw new ApplicationException("The subscription could not be " +  
        "synchronized. Verify that the subscription has " +  
        "been defined correctly.", ex);  
}  
finally  
{  
    conn.Disconnect();  
}  
' Define the server, publication, and database names.  
Dim subscriberName As String = subscriberInstance  
Dim publisherName As String = publisherInstance  
Dim publicationName As String = "AdvWorksSalesOrdersMerge"  
Dim subscriptionDbName As String = "AdventureWorksReplica"  
Dim publicationDbName As String = "AdventureWorks"  

' 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 the pull subscription.  
    subscription = New MergePullSubscription()  
    subscription.ConnectionContext = conn  
    subscription.DatabaseName = subscriptionDbName  
    subscription.PublisherName = publisherName  
    subscription.PublicationDBName = publicationDbName  
    subscription.PublicationName = publicationName  

    ' If the pull subscription exists, then start the synchronization.  
    If subscription.LoadProperties() Then  
        ' Check that we have enough metadata to start the agent.  
        If Not subscription.PublisherSecurity Is Nothing Or subscription.DistributorSecurity Is Nothing Then  

            ' Output agent messages to the console.   
            subscription.SynchronizationAgent.OutputVerboseLevel = 1  
            subscription.SynchronizationAgent.Output = ""  

            ' Synchronously start the Merge Agent for the subscription.  
            subscription.SynchronizationAgent.Synchronize()  
        Else  
            Throw New ApplicationException("There is insufficent metadata to " + _  
             "synchronize the subscription. Recreate the subscription with " + _  
             "the agent job or supply the required agent properties at run time.")  
        End If  
    Else  
        ' Do something here if the pull subscription does not exist.  
        Throw New ApplicationException(String.Format( _  
         "A subscription to '{0}' does not exist on {1}", _  
         publicationName, subscriberName))  
    End If  
Catch ex As Exception  
    ' Implement appropriate error handling here.  
    Throw New ApplicationException("The subscription could not be " + _  
     "synchronized. Verify that the subscription has " + _  
     "been defined correctly.", ex)  
Finally  
    conn.Disconnect()  
End Try  

다음은 웹 동기화를 사용하여 병합 게시에 끌어오기 구독을 동기화하는 예입니다.This example synchronizes a pull subscription to a merge publication using Web synchronization. 에이전트 작업 및 관련 구독 메타데이터를 사용하지 않고 구독을 만들었으므로 에이전트를 동기적으로 시작한 다음 추가 구독 정보를 제공해야 합니다.The subscription was created without the agent job and related subscription metadata, so the agent must be started synchronously and additional subscription information is supplied.

// Define the server, publication, and database names.  
string subscriberName = subscriberInstance;  
string publisherName = publisherInstance;  
string distributorName = distributorInstance;  
string publicationName = "AdvWorksSalesOrdersMerge";  
string subscriptionDbName = "AdventureWorksReplica";  
string publicationDbName = "AdventureWorks";  
string hostname = @"adventure-works\garrett1";  
string webSyncUrl = "https://" + publisherInstance + "/SalesOrders/replisapi.dll";  

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

MergePullSubscription subscription;  
MergeSynchronizationAgent agent;  

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

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

    // If the pull subscription exists, then start the synchronization.  
    if (subscription.LoadProperties())  
    {  
        // Get the agent for the subscription.  
        agent = subscription.SynchronizationAgent;  

        // Check that we have enough metadata to start the agent.  
        if (agent.PublisherSecurityMode == null)  
        {  
            // Set the required properties that could not be returned  
            // from the MSsubscription_properties table.   
            agent.PublisherSecurityMode = SecurityMode.Integrated;  
            agent.DistributorSecurityMode = SecurityMode.Integrated;  
            agent.Distributor = publisherName;  
            agent.HostName = hostname;  

            // Set optional Web synchronization properties.  
            agent.UseWebSynchronization = true;  
            agent.InternetUrl = webSyncUrl;  
            agent.InternetSecurityMode = SecurityMode.Standard;  
            agent.InternetLogin = winLogin;  
            agent.InternetPassword = winPassword;  
        }  
        // Enable agent output to the console.  
        agent.OutputVerboseLevel = 1;  
        agent.Output = "";  

        // Synchronously start the Merge Agent for the subscription.  
        agent.Synchronize();  
    }  
    else  
    {  
        // Do something here if the pull subscription does not exist.  
        throw new ApplicationException(String.Format(  
            "A subscription to '{0}' does not exist on {1}",  
            publicationName, subscriberName));  
    }  
}  
catch (Exception ex)  
{  
    // Implement appropriate error handling here.  
    throw new ApplicationException("The subscription could not be " +  
        "synchronized. Verify that the subscription has " +  
        "been defined correctly.", ex);  
}  
finally  
{  
    conn.Disconnect();  
}  
' Define the server, publication, and database names.  
Dim subscriberName As String = subscriberInstance  
Dim publisherName As String = publisherInstance  
Dim publicationName As String = "AdvWorksSalesOrdersMerge"  
Dim subscriptionDbName As String = "AdventureWorksReplica"  
Dim publicationDbName As String = "AdventureWorks"  
Dim hostname As String = "adventure-works\garrett1"  
Dim webSyncUrl As String = "https://" + publisherInstance + "/SalesOrders/replisapi.dll"  

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

Dim subscription As MergePullSubscription  
Dim agent As MergeSynchronizationAgent  

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

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

    ' If the pull subscription exists, then start the synchronization.  
    If subscription.LoadProperties() Then  
        ' Get the agent for the subscription.  
        agent = subscription.SynchronizationAgent  

        ' Check that we have enough metadata to start the agent.  
        If agent.PublisherSecurityMode = Nothing Then  
            ' Set the required properties that could not be returned  
            ' from the MSsubscription_properties table.   
            agent.PublisherSecurityMode = SecurityMode.Integrated  
            agent.Distributor = publisherInstance  
            agent.DistributorSecurityMode = SecurityMode.Integrated  
            agent.HostName = hostname  

            ' Set optional Web synchronization properties.  
            agent.UseWebSynchronization = True  
            agent.InternetUrl = webSyncUrl  
            agent.InternetSecurityMode = SecurityMode.Standard  
            agent.InternetLogin = winLogin  
            agent.InternetPassword = winPassword  
        End If  

        ' Enable agent logging to the console.  
        agent.OutputVerboseLevel = 1  
        agent.Output = ""  

        ' Synchronously start the Merge Agent for the subscription.  
        agent.Synchronize()  
    Else  
        ' Do something here if the pull subscription does not exist.  
        Throw New ApplicationException(String.Format( _  
         "A subscription to '{0}' does not exist on {1}", _  
         publicationName, subscriberName))  
    End If  
Catch ex As Exception  
    ' Implement appropriate error handling here.  
    Throw New ApplicationException("The subscription could not be " + _  
     "synchronized. Verify that the subscription has " + _  
     "been defined correctly.", ex)  
Finally  
    conn.Disconnect()  
End Try  

참고 항목See Also

데이터 동기화 Synchronize Data
끌어오기 구독 만들기 Create a Pull Subscription
Replication Security Best PracticesReplication Security Best Practices