CDC 제어 태스크CDC Control Task

CDC 제어 태스크는 CDC(변경 데이터 캡처) 패키지의 수명 주기를 제어하는 데 사용됩니다.The CDC Control task is used to control the life cycle of change data capture (CDC) packages. 이 태스크를 사용하면 초기 로드 패키지와의 CDC 패키지 동기화, CDC 패키지 실행 시 처리되는 LSN(로그 시퀀스 번호) 범위의 관리가 처리됩니다.It handles CDC package synchronization with the initial load package, the management of Log Sequence Number (LSN) ranges that are processed in a run of a CDC package. 또한 CDC 제어 태스크는 오류 시나리오 및 복구를 다룹니다.In addition, the CDC Control task deals with error scenarios and recovery.

CDC 제어 태스크는 CDC 패키지의 상태를 SSIS 패키지 변수에 유지합니다. 그러나 이 태스크는 여러 패키지 활성화와 일반적인 CDC 프로세스(예를 들어 한 태스크는 초기 로드를 수행하고 다른 태스크는 trickle-feed 업데이트를 수행할 수 있음)를 함께 수행하는 여러 패키지 간에 상태가 유지되도록 데이터베이스 테이블에 상태를 유지할 수도 있습니다.The CDC Control task maintains the state of the CDC package in an SSIS package variable and it can also persist it in a database table so that the state is maintained across package activations and between multiple packages that together perform a common CDC process (for example, one task may be responsible for the initial loading and the other for the trickle-feed updates).

CDC 제어 태스크는 두 작업 그룹을 지원합니다.The CDC Control task supports two groups of operations. 한 그룹은 초기 로드와 변경 처리의 동기화를 처리하며 다른 그룹은 CDC 패키지 실행에 대해 LSN의 변경 처리 범위를 관리하고 처리된 항목을 추적합니다.One group handles the synchronization of initial load and change processing, and the other manages the change-processing range of LSNs for a run of a CDC package and keeps track of what was processed successfully.

다음 작업은 초기 로드와 변경 처리의 동기화를 처리합니다.The following operations handle the synchronization of initial load and change processing:

연산Operation DescriptionDescription
ResetCdcStateResetCdcState 이 작업은 현재 CDC 컨텍스트에 연결된 영구 CDC 상태를 다시 설정하는 데 사용됩니다.This operation is used to reset the persistent CDC state associated with the current CDC context. 이 작업을 실행하면 LSN 타임스탬프 sys.fn_cdc_get_max_lsn 테이블의 현재 최대 LSN이 다음 처리 범위의 시작 부분이 됩니다.After this operation is run, the current maximum LSN from the LSN-timestamp sys.fn_cdc_get_max_lsn table becomes the start of the range for the next processing range. 이 작업을 수행하려면 원본 데이터베이스에 대한 연결이 필요합니다.This operation requires a connection to the source database.
MarkInitialLoadStartMarkInitialLoadStart 이 작업은 초기 로드 패키지의 시작 부분에서 초기 로드 패키지가 원본 테이블을 읽기 시작하기 전에 현재 LSN을 원본 데이터베이스에 기록하기 위해 사용됩니다.This operation is used at the beginning of an initial-load package to record the current LSN in the source database before the initial-load package starts reading the source tables. 이 작업을 수행하려면 sys.fn_cdc_get_max_lsn을 호출하기 위해 원본 데이터베이스에 대한 연결이 필요합니다.This requires a connection to the source database to call sys.fn_cdc_get_max_lsn.

SQL Server 2017SQL Server 2017 CDC(즉, Oracle이 아님)에서 작업할 때 MarkInitialLoadStart를 선택하는 경우 연결 관리자에 지정된 사용자는 db_owner 또는 sysadmin이어야 합니다.If you select MarkInitialLoadStart when working on SQL Server 2017SQL Server 2017 CDC (that is, not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.
MarkInitialLoadEndMarkInitialLoadEnd 이 작업은 초기 로드 패키지의 끝 부분에서 초기 로드 패키지가 원본 테이블 읽기를 완료한 후 현재 LSN을 원본 데이터베이스에 기록하기 위해 사용됩니다.This operation is used at the end of an initial-load package to record the current LSN in the source database after the initial-load package finished reading the source tables. 이 LSN은 이 작업이 발생한 현재 시간을 기록한 후 CDC 데이터베이스에서 해당 시간 이후에 발생한 변경 내용을 조회하는 cdc.lsn_time_매핑 테이블을 쿼리하여 결정됩니다.This LSN is determined by recording the current time when this operation occurred and then querying the cdc.lsn_time_mapping table in the CDC database looking for a change that occurred after that time.

SQL Server 2017SQL Server 2017 CDC(즉, Oracle이 아님)에서 작업할 때 MarkInitialLoadEnd를 선택하는 경우 연결 관리자에 지정된 사용자는 db_owner 또는 sysadmin이어야 합니다.If you select MarkInitialLoadEnd when working on SQL Server 2017SQL Server 2017 CDC (that is , not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.
MarkCdcStartMarkCdcStart 이 작업은 스냅숏 데이터베이스에서 초기 로드가 생성될 때 사용됩니다.This operation is used when then the initial load is made from a snapshot database. 이 경우 스냅숏 LSN 후에 변경 처리가 즉시 시작되어야 합니다.In this case, the change processing should start immediately after the snapshot LSN. 사용자가 사용할 스냅숏 데이터베이스의 이름을 지정하면 CDC 제어 태스크가 SQL Server 2017SQL Server 2017 에 스냅숏 LSN을 쿼리합니다.You can specify the name of the snapshot database to use and the CDC Control task queries SQL Server 2017SQL Server 2017 for the snapshot LSN. 사용자가 스냅숏 LSN을 직접 지정할 수도 있습니다.You also have the option to directly specify the snapshot LSN.

SQL Server 2017SQL Server 2017 CDC(즉, Oracle이 아님)에서 작업할 때 MarkCdcStart를 선택하는 경우 연결 관리자에 지정된 사용자는 db_owner 또는 sysadmin이어야 합니다.If you select MarkCdcStart when working on SQL Server 2017SQL Server 2017 CDC (that is , not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.

처리 범위를 관리하는 데에는 다음과 같은 작업이 사용됩니다.The following operations are used to manage the processing range:

연산Operation DescriptionDescription
GetProcessingRangeGetProcessingRange 이 작업은 CDC 원본 데이터 흐름을 사용하는 데이터 흐름을 호출하기 전에 사용됩니다.This operation is used before invoking the data flow that uses the CDC Source data flow. 이 작업은 호출될 때 CDC 원본 데이터 흐름에서 읽는 LSN의 범위를 설정합니다.It establishes a range of LSNs that the CDC Source data flow reads when invoked. 범위는 데이터 흐름을 처리하는 동안 CDC 원본에서 사용되는 SSIS 패키지 변수에 저장됩니다.The range is stored in an SSIS package variable that is used by the CDC Source during data-flow processing.

저장된 상태에 대한 자세한 내용은 상태 변수 정의를 참조하세요.For more information about the states that are stored, see Define a State Variable.
MarkProcessedRangeMarkProcessedRange : 이 작업은 각 CDC 실행 후(CDC 데이터 흐름이 성공적으로 완료된 후) CDC 실행 중에 완전히 처리된 마지막 LSN을 기록하기 위해 실행됩니다.: This operation is executed after each CDC run (after the CDC data flow is completed successfully) to record the last LSN that was fully processed in the CDC run. 다음에 GetProcessingRange를 실행하면 이 위치가 처리 범위의 시작 부분이 됩니다.The next time GetProcessingRange is executed, this position is the start of the processing range.

CDC 상태 지속성 처리Handling CDC State Persistency

CDC 제어 태스크는 활성화 간에 영구 상태를 유지합니다.The CDC Control task maintains a persistent state between activations. CDC 상태에 저장되는 정보는 CDC 패키지의 처리 범위를 결정 및 유지하고 오류 상태를 검색하는 데 사용됩니다.The information stored in the CDC state is used to determine and maintain the processing range for the CDC package and for detecting error conditions. 영구 상태는 문자열로 저장됩니다.The persistent state is stored as a string. 자세한 내용은 상태 변수 정의를 참조하세요.For more information, see Define a State Variable.

CDC 제어 태스크는 두 가지 유형의 상태 지속성을 지원합니다.The CDC Control task supports two types of state persistency

  • 수동 상태 지속성: 이 경우 CDC 제어 태스크가 패키지 변수에 저장된 상태를 관리하지만 패키지 개발자가 CDC 제어를 호출하기 전에 영구 저장소에서 변수를 읽은 다음 CDC 제어가 마지막으로 호출되고 CDC 실행이 완료된 후에 해당 영구 저장소에 변수를 다시 써야 합니다.Manual State Persistency: In this case, the CDC Control task manages the state stored in a package variable but the package developer must read the variable from a persistent store before calling the CDC Control and then write it back to that persistent store after the CDC Control is last called and the CDC run completes.

  • 자동 상태 지속성: CDC 상태가 데이터베이스의 테이블에 저장됩니다.Automatic State Persistency: The CDC state is stored in a table in a database. 상태는 상태를 저장하는 데 사용할 테이블 속성(상태 저장을 위해 선택한 연결 관리자에 있음)으로 지정한 테이블의 StateName 속성에 제공된 이름으로 저장됩니다.The state is stored under a name provided in the StateName property in a table named in the Table to Use for Storing State property, which is located in a selected connection manager for storing the state. 기본값은 원본 연결 관리자이지만 대상 연결 관리자를 사용하는 것이 일반적입니다.The default is the source connection manager but the common practice is for it to be the target connection manager. CDC 제어 태스크는 상태 테이블에서 상태 값을 업데이트하며 이는 앰비언트 트랜잭션의 일환으로 커밋됩니다.The CDC Control task updates the state value in the state table and this is committed as part of the ambient transaction.

오류 처리Error Handling

CDC 제어 태스크는 다음과 같은 경우 오류를 보고할 수 있습니다.The CDC Control task may report an error when:

  • 영구 CDC 상태를 읽지 못하거나 영구 상태를 업데이트하지 못할 경우It fails to read the persistent CDC state or when updating the persistent state fails.

  • 원본 데이터베이스에서 현재 LSN 정보를 읽지 못할 경우It fails to read the current LSN information from the source database.

  • CDC 상태 읽기가 일관되지 않을 경우The CDC state read is not consistent.

    이러한 모든 경우 CDC 제어 태스크는 오류를 보고합니다. 이러한 오류는 SSIS가 제어 흐름 오류를 처리하는 표준 방식으로 처리할 수 있습니다.In all of these cases, the CDC Control task reports an error that can be handled in the standard way SSIS handles control-flow errors.

    CDC 제어 태스크는 처리된 범위 표시가 호출되지 않은 채 처리 범위 가져오기 작업 직후에 다른 처리 범위 가져오기 작업이 호출될 때도 경고를 보고할 수 있습니다.The CDC Control task may also report a warning when the Get Processing Range operation is invoked directly after another Get Processing Range operation without Mark Processed Range being called. 이는 이전 실행이 실패했거나 동일한 CDC 상태 이름을 사용하는 다른 CDC 패키지가 실행되고 있을 수 있음을 나타냅니다.This is an indication that the previous run failed or that another CDC package may be running using the same CDC state name.

CDC 제어 태스크 구성Configuring the CDC Control Task

SSIS 디자이너를 사용하거나 프로그래밍 방식으로 속성을 설정할 수 있습니다.You can set properties through SSIS Designer or programmatically.

섹션 내용In This Section

상태 변수 정의Define a State Variable

CDC 제어 태스크 편집기CDC Control Task Editor

CDC 제어 태스크 편집기 대화 상자를 사용하여 CDC 제어 태스크를 구성할 수 있습니다.Use the CDC Control Task Editor dialog box to configure the CDC Control task. CDC 제어 태스크 구성에는 CDC 데이터베이스, CDC 태스크 작업 및 상태 관리 정보에 대한 연결을 정의하는 작업이 포함됩니다.The CDC Control task configuration includes defining a connection to the CDC database, the CDC task operation and the state management information.

CDC 제어 태스크에 대한 자세한 내용은 CDC Control Task를 참조하세요.To learn more about the CDC Control task, see CDC Control Task.

CDC 제어 태스크 편집기를 열려면To open the CDC Control Task Editor

  1. SQL Server Data ToolsSQL Server Data Tools에서 CDC 제어 태스크가 있는 SQL Server 2017 Integration Services(SSIS)SQL Server 2017 Integration Services (SSIS) 패키지를 엽니다.In SQL Server Data ToolsSQL Server Data Tools, open the SQL Server 2017 Integration Services(SSIS)SQL Server 2017 Integration Services (SSIS) package that has the CDC Control task.

  2. 제어 흐름 탭에서 CDC 제어 태스크를 두 번 클릭합니다.On the Control Flow tab, double-click the CDC Control task.

옵션Options

SQL Server CDC 데이터베이스 ADO.NET 연결 관리자SQL Server CDC database ADO.NET connection manager
목록에서 기존 연결 관리자를 선택하거나 새로 만들기 를 클릭하여 새 연결을 만듭니다.Select an existing connection manager from the list, or click New to create a new connection. CDC에 사용할 수 있고 선택한 변경 테이블이 있는 SQL ServerSQL Server 데이터베이스에 연결해야 합니다.The connection must be to a SQL ServerSQL Server database that is enabled for CDC and where the selected change table is located.

CDC 제어 작업CDC Control Operation
이 태스크에 대해 실행할 작업을 선택합니다.Select the operation to run for this task. 모든 작업은 상태를 저장하고 패키지의 다른 구성 요소 간에 전달하는 SSIS 패키지 변수에 저장되는 상태 변수를 사용합니다.All operations use the state variable that is stored in an SSIS package variable that stores the state and passes it between the different components in the package.

  • 초기 로드 시작 표시: 이 작업은 스냅숏 없이 활성 데이터베이스에서 초기 로드를 실행할 때 사용됩니다.Mark initial load start: This operation is used when executing an initial load from an active database without a snapshot. 이 작업은 초기 로드 패키지의 시작 부분에서 초기 로드 패키지가 원본 테이블을 읽기 시작하기 전에 현재 LSN을 원본 데이터베이스에 기록하기 위해 호출됩니다.It is invoked at the beginning of an initial-load package to record the current LSN in the source database before the initial-load package starts reading the source tables. 이 작업을 수행하려면 원본 데이터베이스에 대한 연결이 필요합니다.This requires a connection to the source database.

    CDC(즉, Oracle이 아님)에서 작업할 때 초기 로드 시작 표시 SQL Server 2017SQL Server 2017 를 선택하는 경우 연결 관리자에 지정된 사용자는 db_owner 또는 sysadmin이어야 합니다.If you select Mark Initial Load Start when working on SQL Server 2017SQL Server 2017 CDC (that is, not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.

  • 초기 로드 끝 표시: 이 작업은 스냅숏 없이 활성 데이터베이스에서 초기 로드를 실행할 때 사용됩니다.Mark initial load end: This operation is used when executing an initial load from an active database without a snapshot. 이 작업은 초기 로드 패키지의 끝 부분에서 초기 로드 패키지가 원본 테이블 읽기를 완료한 후 현재 LSN을 원본 데이터베이스에 기록하기 위해 호출됩니다.It is invoked at the end of an initial-load package to record the current LSN in the source database after the initial-load package finished reading the source tables. 이 LSN은 이 작업이 발생한 현재 시간을 기록한 후 CDC 데이터베이스에서 해당 시간 이후에 발생한 변경 내용을 조회하는 cdc.lsn_time_매핑 테이블을 쿼리하여 결정됩니다.This LSN is determined by recording nthe current time when this operation occurred and then querying the cdc.lsn_time_mapping table in the CDC database looking for a change that occurred after that time

    CDC(즉, Oracle이 아님)에서 작업할 때 초기 로드 끝 표시 SQL Server 2017SQL Server 2017 를 선택하는 경우 연결 관리자에 지정된 사용자는 db_owner 또는 sysadmin이어야 합니다.If you select Mark Initial Load End when working on SQL Server 2017SQL Server 2017 CDC (that is, not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.

  • CDC 시작 표시: 이 작업은 스냅숏 데이터베이스 또는 정지 데이터베이스에서 초기 로드를 수행할 때 사용됩니다.Mark CDC start: This operation is used when then the initial load is made from a snapshot database database or from a quiescence database. 이 작업은 초기 로드 패키지 내의 어느 지점에서나 호출됩니다.It is invoked at any point within the initial load package. 이 작업에는 스냅숏 LSN이거나 스냅숏 LSN이 자동으로 파생될 스냅숏 데이터베이스의 이름이거나 비워 둘 수 있는 매개 변수가 허용됩니다. 매개 변수를 비워둘 경우 현재 데이터베이스 LSN이 변경 내용 처리 패키지의 시작 LSN으로 사용됩니다.The operation accepts a parameter that can be a snapshot LSN, a name of a snapshot database (from which the snapshot LSN will be derived automatically) or it can be left empty, in which case the current database LSN is used as the start LSN for the change processing package.

    이 작업은 초기 로드 시작/끝 표시 작업 대신 사용됩니다.This operation is used instead of the Mark Initial Load Start/End operations.

    CDC(즉, Oracle이 아님)에서 작업할 때 CDC 시작 표시 SQL Server 2017SQL Server 2017 를 선택하는 경우 연결 관리자에 지정된 사용자는 db_owner 또는 sysadmin이어야 합니다.If you select Mark CDC Start when working on SQL Server 2017SQL Server 2017 CDC (that is, not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.

  • 처리 범위 가져오기: 이 작업은 CDC 원본 데이터 흐름을 사용하는 데이터 흐름을 호출하기 전에 변경 내용 처리 패키지 내에서 사용됩니다.Get processing range: This operation is used in a change processing package before invoking the data flow that uses the CDC Source data flow. 이 작업은 호출될 때 CDC 원본 데이터 흐름에서 읽는 LSN의 범위를 설정합니다.It establishes a range of LSNs that the CDC Source data flow reads when invoked. 범위는 데이터 흐름을 처리하는 동안 CDC 원본에서 사용되는 SSIS 패키지 변수에 저장됩니다.The range is stored in an SSIS package variable that is used by the CDC Source during data-flow processing.

    저장 가능한 CDC 상태에 대한 자세한 내용은 상태 변수 정의를 참조하세요.For more information about the possible CDC states that are stored, see Define a State Variable.

  • 처리된 범위 표시: 이 작업은 CDC 실행의 끝 부분에서 CDC 데이터 흐름이 성공적으로 완료된 후 CDC 실행 중에 완전히 처리된 마지막 LSN을 기록하기 위해 변경 내용 처리 패키지에서 사용됩니다.Mark processed range: This operation is used in a change processing package at the end of a CDC run (after the CDC data flow is completed successfully) to record the last LSN that was fully processed in the CDC run. 다음에 GetProcessingRange 를 실행하면 이 위치에 따라 다음 처리 범위의 시작 부분이 결정됩니다.The next time GetProcessingRange is executed, this position determines the start of the next processing range.

  • CDC 상태 다시 설정: 이 작업은 현재 CDC 컨텍스트에 연결된 영구 CDC 상태를 다시 설정하는 데 사용됩니다.Reset CDC state: This operation is used to reset the persistent CDC state associated with the current CDC context. 이 작업을 실행하면 LSN 타임스탬프 sys.fn_cdc_get_max_lsn 테이블의 현재 최대 LSN이 다음 처리 범위의 시작 부분이 됩니다.After this operation is run, the current maximum LSN from the LSN-timestamp sys.fn_cdc_get_max_lsn table becomes the start of the range for the next processing range. 이 작업을 수행하려면 원본 데이터베이스에 대한 연결이 필요합니다.This operation requires a connection to the source database.

    이 작업을 사용하는 예로는 새로 만든 변경 레코드만 처리하고 이전 변경 레코드는 모두 무시하려는 경우가 있습니다.An example of when this operation is used is when you want to process only the newly created change records and ignore all old change records.

    CDC 상태를 포함하는 변수Variable containing the CDC state
    태스크 작업에 대한 상태 정보를 저장하는 SSIS 패키지 변수를 선택합니다.Select the SSIS package variable that stores the state information for the task operation. 시작하기 전에 변수를 정의해야 합니다.You should define a variable before you begin. 자동 상태 지속을 선택하는 경우 상태 변수가 로드되고 자동으로 저장됩니다.If you select Automatic state persistence, the state variable is loaded and saved automatically.

    상태 변수를 정의하는 방법에 대한 자세한 내용은 상태 변수 정의를 참조하세요.For more information about defining the state variable, see Define a State Variable.

    CDC/스냅숏 이름을 시작하는 SQL Server LSN:SQL Server LSN to start the CDC/Snapshot name:
    CDC가 시작되는 위치를 결정하기 위해 초기 로드가 수행되는 스냅숏 데이터베이스의 이름 또는 현재 원본 데이터베이스 LSN을 입력합니다.Type the current source database LSN or the name of the snapshot database from which the initial load is performed to determine where the CDC starts. 이 작업은 CDC 제어 작업CDC 시작 표시로 설정되어 있는 경우에만 사용할 수 있습니다.This is available only if the CDC Control Operation is set to Mark CDC Start.

    이러한 작업에 대한 자세한 내용은 CDC Control Task를 참조하세요.For more information about these operations, see CDC Control Task

    데이터베이스 테이블에 자동으로 상태 저장Automatically store state in a database table
    CDC 제어 태스크를 통해 지정한 데이터베이스에 포함된 상태 테이블에 CDC 상태를 로드하고 저장하는 작업을 자동으로 처리하려면 이 확인란을 선택합니다.Select this check box for the CDC Control task to automatically handle loading and storing the CDC state in a state table contained in the specified database. 이 확인란이 선택되어 있지 않으면 개발자가 패키지가 시작될 때 CDC 상태를 로드하고 CDC 상태가 변경될 때마다 해당 상태를 저장해야 합니다.When not selected, the developer must load the CDC State when the package starts and save it whenever the CDC State changes.

    상태가 저장되는 데이터베이스에 대한 연결 관리자Connection manager for the database where the state is stored
    목록에서 기존 ADO.NET 연결 관리자를 선택하거나 새로 만들기를 클릭하여 새 연결을 만듭니다.Select an existing ADO.NET connection manager from the list, or click New to create a new connection. 이 연결은 상태 테이블을 포함하고 있는 SQL ServerSQL Server 데이터베이스에 대한 연결입니다.This connection is to a SQL ServerSQL Server database that contains the State table. 상태 테이블은 상태 정보를 포함합니다.The State table contains the State information.

    상태 테이블은 자동 상태 지속 이 선택되어 있는 경우에만 사용할 수 있으며 필수 매개 변수입니다.This is available only if Automatic state persistence is selected and it is a required parameter.

    상태를 저장하는 데 사용할 테이블Table to use for storing state
    CDC 상태를 저장하는 데 사용할 상태 테이블의 이름을 입력합니다.Type the name of the state table to be used for storing the CDC state. 지정한 테이블에는 이름 열과 상태 열이 있어야 하며 두 열 모두 데이터 형식이 varchar(256)야 합니다.The table specified must have two columns called name and state and both columns must be of the data type varchar (256).

    필요에 따라 새로 만들기 를 선택하여 필수 열이 포함된 새 상태 테이블을 작성하는 SQL 스크립트를 가져올 수도 있습니다.You can optionally select New to get an SQL script that builds a new State table with the required columns. 자동 상태 지속 이 선택되어 있으면 개발자가 위에 나열된 요구 사항에 따라 상태 테이블을 작성해야 합니다.When Automatic state persistence is selected, the developer must create a state table according to the requirements listed above.

    상태 테이블은 자동 상태 지속 이 선택되어 있는 경우에만 사용할 수 있으며 필수 매개 변수입니다.This is available only if Automatic state persistence is selected and it is a required parameter.

    상태 이름State name
    영구 CDC 상태에 연결할 이름을 입력합니다.Type a name to associate with the persistent CDC state. 동일한 CDC 컨텍스트를 사용하는 CDC 패키지 및 전체 로드는 일반적인 상태 이름을 지정합니다.The full load and CDC packages that work with the same CDC context will specify a common state name. 이 이름은 상태 테이블에서 상태 행을 조회하는 데 사용됩니다.This name is used for looking up the state row in the state table