동기화 일정 지정

이 항목에서는 SQL Server Management Studio, Transact-SQL 또는 RMO(복제 관리 개체)를 사용하여 SQL Server 2012에서 동기화 일정을 지정하는 방법에 대해 설명합니다. 구독을 만드는 경우 구독에 대한 복제 에이전트를 실행하는 시기를 제어하는 동기화 일정을 정의할 수 있습니다. 일정 매개 변수를 지정하지 않으면 기본 일정이 사용됩니다.

구독은 배포 에이전트(스냅숏 및 트랜잭션 복제의 경우) 또는 병합 에이전트(병합 복제의 경우)에 의해 동기화됩니다. 에이전트는 지속적으로 실행하거나 수요에 따라 실행하거나 일정에 따라 실행할 수 있습니다.

항목 내용

  • 다음을 사용하여 동기화 일정을 지정하려면

    SQL Server Management Studio

    Transact-SQL

    RMO(복제 관리 개체)

SQL Server Management Studio 사용

새 구독 마법사의 동기화 일정 페이지에서 동기화 일정을 지정합니다. 이 마법사의 액세스 방법은 밀어넣기 구독 만들기끌어오기 구독 만들기를 참조하십시오.

작업 일정 속성 대화 상자에서 동기화 일정을 수정합니다. 이 대화 상자는 SQL Server Management Studio의 작업 폴더와 복제 모니터의 에이전트 세부 정보 창에서 사용할 수 있습니다. 복제 모니터 시작 방법은 복제 모니터 시작을 참조하십시오.

작업 폴더에서 일정을 지정하는 경우에는 다음 표를 사용하여 에이전트 작업 이름을 결정합니다.

에이전트

작업 이름

끌어오기 구독에 대한 병합 에이전트

<Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<SubscriptionDatabase>-<integer>

밀어넣기 구독에 대한 병합 에이전트

<Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<integer>

밀어넣기 구독에 대한 배포 에이전트

<Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<integer>1

끌어오기 구독에 대한 배포 에이전트

<Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<SubscriptionDatabase>-<GUID>2

SQL Server 이외 구독자의 밀어넣기 구독에 대한 배포 에이전트

<Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<integer>

1 Oracle 게시에 대한 밀어넣기 구독의 경우 **<Publisher>-<PublicationDatabase>**가 아닌 <Publisher>-<Publisher>입니다.

2 Oracle 게시에 대한 끌어오기 구독의 경우 **<Publisher>-<PublicationDatabase>**가 아닌 <Publisher>-<DistributionDatabase>입니다.

동기화 일정을 지정하려면

  1. 새 구독 마법사의 동기화 일정 페이지에 있는 에이전트 일정 드롭다운 목록에서 만들려는 각 구독에 대해 다음 값 중 하나를 선택합니다.

    • 계속 실행

    • 요청 시에만 실행

    • <일정 정의...>

  2. **<일정 정의...>**를 선택하면 작업 일정 속성 대화 상자에서 일정을 지정한 다음 확인을 클릭합니다.

  3. 마법사를 완료합니다.

복제 모니터에서 밀어넣기 구독에 대한 동기화 일정을 수정하려면

  1. 복제 모니터에서 왼쪽 창의 게시자 그룹을 확장하고 해당 게시자를 확장한 다음 해당 게시를 클릭합니다.

  2. 모든 구독 탭을 클릭합니다.

  3. 구독을 마우스 오른쪽 단추로 클릭한 다음 자세히 보기를 클릭합니다.

  4. 구독 < SubscriptionName> 창에서 동작을 클릭한 다음 <AgentName> 작업 속성을 클릭합니다.

  5. 작업 속성 - <JobName> 대화 상자의 일정 페이지에서 편집을 클릭합니다.

  6. 작업 일정 속성 대화 상자의 일정 유형 드롭다운 목록에서 값을 선택합니다.

    • 에이전트가 계속 실행되도록 지정하려면 SQL Server 에이전트가 시작될 때 자동으로 시작을 선택합니다.

    • 에이전트가 일정대로 실행되도록 지정하려면 되풀이를 선택합니다.

    • 에이전트가 요청 시 실행되도록 지정하려면 한 번을 선택합니다.

  7. 되풀이를 선택할 경우에는 에이전트의 일정을 지정합니다.

  8. 확인을 클릭합니다.

Management Studio에서 밀어넣기 구독에 대한 동기화 일정을 수정하려면

  1. Management Studio에서 배포자에 연결한 다음 해당 서버 노드를 확장합니다.

  2. SQL Server 에이전트 폴더를 확장한 다음 작업 폴더를 확장합니다.

  3. 구독과 연결된 배포 에이전트 또는 병합 에이전트의 작업을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

  4. 작업 속성 - <JobName> 대화 상자의 일정 페이지에서 편집을 클릭합니다.

  5. 작업 일정 속성 대화 상자의 일정 유형 드롭다운 목록에서 값을 선택합니다.

    • 에이전트가 계속 실행되도록 지정하려면 SQL Server 에이전트가 시작될 때 자동으로 시작을 선택합니다.

    • 에이전트가 일정대로 실행되도록 지정하려면 되풀이를 선택합니다.

    • 에이전트가 요청 시 실행되도록 지정하려면 한 번을 선택합니다.

  6. 되풀이를 선택할 경우에는 에이전트의 일정을 지정합니다.

  7. 확인을 클릭합니다.

Management Studio에서 끌어오기 구독에 대한 동기화 일정을 수정하려면

  1. Management Studio에서 구독자에 연결한 다음 해당 서버 노드를 확장합니다.

  2. SQL Server 에이전트 폴더를 확장한 다음 작업 폴더를 확장합니다.

  3. 구독과 연결된 배포 에이전트 또는 병합 에이전트의 작업을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

  4. 작업 속성 - <JobName> 대화 상자의 일정 페이지에서 편집을 클릭합니다.

  5. 작업 일정 속성 대화 상자의 일정 유형 드롭다운 목록에서 값을 선택합니다.

    • 에이전트가 계속 실행되도록 지정하려면 SQL Server 에이전트가 시작될 때 자동으로 시작을 선택합니다.

    • 에이전트가 일정대로 실행되도록 지정하려면 되풀이를 선택합니다.

    • 에이전트가 요청 시 실행되도록 지정하려면 한 번을 선택합니다.

  6. 되풀이를 선택할 경우에는 에이전트의 일정을 지정합니다.

  7. 확인을 클릭합니다.

맨 위로 이동 링크와 함께 사용되는 화살표 아이콘[Top]

Transact-SQL 사용

복제 저장 프로시저를 사용하여 프로그래밍 방식으로 동기화 일정을 정의할 수 있습니다. 사용되는 저장 프로시저는 복제 유형 및 구독 유형(끌어오기 또는 밀어넣기)에 따라 달라집니다.

일정은 다음 일정 매개 변수로 정의되며 해당 동작은 sp_add_schedule(Transact-SQL)에서 상속됩니다.

  • @frequency_type - 에이전트를 예약할 때 사용하는 빈도 유형

  • @frequency_interval - 에이전트에서 작업을 실행하는 요일

  • @frequency_relative_interval - 지정된 월에서 에이전트가 매월 실행되도록 예약된 주

  • @frequency_recurrence_factor - 동기화 사이에 발생하는 빈도 유형 단위 수

  • @frequency_subday - 에이전트가 하루 두 번 이상 실행할 경우 빈도 단위

  • @frequency_subday_interval - 에이전트가 하루에 두 번 이상 실행할 경우 실행 간의 빈도 단위 수

  • @active_start_time_of_day - 지정된 날짜에서 에이전트가 실행되는 시작 시간

  • @active_end_time_of_day - 지정된 날짜에서 에이전트가 실행되는 마지막 시간

  • @active_start_date - 에이전트 예약이 처음 적용되는 날짜

  • @active_end_date - 에이전트 예약이 마지막으로 적용되는 날짜

트랜잭션 게시에 대한 끌어오기 구독의 동기화 일정을 정의하려면

  1. 트랜잭션 게시에 대한 새 끌어오기 구독을 만듭니다. 자세한 내용은 끌어오기 구독 만들기를 참조하십시오.

  2. 구독자에서 sp_addpullsubscription_agent(Transact-SQL)를 실행합니다. @publisher, @publisher_db, @publication을 지정하고 @job_name@password에 구독자에서 배포 에이전트가 실행되는 Microsoft Windows 자격 증명을 지정합니다. 구독을 동기화하는 배포 에이전트 작업 일정을 정의하는 동기화 매개 변수(위에서 자세히 설명)를 지정합니다.

트랜잭션 게시에 대한 밀어넣기 구독의 동기화 일정을 정의하려면

  1. 트랜잭션 게시에 대한 새 밀어넣기 구독을 만듭니다. 자세한 내용은 밀어넣기 구독 만들기를 참조하십시오.

  2. 구독자에서 sp_addpushsubscription_agent(Transact-SQL)를 실행합니다. @subscriber, @subscriber_db, @publication을 지정하고 @job_name@password 구독자에서 배포 에이전트가 실행되는 Microsoft Windows 자격 증명을 지정합니다. 구독을 동기화하는 배포 에이전트 작업 일정을 정의하는 동기화 매개 변수(위에서 자세히 설명)를 지정합니다.

병합 게시에 대한 끌어오기 구독의 동기화 일정을 정의하려면

  1. 병합 게시에 대한 새 끌어오기 구독을 만듭니다. 자세한 내용은 끌어오기 구독 만들기를 참조하십시오.

  2. 구독자에서 sp_addmergepullsubscription_agent를 실행합니다. @publisher, @publisher_db, @publication을 지정하고 @job_name@password에 구독자에서 병합 에이전트가 실행되는 Microsoft Windows 자격 증명을 지정합니다. 구독을 동기화하는 병합 에이전트 작업 일정을 정의하는 동기화 매개 변수(위에서 자세히 설명)를 지정합니다.

병합 게시에 대한 밀어넣기 구독의 동기화 일정을 정의하려면

  1. 병합 게시에 대한 새 밀어넣기 구독을 만듭니다. 자세한 내용은 밀어넣기 구독 만들기를 참조하십시오.

  2. 구독자에서 sp_addmergepushsubscription_agent를 실행합니다. @subscriber, @subscriber_db, @publication을 지정하고 @job_name@password에 구독자에서 병합 에이전트가 실행되는 Windows 자격 증명을 지정합니다. 구독을 동기화하는 병합 에이전트 작업 일정을 정의하는 동기화 매개 변수(위에서 자세히 설명)를 지정합니다.

맨 위로 이동 링크와 함께 사용되는 화살표 아이콘[Top]

RMO(복제 관리 개체) 사용

복제에서는 SQL Server 에이전트를 사용하여 스냅숏 생성이나 구독 동기화와 같이 정기적으로 수행하는 작업의 일정을 지정합니다. RMO(복제 관리 개체)를 사용하여 프로그래밍 방식으로 복제 에이전트 작업의 일정을 지정할 수 있습니다.

[!참고]

구독을 만들고 CreateSyncAgentByDefault에 false 값을 지정하면(끌어오기 구독에 대한 기본 동작) 에이전트 작업은 생성되지 않으며 일정 속성은 무시됩니다. 이 경우에는 응용 프로그램에서 동기화 일정을 결정해야 합니다. 자세한 내용은 끌어오기 구독 만들기밀어넣기 구독 만들기를 참조하십시오.

트랜잭션 게시에 대한 밀어넣기 구독을 만들 때 복제 에이전트 일정을 정의하려면

  1. 만들려는 구독에 대해 TransSubscription 클래스의 인스턴스를 만듭니다. 자세한 내용은 밀어넣기 구독 만들기를 참조하십시오.

  2. Create를 호출하기 전에 AgentSchedule 속성의 다음 필드 중 하나 이상을 설정합니다.

    • FrequencyType - 에이전트를 예약할 때 사용하는 빈도 유형(예: 매일 또는 매주)입니다.

    • FrequencyInterval - 에이전트가 실행하는 요일입니다.

    • FrequencyRelativeInterval - 지정된 월에서 에이전트가 월별로 실행되도록 예약된 주입니다.

    • FrequencyRecurrenceFactor - 동기화 사이에 발생하는 frequency-type 단위 수입니다.

    • FrequencySubDay - 에이전트가 하루에 두 번 이상 실행할 경우 빈도 단위입니다.

    • FrequencySubDayInterval - 에이전트가 하루에 두 번 이상 실행할 경우 실행 간의 빈도 단위 수입니다.

    • ActiveStartTime - 지정된 날짜에서 에이전트가 실행되는 시작 시간입니다.

    • ActiveEndTime - 지정된 날짜에서 에이전트가 실행되는 마지막 시간입니다.

    • ActiveStartDate - 에이전트 예약이 처음 적용되는 날짜입니다.

    • ActiveEndDate - 에이전트 예약이 마지막으로 적용되는 날짜입니다.

    [!참고]

    이러한 속성 중 하나를 지정하지 않으면 기본값이 설정됩니다.

  3. Create 메서드를 호출하여 구독을 만듭니다.

트랜잭션 게시에 대한 끌어오기 구독을 만들 때 복제 에이전트 일정을 정의하려면

  1. 만들려는 구독에 대해 TransPullSubscription 클래스의 인스턴스를 만듭니다. 자세한 내용은 끌어오기 구독 만들기를 참조하십시오.

  2. Create를 호출하기 전에 AgentSchedule 속성의 다음 필드 중 하나 이상을 설정합니다.

    • FrequencyType - 에이전트를 예약할 때 사용하는 빈도 유형(예: 매일 또는 매주)입니다.

    • FrequencyInterval - 에이전트가 실행하는 요일입니다.

    • FrequencyRelativeInterval - 지정된 월에서 에이전트가 월별로 실행되도록 예약된 주입니다.

    • FrequencyRecurrenceFactor - 동기화 사이에 발생하는 frequency-type 단위 수입니다.

    • FrequencySubDay - 에이전트가 하루에 두 번 이상 실행할 경우 빈도 단위입니다.

    • FrequencySubDayInterval - 에이전트가 하루에 두 번 이상 실행할 경우 실행 간의 빈도 단위 수입니다.

    • ActiveStartTime - 지정된 날짜에서 에이전트가 실행되는 시작 시간입니다.

    • ActiveEndTime - 지정된 날짜에서 에이전트가 실행되는 마지막 시간입니다.

    • ActiveStartDate - 에이전트 예약이 처음 적용되는 날짜입니다.

    • ActiveEndDate - 에이전트 예약이 마지막으로 적용되는 날짜입니다.

    [!참고]

    이러한 속성 중 하나를 지정하지 않으면 기본값이 설정됩니다.

  3. Create 메서드를 호출하여 구독을 만듭니다.

병합 게시에 대한 끌어오기 구독을 만들 때 복제 에이전트 일정을 정의하려면

  1. 만들려는 구독에 대해 MergePullSubscription 클래스의 인스턴스를 만듭니다. 자세한 내용은 끌어오기 구독 만들기를 참조하십시오.

  2. Create를 호출하기 전에 AgentSchedule 속성의 다음 필드 중 하나 이상을 설정합니다.

    • FrequencyType - 에이전트를 예약할 때 사용하는 빈도 유형(예: 매일 또는 매주)입니다.

    • FrequencyInterval - 에이전트가 실행하는 요일입니다.

    • FrequencyRelativeInterval - 지정된 월에서 에이전트가 월별로 실행되도록 예약된 주입니다.

    • FrequencyRecurrenceFactor - 동기화 사이에 발생하는 frequency-type 단위 수입니다.

    • FrequencySubDay - 에이전트가 하루에 두 번 이상 실행할 경우 빈도 단위입니다.

    • FrequencySubDayInterval - 에이전트가 하루에 두 번 이상 실행할 경우 실행 간의 빈도 단위 수입니다.

    • ActiveStartTime - 지정된 날짜에서 에이전트가 실행되는 시작 시간입니다.

    • ActiveEndTime - 지정된 날짜에서 에이전트가 실행되는 마지막 시간입니다.

    • ActiveStartDate - 에이전트 예약이 처음 적용되는 날짜입니다.

    • ActiveEndDate - 에이전트 예약이 마지막으로 적용되는 날짜입니다.

    [!참고]

    이러한 속성 중 하나를 지정하지 않으면 기본값이 설정됩니다.

  3. Create 메서드를 호출하여 구독을 만듭니다.

병합 게시에 대한 밀어넣기 구독을 만들 때 복제 에이전트 일정을 정의하려면

  1. 만들려는 구독에 대해 MergeSubscription 클래스의 인스턴스를 만듭니다. 자세한 내용은 밀어넣기 구독 만들기를 참조하십시오.

  2. Create를 호출하기 전에 AgentSchedule 속성의 다음 필드 중 하나 이상을 설정합니다.

    • FrequencyType - 에이전트를 예약할 때 사용하는 빈도 유형(예: 매일 또는 매주)입니다.

    • FrequencyInterval - 에이전트가 실행하는 요일입니다.

    • FrequencyRelativeInterval - 지정된 월에서 에이전트가 월별로 실행되도록 예약된 주입니다.

    • FrequencyRecurrenceFactor - 동기화 사이에 발생하는 frequency-type 단위 수입니다.

    • FrequencySubDay - 에이전트가 하루에 두 번 이상 실행할 경우 빈도 단위입니다.

    • FrequencySubDayInterval - 에이전트가 하루에 두 번 이상 실행할 경우 실행 간의 빈도 단위 수입니다.

    • ActiveStartTime - 지정된 날짜에서 에이전트가 실행되는 시작 시간입니다.

    • ActiveEndTime - 지정된 날짜에서 에이전트가 실행되는 마지막 시간입니다.

    • ActiveStartDate - 에이전트 예약이 처음 적용되는 날짜입니다.

    • ActiveEndDate - 에이전트 예약이 마지막으로 적용되는 날짜입니다.

    [!참고]

    이러한 속성 중 하나를 지정하지 않으면 기본값이 설정됩니다.

  3. Create 메서드를 호출하여 구독을 만듭니다.

예(RMO)

이 예에서는 병합 계시에 대한 밀어넣기 구독을 만들고 구독의 동기화 일정을 지정합니다.

          // Define the Publisher, publication, and databases.
            string publicationName = "AdvWorksSalesOrdersMerge";
            string publisherName = publisherInstance;
            string subscriberName = subscriberInstance;
            string subscriptionDbName = "AdventureWorks2012Replica";
            string publicationDbName = "AdventureWorks2012";
            string hostname = @"adventure-works\garrett1";

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

            // Create the objects that we need.
            MergePublication publication;
            MergeSubscription subscription;

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

                // Ensure that the publication exists and that 
                // it supports push subscriptions.
                publication = new MergePublication();
                publication.Name = publicationName;
                publication.DatabaseName = publicationDbName;
                publication.ConnectionContext = conn;

                if (publication.IsExistingObject)
                {
                    if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
                    {
                        publication.Attributes |= PublicationAttributes.AllowPush;
                    }

                    // Define the push subscription.
                    subscription = new MergeSubscription();
                    subscription.ConnectionContext = conn;
                    subscription.SubscriberName = subscriberName;
                    subscription.PublicationName = publicationName;
                    subscription.DatabaseName = publicationDbName;
                    subscription.SubscriptionDBName = subscriptionDbName;
                    subscription.HostName = hostname;

                    // Set a schedule to synchronize the subscription every 2 hours
                    // during weekdays from 6am to 10pm.
                    subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly;
                    subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32(0x003E);
                    subscription.AgentSchedule.FrequencyRecurrenceFactor = 1;
                    subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour;
                    subscription.AgentSchedule.FrequencySubDayInterval = 2;
                    subscription.AgentSchedule.ActiveStartDate = 20051108;
                    subscription.AgentSchedule.ActiveEndDate = 20071231;
                    subscription.AgentSchedule.ActiveStartTime = 060000;
                    subscription.AgentSchedule.ActiveEndTime = 100000;

                    // Specify the Windows login credentials for the Merge Agent job.
                    subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
                    subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

                    // Create the push subscription.
                    subscription.Create();
                }
                else
                {
                    // Do something here if the publication does not exist.
                    throw new ApplicationException(String.Format(
                        "The publication '{0}' does not exist on {1}.",
                        publicationName, publisherName));
                }
            }
            catch (Exception ex)
            {
                // Implement the appropriate error handling here.
                throw new ApplicationException(String.Format(
                    "The subscription to {0} could not be created.", publicationName), ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
Dim hostname As String = "adventure-works\garrett1"

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

' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergeSubscription

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

    ' Ensure that the publication exists and that 
    ' it supports push subscriptions.
    publication = New MergePublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    If publication.IsExistingObject Then
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Define the push subscription.
        subscription = New MergeSubscription()
        subscription.ConnectionContext = conn
        subscription.SubscriberName = subscriberName
        subscription.PublicationName = publicationName
        subscription.DatabaseName = publicationDbName
        subscription.SubscriptionDBName = subscriptionDbName
        subscription.HostName = hostname

        ' Set a schedule to synchronize the subscription every 2 hours
        ' during weekdays from 6am to 10pm.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly
        subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32("0x003E", 16)
        subscription.AgentSchedule.FrequencyRecurrenceFactor = 1
        subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour
        subscription.AgentSchedule.FrequencySubDayInterval = 2
        subscription.AgentSchedule.ActiveStartDate = 20051108
        subscription.AgentSchedule.ActiveEndDate = 20071231
        subscription.AgentSchedule.ActiveStartTime = 60000
        subscription.AgentSchedule.ActiveEndTime = 100000

        ' Specify the Windows login credentials for the Merge Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword

        ' Create the push subscription.
        subscription.Create()
    Else

        ' Do something here if the publication does not exist.
        Throw New ApplicationException(String.Format( _
         "The publication '{0}' does not exist on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Implement the appropriate error handling here.
    Throw New ApplicationException(String.Format( _
    "The subscription to {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try

맨 위로 이동 링크와 함께 사용되는 화살표 아이콘[Top]

참고 항목

개념

복제 보안을 위한 최선의 구현 방법

게시 구독

밀어넣기 구독 동기화

끌어오기 구독 동기화

데이터 동기화