변경 데이터 캡처 설정 및 해제(SQL Server)Enable and Disable Change Data Capture (SQL Server)

이 항목은 다음에 적용됩니다.예SQL Server(2008부터)아니요Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse 이 항목에서는 데이터베이스 및 테이블에서 변경 데이터 캡처를 사용하거나 사용하지 않도록 설정하는 방법에 대해 설명합니다. This topic describes how to enable and disable change data capture for a database and a table.

데이터베이스에 변경 데이터 캡처 설정Enable Change Data Capture for a Database

개별 테이블에서 캡처 인스턴스를 만들려면 먼저 sysadmin 고정 서버 역할의 멤버가 데이터베이스에 변경 데이터 캡처를 설정해야 합니다.Before a capture instance can be created for individual tables, a member of the sysadmin fixed server role must first enable the database for change data capture. 이 작업은 데이터베이스 컨텍스트에서 sys.sp_cdc_enable_db(Transact-SQL) 저장 프로시저를 실행하여 수행됩니다.This is done by running the stored procedure sys.sp_cdc_enable_db (Transact-SQL) in the database context. 데이터베이스에 이 기능이 이미 설정되었는지 확인하려면 sys.databases 카탈로그 뷰의 is_cdc_enabled 열을 쿼리합니다.To determine if a database is already enabled, query the is_cdc_enabled column in the sys.databases catalog view.

데이터베이스에 변경 데이터 캡처가 설정되면 데이터베이스에 cdc 스키마, cdc 사용자, 메타데이터 테이블 및 다른 시스템 개체가 생성됩니다.When a database is enabled for change data capture, the cdc schema, cdc user, metadata tables, and other system objects are created for the database. cdc 스키마에는 변경 데이터 캡처 메타데이터 테이블이 포함되며 원본 테이블에 변경 데이터 캡처가 설정된 후에는 변경 데이터에 대한 리포지토리 역할을 수행하는 개별 변경 테이블이 포함됩니다.The cdc schema contains the change data capture metadata tables and, after source tables are enabled for change data capture, the individual change tables serve as a repository for change data. 변경 데이터를 쿼리하는 데 사용되는 관련 시스템 함수도 cdc 스키마에 포함됩니다.The cdc schema also contains associated system functions used to query for change data.

변경 데이터 캡처를 사용하려면 cdc 스키마와 cdc 사용자를 배타적으로 사용해야 합니다.Change data capture requires exclusive use of the cdc schema and cdc user. cdc 라는 스키마 또는 데이터베이스 사용자가 데이터베이스에 현재 있는 경우 해당 스키마 및/또는 사용자가 삭제되거나 이름이 바뀔 때까지 데이터베이스에 변경 데이터 캡처를 설정할 수 없습니다.If either a schema or a database user named cdc currently exists in a database, the database cannot be enabled for change data capture until the schema and or user are dropped or renamed.

데이터베이스에서 이 기능을 사용하도록 설정하는 예는 데이터베이스의 변경 데이터 캡처 설정 템플릿을 참조하십시오.See the Enable Database for Change Data Capture template for an example of enabling a database.

중요

SQL Server Management StudioSQL Server Management Studio에서 이 템플릿을 찾으려면 보기로 이동하고 템플릿 탐색기를 클릭한 다음 SQL Server 템플릿을 선택합니다.To locate the templates in SQL Server Management StudioSQL Server Management Studio, go to View, click Template Explorer, and then select SQL Server Templates. 변경 데이터 캡처 는 하위 폴더입니다.Change Data Capture is a sub-folder. 이 폴더 아래에는 이 항목에서 참조하는 모든 템플릿이 있습니다.Under this folder, you will find all the templates referenced in this topic. 또한 도구 모음에 있는 템플릿 탐색기 SQL Server Management StudioSQL Server Management Studio 아이콘을 사용할 수도 있습니다.There is also a Template Explorer icon on the SQL Server Management StudioSQL Server Management Studio toolbar.

-- ====  
-- Enable Database for CDC template   
-- ====  
USE MyDB  
GO  
EXEC sys.sp_cdc_enable_db  
GO  

데이터베이스의 변경 데이터 캡처 해제Disable Change Data Capture for a Database

sysadmin 고정 서버 역할의 멤버는 데이터베이스 컨텍스트에서 sys.sp_cdc_disable_db(Transact-SQL) 저장 프로시저를 실행하여 데이터베이스의 변경 데이터 캡처를 사용하지 않도록 설정할 수 있습니다.A member of the sysadmin fixed server role can run the stored procedure sys.sp_cdc_disable_db (Transact-SQL) in the database context to disable change data capture for a database. 개별 테이블에서 먼저 이 기능을 해제한 후 데이터베이스에서 이 기능을 해제할 필요는 없습니다.It is not necessary to disable individual tables before you disable the database. 데이터베이스에서 이 기능을 해제하면 cdc 사용자 및 스키마와 변경 데이터 캡처 작업을 포함하는 모든 연결된 변경 데이터 캡처 메타데이터가 제거됩니다.Disabling the database removes all associated change data capture metadata, including the cdc user and schema and the change data capture jobs. 하지만 변경 데이터 캡처로 생성된 모든 제어 역할은 자동으로 제거되지 않으며 명시적으로 삭제해야 합니다.However, any gating roles created by change data capture will not be removed automatically and must be explicitly deleted. 데이터베이스에 이 기능이 설정되었는지 확인하려면 sys.databases 카탈로그 뷰의 is_cdc_enabled 열을 쿼리합니다.To determine if a database is enabled, query the is_cdc_enabled column in the sys.databases catalog view.

변경 데이터 캡처가 설정된 데이터베이스를 삭제하면 변경 데이터 캡처 작업이 자동으로 제거됩니다.If a change data capture enabled database is dropped, change data capture jobs are automatically removed.

데이터베이스에서 이 기능을 사용하지 않도록 설정하는 예는 데이터베이스의 변경 데이터 캡처 해제 템플릿을 참조하십시오.See the Disable Database for Change Data Capture template for an example of disabling a database.

중요

SQL Server Management StudioSQL Server Management Studio에서 이 템플릿을 찾으려면 보기로 이동하고 템플릿 탐색기를 클릭한 다음 SQL Server 템플릿을 클릭합니다.To locate the templates in SQL Server Management StudioSQL Server Management Studio, go to View, click Template Explorer, and then click SQL Server Templates. 변경 데이터 캡처 하위 폴더에는 이 항목에서 참조되는 모든 템플릿이 있습니다.Change Data Capture is a sub-folder where you will find all the templates that are referenced in this topic. 또한 도구 모음에 있는 템플릿 탐색기 SQL Server Management StudioSQL Server Management Studio 아이콘을 사용할 수도 있습니다.There is also a Template Explorer icon on the SQL Server Management StudioSQL Server Management Studio toolbar.

-- =======  
-- Disable Database for Change Data Capture template   
-- =======  
USE MyDB  
GO  
EXEC sys.sp_cdc_disable_db  
GO  

테이블의 변경 데이터 캡처 설정Enable Change Data Capture for a Table

데이터베이스에 변경 데이터 캡처를 설정한 후에는 db_owner 고정 데이터베이스 역할의 멤버가 sys.sp_cdc_enable_table저장 프로시저를 사용하여 개별 원본 테이블에 캡처 인스턴스를 만들 수 있습니다.After a database has been enabled for change data capture, members of the db_owner fixed database role can create a capture instance for individual source tables by using the stored procedure sys.sp_cdc_enable_table. 원본 테이블에 변경 데이터 캡처가 이미 설정되었는지 확인하려면 sys.tables 카탈로그 뷰의 is_tracked_by_cdc 열을 살펴봅니다.To determine whether a source table has already been enabled for change data capture, examine the is_tracked_by_cdc column in the sys.tables catalog view.

캡처 인스턴스를 만들 때에는 다음과 같은 옵션을 지정할 수 있습니다.The following options can be specified when creating a capture instance:

Columns in the source table to be captured.Columns in the source table to be captured.

기본적으로 원본 테이블의 모든 열은 캡처된 열로 식별됩니다.By default, all of the columns in the source table are identified as captured columns. 개인 정보 보호 또는 성능상의 이유 등으로 인해 열의 하위 집합만 추적해야 하는 경우에는 @captured_column_list 매개 변수를 사용하여 열의 하위 집합을 지정합니다.If only a subset of columns need to be tracked, such as for privacy or performance reasons, use the @captured_column_list parameter to specify the subset of columns.

변경 테이블을 포함할 파일 그룹A filegroup to contain the change table.

기본적으로 변경 테이블은 데이터베이스의 기본 파일 그룹에 있습니다.By default, the change table is located in the default filegroup of the database. 개별 변경 테이블의 배치를 제어하려는 데이터베이스 소유자는 @filegroup_name 매개 변수를 사용하여 캡처 인스턴스와 연결된 변경 테이블에 대해 특정 파일 그룹을 지정할 수 있습니다.Database owners who want to control the placement of individual change tables can use the @filegroup_name parameter to specify a particular filegroup for the change table associated with the capture instance. 명명된 파일 그룹은 이미 존재해야 합니다.The named filegroup must already exist. 일반적으로 변경 테이블은 원본 테이블과 별도의 파일 그룹에 배치하는 것이 좋습니다.Generally, it is recommended that change tables be placed in a filegroup separate from source tables. 제어 역할이 없는 테이블을 설정하는 예는 @filegroup_name 매개 변수 사용 방법을 보여 주는 예는 @filegroup_name 템플릿을 참조하세요.See the Enable a Table Specifying Filegroup Option template for an example showing use of the @filegroup_name parameter.

-- =========  
-- Enable a Table Specifying Filegroup Option Template  
-- =========  
USE MyDB  
GO  

EXEC sys.sp_cdc_enable_table  
@source_schema = N'dbo',  
@source_name   = N'MyTable',  
@role_name     = N'MyRole',  
@filegroup_name = N'MyDB_CT',  
@supports_net_changes = 1  
GO  

변경 테이블에 대한 액세스를 제어하는 역할A role for controlling access to a change table.

명명된 역할의 목적은 변경 데이터에 대한 액세스를 제어하는 것입니다.The purpose of the named role is to control access to the change data. 지정된 역할은 기존의 고정 서버 역할 또는 데이터베이스 역할일 수 있습니다.The specified role can be an existing fixed server role or a database role. 지정된 역할이 아직 없는 경우 해당 이름의 데이터베이스 역할이 자동으로 생성됩니다.If the specified role does not already exist, a database role of that name is created automatically. sysadmin 또는 db_owner 역할의 멤버는 변경 테이블의 데이터에 대한 모든 액세스 권한을 가집니다.Members of either the sysadmin or db_owner role have full access to the data in the change tables. 다른 모든 사용자에게는 원본 테이블의 모든 캡처된 열에 대한 SELECT 권한이 있어야 합니다.All other users must have SELECT permission on all the captured columns of the source table. 또한 역할이 지정되면 sysadmin 또는 db_owner 역할의 멤버가 아닌 사용자도 지정한 역할의 멤버여야 합니다.In addition, when a role is specified, users who are not members of either the sysadmin or db_owner role must also be members of the specified role.

제어 역할을 사용하지 않으려면 @role_name 매개 변수를 명시적으로 NULL로 설정하세요.If you do not want to use a gating role, explicitly set the @role_name parameter to NULL. 제어 역할이 없는 테이블을 설정하는 예는 Enable a Table Without Using a Gating Role 템플릿을 참조하십시오.See the Enable a Table Without Using a Gating Role template for an example of enabling a table without a gating role.

-- =========  
-- Enable a Table Without Using a Gating Role template   
-- =========  
USE MyDB  
GO  
EXEC sys.sp_cdc_enable_table  
@source_schema = N'dbo',  
@source_name   = N'MyTable',  
@role_name     = NULL,  
@supports_net_changes = 1  
GO  

순 변경 내용을 쿼리하는 함수A function to query for net changes.

캡처 인스턴스에는 항상 정의된 간격 내에서 발생한 모든 변경 테이블 항목을 반환하는 데 사용되는 테이블 반환 함수가 포함됩니다.A capture instance will always include a table valued function for returning all change table entries that occurred within a defined interval. 이 함수 이름은 "cdc.fn_cdc_get_all_changes_"에 캡처 인스턴스 이름을 추가하여 지정합니다.This function is named by appending the capture instance name to "cdc.fn_cdc_get_all_changes_". 자세한 내용은 cdc.fn_cdc_get_all_changes_<capture_instance>(Transact-SQL)를 참조하세요.For more information, see cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL).

@supports_net_changes 매개 변수가 1로 설정된 경우 캡처 인스턴스에 순 변경 함수도 생성됩니다.If the parameter @supports_net_changes is set to 1, a net changes function is also generated for the capture instance. 이 함수는 호출에 지정된 간격 내에 변경된 각 개별 행에 대해 하나의 변경만 반환합니다.This function returns only one change for each distinct row changed in the interval specified in the call. 자세한 내용은 cdc.fn_cdc_get_net_changes_<capture_instance>(Transact-SQL)를 참조하세요.For more information, see cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL).

순 변경 쿼리를 지원하기 위해 원본 테이블에는 행을 고유하게 식별하는 기본 키 또는 고유 인덱스가 있어야 합니다.To support net changes queries, the source table must have a primary key or unique index to uniquely identify rows. 고유 인덱스가 사용되는 경우 @index_name 템플릿을 참조하세요.If a unique index is used, the name of the index must be specified using the @index_name parameter. 기본 키 또는 고유 인덱스에 정의된 열은 캡처할 원본 열 목록에 포함되어야 합니다.The columns defined in the primary key or unique index must be included in the list of source columns to be captured.

두 쿼리 함수로 캡처 인스턴스를 생성하는 방법을 보여 주는 예는 Enable a Table for All and Net Changes Queries 템플릿을 참조하십시오.See the Enable a Table for All and Net Changes Queries template for an example demonstrating the creation of a capture instance with both query functions.

-- =============  
-- Enable a Table for All and Net Changes Queries template   
-- =============  
USE MyDB  
GO  
EXEC sys.sp_cdc_enable_table  
@source_schema = N'dbo',  
@source_name   = N'MyTable',  
@role_name     = N'MyRole',  
@supports_net_changes = 1  
GO  

참고

기존 기본 키가 있는 테이블에 변경 데이터 캡처가 설정되어 있고 @index_name 매개 변수를 사용하여 대체 고유 인덱스를 식별하지 않는 경우 변경 데이터 캡처 기능에 기본 키가 사용됩니다.If change data capture is enabled on a table with an existing primary key, and the @index_name parameter is not used to identify an alternative unique index, the change data capture feature will use the primary key. 기본 키에 대한 후속 변경 내용을 허용하려면 먼저 테이블의 변경 데이터 캡처를 해제해야 합니다.Subsequent changes to the primary key will not be allowed without first disabling change data capture for the table. 이는 변경 데이터 캡처를 구성할 때 순 변경 쿼리에 대한 지원을 요청했는지 여부와 관계없이 적용됩니다.This is true regardless of whether support for net changes queries was requested when change data capture was configured. 테이블에 변경 데이터 캡처를 설정할 당시 기본 키가 없는 경우에는 기본 키에 대한 후속 추가 사항이 변경 데이터 캡처에 의해 무시됩니다.If there is no primary key on a table at the time it is enabled for change data capture, the subsequent addition of a primary key is ignored by change data capture. 변경 데이터 캡처는 테이블에 이 기능이 설정된 이후에 생성되는 기본 키를 사용하지 않으므로 키와 키 열을 제한 없이 제거할 수 있습니다.Because change data capture will not use a primary key that is created after the table was enabled, the key and key columns can be removed without restrictions.

테이블의 변경 데이터 캡처 해제Disable Change Data Capture for a Table

db_owner 고정 데이터베이스 역할의 멤버는 sys.sp_cdc_disable_table저장 프로시저를 사용하여 개별 원본 테이블의 캡처 인스턴스를 제거할 수 있습니다.Members of the db_owner fixed database role can remove a capture instance for individual source tables by using the stored procedure sys.sp_cdc_disable_table. 원본 테이블에 변경 데이터 캡처가 이미 설정되었는지 확인하려면 sys.tables 카탈로그 뷰의 is_tracked_by_cdc 열을 살펴봅니다.To determine whether a source table is currently enabled for change data capture, examine the is_tracked_by_cdc column in the sys.tables catalog view. 해제를 수행한 후 데이터베이스에 변경 데이터 캡처 기능이 설정된 테이블이 없으면 변경 데이터 캡처 작업도 제거됩니다.If there are no tables enabled for the database after the disabling takes place, the change data capture jobs are also removed.

변경 데이터 캡처가 설정된 테이블을 삭제하면 이 테이블과 연결된 변경 데이터 캡처 메타데이터도 자동으로 제거됩니다.If a change data capture-enabled table is dropped, change data capture metadata that is associated with the table is automatically removed.

테이블에서 이 기능을 사용하지 않도록 설정하는 예는 테이블의 캡처 인스턴스 해제 템플릿을 참조하십시오.See the Disable a Capture Instance for a Table template for an example of disabling a table.

-- =====  
-- Disable a Capture Instance for a Table template   
-- =====  
USE MyDB  
GO  
EXEC sys.sp_cdc_disable_table  
@source_schema = N'dbo',  
@source_name   = N'MyTable',  
@capture_instance = N'dbo_MyTable'  
GO  

참고 항목See Also

데이터 변경 내용 추적(SQL Server) Track Data Changes (SQL Server)
변경 데이터 캡처 정보(SQL Server) About Change Data Capture (SQL Server)
변경 데이터 작업(SQL Server) Work with Change Data (SQL Server)
변경 데이터 캡처 관리 및 모니터링(SQL Server)Administer and Monitor Change Data Capture (SQL Server)