변경 데이터 캡처 사용 및 사용 안 함

적용 대상:SQL ServerAzure SQL Managed Instance

이 문서에서는 데이터베이스 및 SQL Server 및 Azure SQL Managed Instance에 대한 테이블에 대해 CDC(변경 데이터 캡처)를 사용하거나 사용하지 않도록 설정하는 방법을 설명합니다. Azure SQL Database의 경우 Azure SQL Database를 사용한 CDC를 참조하세요.

사용 권한

sysadmin SQL Server 및 Azure SQL Managed Instance에서 변경 데이터 캡처를 사용하거나 사용하지 않도록 설정하려면 권한이 필요합니다.

데이터베이스에 대해 사용

개별 테이블에 대한 캡처 인스턴스를 만들려면 먼저 데이터베이스에 대한 변경 데이터 캡처를 사용하도록 설정해야 합니다.

변경 데이터 캡처를 사용하도록 설정하려면 데이터베이스 컨텍스트에서 저장 프로시저 sys.sp_cdc_enable_db(Transact-SQL) 를 실행합니다. 데이터베이스에 CDC가 이미 설정되어 있는지 확인하려면 카탈로그 뷰에서 sys.databases is_cdc_enabled 열을 쿼리합니다.

데이터베이스에 변경 데이터 캡처를 사용하도록 설정하면 데이터베이스에 대한 cdc 스키마, cdc 사용자, 메타데이터 테이블 및 기타 시스템 개체가 만들어집니다. cdc 스키마에는 변경 데이터 캡처 메타데이터 테이블이 포함되며, 원본 테이블이 변경 데이터 캡처에 사용하도록 설정된 후 개별 변경 테이블은 변경 데이터의 리포지토리 역할을 합니다. cdc 스키마에는 변경 데이터를 쿼리하는 데 사용되는 연결된 시스템 함수도 포함되어 있습니다.

변경 데이터 캡처를 사용하려면 cdc 스키마 및 cdc 사용자를 단독으로 사용해야 합니다. 현재 cdc라는 스키마 또는 데이터베이스 사용자가 데이터베이스에 있는 경우 스키마 및/또는 사용자가 삭제되거나 이름이 바뀔 때까지 데이터베이스에 대해 변경 데이터 캡처를 사용하도록 설정할 수 없습니다.

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

참고 항목

SQL Server Management Studio에서 CDC 관련 템플릿을 찾으려면 보기로 이동하여 템플릿 탐색기를 선택한 다음 SQL Server 템플릿을 선택합니다. 변경 데이터 캡처 는 템플릿을 포함하는 하위 폴더입니다.

데이터베이스에 대해 사용 안 함

데이터베이스 컨텍스트에서 sys.sp_cdc_disable_db(Transact-SQL)를 사용하여 데이터베이스에 대한 변경 데이터 캡처를 사용하지 않도록 설정합니다. 데이터베이스에 대해 CDC를 사용하지 않도록 설정하기 전에 개별 테이블에 대해 CDC를 사용하지 않도록 설정할 필요가 없습니다. 데이터베이스에 CDC를 사용하지 않도록 설정하면 cdc 사용자, 스키마 및 변경 데이터 캡처 작업을 포함하여 연결된 모든 변경 데이터 캡처 메타데이터가 제거됩니다. 그러나 CDC에서 만든 모든 게이팅 역할은 자동으로 제거되지 않으며 명시적으로 삭제해야 합니다. 데이터베이스에 CDC가 사용하도록 설정되어 있는지 확인하려면 카탈로그 뷰에서 sys.databases is_cdc_enabled 열을 쿼리합니다.

CDC 지원 데이터베이스를 삭제하면 변경 데이터 캡처 작업이 자동으로 제거됩니다.

-- Disable Database for change data capture
USE MyDB
GO
EXEC sys.sp_cdc_disable_db
GO

테이블에 대해 사용

변경 데이터 캡처에 데이터베이스를 사용하도록 설정한 후 db_owner 고정 데이터베이스 역할의 멤버는 저장 프로시저sys.sp_cdc_enable_table를 사용하여 개별 원본 테이블에 대한 캡처 인스턴스를 만들 수 있습니다. 원본 테이블이 이미 변경 데이터 캡처를 사용하도록 설정되었는지 확인하려면 카탈로그 뷰에서 sys.tables is_tracked_by_cdc 열을 검사합니다.

Important

저장 프로시저 인수에 sys.sp_cdc_enable_table 대한 자세한 내용은 sys.sp_cdc_enable_table(Transact-SQL)를 참조하세요.

캡처 인스턴스를 만들 때에는 다음과 같은 옵션을 지정할 수 있습니다.

캡처할 원본 테이블 열

기본적으로 원본 테이블의 모든 열은 캡처된 열로 식별됩니다. 개인 정보 또는 성능상의 이유로 열의 하위 집합만 추적해야 하는 경우 @captured_column_list 매개 변수를 사용하여 열의 하위 집합을 지정합니다.

변경 테이블을 포함할 파일 그룹입니다.

기본적으로 변경 테이블은 데이터베이스의 기본 파일 그룹에 있습니다. 개별 변경 테이블의 배치를 제어하려는 데이터베이스 소유자는 filegroup_name 매개 변수를 사용하여, 캡처 인스턴스와 연결된 변경 테이블에 특정 파일 그룹을 지정할 수 있습니다. 명명된 파일 그룹은 이미 존재해야 합니다. 일반적으로 변경 테이블은 원본 테이블과 별도로 파일 그룹에 배치하는 것이 좋습니다. @filegroup_name 매개 변수 사용 방법을 보여 주는 예는 파일 그룹 옵션 지정 테이블 설정 템플릿을 참조하세요.

-- Enable CDC for a table specifying filegroup
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

변경 테이블에 대한 액세스를 제어하는 역할입니다.

명명된 역할의 목적은 변경 데이터에 대한 액세스를 제어하는 것입니다. 지정된 역할은 기존 고정 서버 역할 또는 데이터베이스 역할일 수 있습니다. 지정한 역할이 아직 없으면 해당 이름의 데이터베이스 역할이 자동으로 만들어집니다. 사용자는 원본 테이블의 캡처된 모든 열에 대해 SELECT 권한이 있어야 합니다. 또한 역할이 지정되면 sysadmin 또는 db_owner 역할의 멤버가 아닌 사용자도 지정된 역할의 멤버여야 합니다.

게이팅 역할을 사용하지 않으려면 @role_name 매개 변수를 NULL로 명시적으로 설정합니다. 제어 역할이 없는 테이블을 설정하는 예는 Enable a Table Without Using a Gating Role 템플릿을 참조하십시오.

-- Enable CDC for a table using a gating role option
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

순 변경 내용을 쿼리하는 함수입니다.

캡처 인스턴스에는 정의된 간격 내에 발생한 모든 변경 테이블 항목을 반환하기 위한 TVF(테이블 반환 함수)가 항상 포함됩니다. 이 함수는 캡처 인스턴스 이름을 'cdc.fn_cdc_get_all_changes_'에 추가하여 이름을 지정합니다. 자세한 내용은 cdc.fn_cdc_get_all_changes_<capture_instance>(Transact-SQL)를 참조하세요.

@supports_net_changes 매개 변수가 1로 설정된 경우 캡처 인스턴스에 순 변경 함수도 생성됩니다. 이 함수는 호출에 지정된 간격 내에 변경된 각 개별 행에 대해 하나의 변경만 반환합니다. 자세한 내용은 cdc.fn_cdc_get_net_changes_<capture_instance>(Transact-SQL)를 참조하세요.

순 변경 쿼리를 지원하기 위해 원본 테이블에는 행을 고유하게 식별하는 기본 키 또는 고유 인덱스가 있어야 합니다. 고유 인덱스가 사용되는 경우 @index_name 매개 변수를 사용하여 인덱스의 이름을 지정해야 합니다. 기본 키 또는 고유 인덱스에 정의된 열은 캡처할 원본 열 목록에 포함되어야 합니다.

두 쿼리 함수를 모두 사용하여 캡처 인스턴스를 만드는 것을 보여 주는 예제는 All 및 Net Changes 쿼리에 테이블 사용 템플릿을 참조하세요.

-- Enable CDC for a table for all and net changes queries
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 매개 변수를 사용하여 대체 고유 인덱스 식별에 사용되지 않는 경우 변경 데이터 캡처 기능은 기본 키를 사용합니다. 테이블에 대한 변경 데이터 캡처를 먼저 사용하지 않도록 설정하지 않으면 기본 키에 대한 후속 변경이 허용되지 않습니다. 변경 데이터 캡처가 구성되었을 때 순 변경 쿼리에 대한 지원이 요청되었는지 여부에 관계없이 마찬가지입니다. 테이블에 변경 데이터 캡처를 설정할 당시 기본 키가 없는 경우에는 기본 키에 대한 후속 추가 사항이 변경 데이터 캡처에 의해 무시됩니다. 변경 데이터 캡처는 테이블을 사용하도록 설정한 후에 생성된 기본 키를 사용하지 않으므로 키 및 키 열을 제한 없이 제거할 수 있습니다.

테이블에 대해 사용 안 함

db_owner 고정 데이터베이스 역할의 멤버는 저장 프로시저 sys.sp_cdc_disable_tablee. To determine whether a source table is currently enabled for change data capture, examine the **is_tracked_by_cdc** column in the sys.tables의 카탈로그 뷰를 사용하여 개별 원본 테이블에 대한 캡처 인스턴스를 제거할 수 있습니다. 해제를 수행한 후 데이터베이스에 변경 데이터 캡처 기능이 설정된 테이블이 없으면 변경 데이터 캡처 작업도 제거됩니다.

변경 데이터 캡처가 설정된 테이블을 삭제하면 이 테이블과 연결된 변경 데이터 캡처 메타데이터도 자동으로 제거됩니다.

테이블에서 이 기능을 사용하지 않도록 설정하는 예는 테이블의 캡처 인스턴스 해제 템플릿을 참조하십시오.

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

참고 항목