동기화 일정 지정
적용 대상: SQL Server Azure SQL Managed Instance
이 항목에서는 SQL Server Management Studio, Transact-SQL 또는 RMO(복제 관리 개체)를 사용하여 SQL Server에서 동기화 일정을 지정하는 방법을 설명합니다. 구독을 만드는 경우 구독에 대한 복제 에이전트를 실행하는 시기를 제어하는 동기화 일정을 정의할 수 있습니다. 예약 매개 변수를 지정하지 않으면 구독에서 기본 일정을 사용합니다.
구독은 배포 에이전트(스냅샷 및 트랜잭션 복제의 경우) 또는 병합 에이전트(병합 복제의 경우)에 의해 동기화됩니다. 에이전트는 지속적으로 실행하거나, 요청 시 실행하거나, 일정에 따라 실행할 수 있습니다.
항목 내용
다음을 사용하여 동기화 일정을 지정하려면
SQL Server Management Studio 사용
새 구독 마법사의 동기화 일정 페이지에서 동기화 일정을 지정합니다. 이 마법사의 액세스 방법은 Create a Push Subscription 및 Create a Pull Subscription를 참조하세요.
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>입니다.
동기화 일정을 지정하려면
새 구독 마법사의 SynchronizationSchedule 페이지에서 만드는 각 구독에 대한 에이전트 일정 드롭다운 목록에서 다음 값 중 하나를 선택합니다.
계속 실행
요청 시만 실행
<일정 정의...>
<일정 정의...>를 선택하면 작업 일정 속성 대화 상자에서 일정을 지정한 다음, 확인을 클릭합니다.
마법사를 완료합니다.
복제 모니터에서 밀어넣기 구독에 대한 동기화 일정을 수정하려면
복제 모니터에서 왼쪽 창의 게시자 그룹을 확장한 다음 게시자를 확장하고 게시를 클릭합니다.
모든 구독 탭을 클릭합니다.
구독을 마우스 오른쪽 단추로 클릭한 다음 자세히 보기를 클릭합니다.
구독 <SubscriptionName> 창에서 작업을 클릭하고 <AgentName> 작업 속성을 클릭합니다.
작업 속성 - <JobName> 대화 상자의 일정 페이지에서 편집을 클릭합니다.
작업 일정 속성 대화 상자의 일정 유형 드롭다운 목록에서 값을 선택합니다.
에이전트가 지속적으로 실행되도록 지정하려면 SQL Server 에이전트 시작할 때 자동으로 시작을 선택합니다.
에이전트가 일정에 따라 실행되도록 지정하려면 되풀이를 선택합니다.
에이전트가 요청 시 실행되도록 지정하려면 한 번을 선택합니다.
되풀이를 선택하는 경우 에이전트에 대한 일정을 지정합니다.
확인을 선택합니다.
Management Studio에서 밀어넣기 구독에 대한 동기화 일정을 수정하려면
Management Studio에서 배포자에 연결한 다음 해당 서버 노드를 확장합니다.
SQL Server 에이전트 폴더를 확장한 다음 작업 폴더를 확장합니다.
구독과 연결된 배포 에이전트 또는 병합 에이전트의 작업을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
작업 속성 - <JobName> 대화 상자의 일정 페이지에서 편집을 클릭합니다.
작업 일정 속성 대화 상자의 일정 유형 드롭다운 목록에서 값을 선택합니다.
에이전트가 지속적으로 실행되도록 지정하려면 SQL Server 에이전트 시작할 때 자동으로 시작을 선택합니다.
에이전트가 일정에 따라 실행되도록 지정하려면 되풀이를 선택합니다.
에이전트가 요청 시 실행되도록 지정하려면 한 번을 선택합니다.
되풀이를 선택하는 경우 에이전트에 대한 일정을 지정합니다.
확인을 선택합니다.
Management Studio에서 끌어오기 구독에 대한 동기화 일정을 수정하려면
Management Studio에서 구독자에 연결한 다음 해당 서버 노드를 확장합니다.
SQL Server 에이전트 폴더를 확장한 다음 작업 폴더를 확장합니다.
구독과 연결된 배포 에이전트 또는 병합 에이전트의 작업을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
작업 속성 - <JobName> 대화 상자의 일정 페이지에서 편집을 클릭합니다.
작업 일정 속성 대화 상자의 일정 유형 드롭다운 목록에서 값을 선택합니다.
에이전트가 지속적으로 실행되도록 지정하려면 SQL Server 에이전트 시작할 때 자동으로 시작을 선택합니다.
에이전트가 일정에 따라 실행되도록 지정하려면 되풀이를 선택합니다.
에이전트가 요청 시 실행되도록 지정하려면 한 번을 선택합니다.
되풀이를 선택하는 경우 에이전트에 대한 일정을 지정합니다.
확인을 선택합니다.
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 - 에이전트 예약이 적용되는 마지막 날짜
트랜잭션 게시에 대한 끌어오기 구독의 동기화 일정을 정의하려면
트랜잭션 게시에 새로운 끌어오기 구독을 만듭니다. 자세한 내용은 끌어오기 구독 만들기를 참조하세요.
구독자에서 sp_addpullsubscription_agent(Transact-SQL)를 실행합니다. @publisher, @publisher_db, @publication을 지정하고 @job_name 및 @password에 구독자에서 배포 에이전트가 실행되는 Microsoft Windows 자격 증명을 지정합니다. 위에서 설명한 동기화 매개 변수를 지정하여 구독을 동기화하는 배포 에이전트 작업의 일정을 정의합니다.
트랜잭션 게시에 대한 밀어넣기 구독의 동기화 일정을 정의하려면
트랜잭션 게시에 새로운 밀어넣기 구독을 만듭니다. 자세한 내용은 밀어넣기 구독 만들기을 참조하세요.
구독자에서 sp_addpushsubscription_agent(Transact-SQL)를 실행합니다. @subscriber, @subscriber_db, @publication을 지정하고 @job_name 및 @password에 구독자에서 배포 에이전트가 실행되는 Windows 자격 증명을 지정합니다. 위에서 설명한 동기화 매개 변수를 지정하여 구독을 동기화하는 배포 에이전트 작업의 일정을 정의합니다.
병합 게시에 대한 끌어오기 구독의 동기화 일정을 정의하려면
병합 게시에 대한 새로운 끌어오기 구독을 만듭니다. 자세한 내용은 끌어오기 구독 만들기를 참조하세요.
구독자에서 sp_addmergepullsubscription_agent을 실행합니다. @publisher, @publisher_db, @publication을 지정하고 @job_name 및 @password에 구독자에서 병합 에이전트가 실행되는 Windows 자격 증명을 지정합니다. 위에서 설명한 동기화 매개 변수를 지정하여 구독을 동기화하는 병합 에이전트 작업의 일정을 정의합니다.
병합 게시에 대한 밀어넣기 구독의 동기화 일정을 정의하려면
병합 게시에 새로운 밀어넣기 구독을 만듭니다. 자세한 내용은 밀어넣기 구독 만들기을 참조하세요.
구독자에서 sp_addmergepushsubscription_agent을 실행합니다. @subscriber, @subscriber_db, @publication을 지정하고 @job_name 및 @password에 구독자에서 병합 에이전트가 실행되는 Windows 자격 증명을 지정합니다. 위에서 설명한 동기화 매개 변수를 지정하여 구독을 동기화하는 병합 에이전트 작업의 일정을 정의합니다.
RMO(복제 관리 개체) 사용
복제에서는 SQL Server 에이전트를 사용하여 스냅샷 생성이나 구독 동기화와 같이 정기적으로 수행하는 작업의 일정을 지정합니다. RMO(복제 관리 개체)를 프로그래밍 방식으로 사용하여 복제 에이전트 작업에 대한 일정을 지정할 수 있습니다.
참고 항목
구독을 만들고 CreateSyncAgentByDefault(끌어오기 구독의 기본 동작)에 대해 false 값을 지정하면 에이전트 작업이 생성되지 않고 예약 속성이 무시됩니다. 이 경우 동기화 일정은 애플리케이션에 의해 결정되어야 합니다. 자세한 내용은 끌어오기 구독 만들기 및 밀어넣기 구독 만들기를 참조하세요.
트랜잭션 게시에 대한 밀어넣기 구독을 만들 때 복제 에이전트 일정을 정의하려면
만드는 구독에 대한 TransSubscription 클래스의 인스턴스를 만듭니다. 자세한 내용은 밀어넣기 구독 만들기을 참조하세요.
Create를 호출하기 전에 AgentSchedule 속성의 다음 필드 중 하나 이상을 설정합니다.
FrequencyType - 에이전트를 예약할 때 사용하는 빈도 유형(예: 매일 또는 매주)입니다.
FrequencyInterval - 에이전트가 실행하는 요일입니다.
FrequencyRelativeInterval - 에이전트가 매월 실행되도록 예약된 지정된 달의 주입니다.
FrequencyRecurrenceFactor - 동기화 사이에 발생하는 빈도 형식 단위 수입니다.
FrequencySubDay - 에이전트가 하루에 두 번 이상 실행할 경우 빈도 단위입니다.
FrequencySubDayInterval - 에이전트가 하루에 두 번 이상 실행할 경우 실행 간의 빈도 단위 수입니다.
ActiveStartTime - 지정된 날짜에서 에이전트가 실행되는 가장 이른 시작 시간입니다.
ActiveEndTime - 지정된 날짜에서 에이전트가 실행되는 가장 늦은 시작 시간입니다.
ActiveStartDate - 에이전트 예약이 처음 적용되는 날짜입니다.
ActiveEndDate - 에이전트 예약이 적용되는 마지막 날짜입니다.
참고 항목
이러한 속성 중 하나를 지정하지 않으면 기본값이 설정됩니다.
Create 메서드를 호출하여 구독을 만듭니다.
트랜잭션 게시에 대한 끌어오기 구독을 만들 때 복제 에이전트 일정을 정의하려면
만드는 구독에 대한 TransPullSubscription 클래스의 인스턴스를 만듭니다. 자세한 내용은 끌어오기 구독 만들기를 참조하세요.
Create를 호출하기 전에 AgentSchedule 속성의 다음 필드 중 하나 이상을 설정합니다.
FrequencyType - 에이전트를 예약할 때 사용하는 빈도 유형(예: 매일 또는 매주)입니다.
FrequencyInterval - 에이전트가 실행하는 요일입니다.
FrequencyRelativeInterval - 에이전트가 매월 실행되도록 예약된 지정된 달의 주입니다.
FrequencyRecurrenceFactor - 동기화 사이에 발생하는 빈도 형식 단위 수입니다.
FrequencySubDay - 에이전트가 하루에 두 번 이상 실행할 경우 빈도 단위입니다.
FrequencySubDayInterval - 에이전트가 하루에 두 번 이상 실행할 경우 실행 간의 빈도 단위 수입니다.
ActiveStartTime - 지정된 날짜에서 에이전트가 실행되는 가장 이른 시작 시간입니다.
ActiveEndTime - 지정된 날짜에서 에이전트가 실행되는 가장 늦은 시작 시간입니다.
ActiveStartDate - 에이전트 예약이 처음 적용되는 날짜입니다.
ActiveEndDate - 에이전트 예약이 적용되는 마지막 날짜입니다.
참고 항목
이러한 속성 중 하나를 지정하지 않으면 기본값이 설정됩니다.
Create 메서드를 호출하여 구독을 만듭니다.
병합 게시에 대한 끌어오기 구독을 만들 때 복제 에이전트 일정을 정의하려면
만드는 구독에 대한 MergePullSubscription 클래스의 인스턴스를 만듭니다. 자세한 내용은 끌어오기 구독 만들기를 참조하세요.
Create를 호출하기 전에 AgentSchedule 속성의 다음 필드 중 하나 이상을 설정합니다.
FrequencyType - 에이전트를 예약할 때 사용하는 빈도 유형(예: 매일 또는 매주)입니다.
FrequencyInterval - 에이전트가 실행하는 요일입니다.
FrequencyRelativeInterval - 에이전트가 매월 실행되도록 예약된 지정된 달의 주입니다.
FrequencyRecurrenceFactor - 동기화 사이에 발생하는 빈도 형식 단위 수입니다.
FrequencySubDay - 에이전트가 하루에 두 번 이상 실행할 경우 빈도 단위입니다.
FrequencySubDayInterval - 에이전트가 하루에 두 번 이상 실행할 경우 실행 간의 빈도 단위 수입니다.
ActiveStartTime - 지정된 날짜에서 에이전트가 실행되는 가장 이른 시작 시간입니다.
ActiveEndTime - 지정된 날짜에서 에이전트가 실행되는 가장 늦은 시작 시간입니다.
ActiveStartDate - 에이전트 예약이 처음 적용되는 날짜입니다.
ActiveEndDate - 에이전트 예약이 적용되는 마지막 날짜입니다.
참고 항목
이러한 속성 중 하나를 지정하지 않으면 기본값이 설정됩니다.
Create 메서드를 호출하여 구독을 만듭니다.
병합 게시에 대한 밀어넣기 구독을 만들 때 복제 에이전트 일정을 정의하려면
만드는 구독에 대한 MergeSubscription 클래스의 인스턴스를 만듭니다. 자세한 내용은 밀어넣기 구독 만들기을 참조하세요.
Create를 호출하기 전에 AgentSchedule 속성의 다음 필드 중 하나 이상을 설정합니다.
FrequencyType - 에이전트를 예약할 때 사용하는 빈도 유형(예: 매일 또는 매주)입니다.
FrequencyInterval - 에이전트가 실행하는 요일입니다.
FrequencyRelativeInterval - 에이전트가 매월 실행되도록 예약된 지정된 달의 주입니다.
FrequencyRecurrenceFactor - 동기화 사이에 발생하는 빈도 형식 단위 수입니다.
FrequencySubDay - 에이전트가 하루에 두 번 이상 실행할 경우 빈도 단위입니다.
FrequencySubDayInterval - 에이전트가 하루에 두 번 이상 실행할 경우 실행 간의 빈도 단위 수입니다.
ActiveStartTime - 지정된 날짜에서 에이전트가 실행되는 가장 이른 시작 시간입니다.
ActiveEndTime - 지정된 날짜에서 에이전트가 실행되는 가장 늦은 시작 시간입니다.
ActiveStartDate - 에이전트 예약이 처음 적용되는 날짜입니다.
ActiveEndDate - 에이전트 예약이 적용되는 마지막 날짜입니다.
참고 항목
이러한 속성 중 하나를 지정하지 않으면 기본값이 설정됩니다.
Create 메서드를 호출하여 구독을 만듭니다.
예제(RMO)
다음은 병합 게시에 대한 밀어넣기 구독을 만들고 구독이 동기화되는 일정을 지정하는 예제입니다.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2022Replica";
string publicationDbName = "AdventureWorks2022";
string hostname = @"adventure-works\garrett1";
//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
// 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 = "AdventureWorks2022Replica"
Dim publicationDbName As String = "AdventureWorks2022"
Dim hostname As String = "adventure-works\garrett1"
'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
' 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