cdc.fn_cdc_get_all_changes_<capture_instance>(Transact-SQL)
지정한 LSN(로그 시퀀스 번호) 내 원본 테이블에 적용된 각 변경에 대해 한 개의 행을 반환합니다. 해당 간격 동안 원본 행이 여러 번 변경된 경우에는 반환된 결과 집합에 각 변경이 표시됩니다. 변경 데이터를 반환하는 것 외에 4개의 메타데이터 열은 다른 데이터 원본에 해당 변경을 적용하는 데 필요한 정보를 제공합니다. 행 필터링 옵션은 결과 집합에 반환되는 행 및 메타데이터 열의 내용을 제어합니다. 행 필터 옵션이 'all'로 지정된 경우 각 변경에는 변경을 식별하기 위한 하나의 행이 있습니다. 'all update old' 옵션이 지정된 경우 업데이트 작업은 2개의 행으로 표시됩니다. 한 행에는 업데이트 전의 캡처된 열 값이 포함되며, 다른 행에는 업데이트 후의 캡처된 열 값이 포함됩니다.
이 열거 함수는 원본 테이블에 변경 데이터 캡처가 활성화될 때 생성됩니다. 함수 이름은 파생되며 **cdc.fn_cdc_get_all_changes_**capture_instance 형식을 사용합니다. 여기서 capture_instance는 원본 테이블에 변경 데이터 캡처가 활성화될 때 캡처 인스턴스에 대해 지정된 값입니다.
구문
cdc.fn_cdc_get_all_changes_capture_instance ( from_lsn , to_lsn , '<row_filter_option>' )
<row_filter_option> ::=
{ all
| all update old
}
인수
from_lsn
결과 집합에 포함할 LSN 범위의 하위 끝점을 나타내는 LSN 값입니다. from_lsn은 binary(10)입니다.cdc.[capture_instance]_CT 변경 테이블에서 __$start_lsn의 값이 from_lsn보다 크거나 같은 행만 결과 집합에 포함됩니다.
to_lsn
결과 집합에 포함할 LSN 범위의 상위 끝점을 나타내는 LSN 값입니다. to_lsn은 binary(10)입니다.cdc.[capture_instance]_CT 변경 테이블에서 __$start_lsn의 값이 from_lsn보다 작거나 같은, 또는 to_lsn과 같은 행만 결과 집합에 포함됩니다.
<row_filter_option> ::= { all | all update old }
결과 집합에 반환되는 행과 메타데이터 열의 내용을 제어하는 옵션입니다.다음 옵션 중 하나를 사용할 수 있습니다.
all
지정된 LSN 범위 내의 모든 변경을 반환합니다. 업데이트 작업으로 인한 변경의 경우 업데이트가 적용된 후 새 값을 포함하는 행만 반환합니다.all update old
지정된 LSN 범위 내의 모든 변경을 반환합니다. 업데이트 작업으로 인한 변경의 경우 업데이트 전 열 값을 포함하는 행과 업데이트 후 열 값을 포함하는 행을 모두 반환합니다.
반환된 테이블
열 이름 |
데이터 형식 |
설명 |
---|---|---|
__$start_lsn |
binary(10) |
변경의 커밋 순서를 유지하고 있는 변경과 관련된 LSN을 커밋합니다. 동일한 트랜잭션에서 커밋된 변경의 커밋 LSN 값은 동일합니다. |
__$seqval |
binary(10) |
트랜잭션 내 행 변경을 정렬하는 데 사용되는 시퀀스 값입니다. |
__$operation |
int |
변경 데이터의 행을 대상 데이터 원본에 적용하는 데 필요한 DML(데이터 조작 언어) 작업을 식별합니다. 다음 중 하나일 수 있습니다. 1 = 삭제 2 = 삽입 3 = 업데이트(캡처된 열 값은 업데이트 작업 전의 값임) 이 값은 행 필터 옵션이 'all update old'로 지정된 경우에만 적용됩니다. 4 = 업데이트(캡처된 열 값은 업데이트 작업 후의 값임) |
__$update_mask |
varbinary(128) |
캡처 인스턴스에 대해 식별된 각 캡처된 열에 해당하는 비트가 있는 비트 마스크입니다. 이 값에는 __$operation이 1 또는 2인 경우 모두 1로 설정되는 정의된 비트가 있습니다. __$operation이 3 또는 4인 경우에는 변경된 열에 해당하는 비트만 1로 설정됩니다. |
<captured source table columns> |
다양함 |
함수에서 반환되는 나머지 열은 캡처 인스턴스가 생성될 때 식별된 캡처된 열입니다. 캡처된 열 목록에 아무 열도 지정하지 않으면 원본 테이블의 모든 열이 반환됩니다. |
사용 권한
sysadmin 고정 서버 역할 또는 db_owner 고정 데이터베이스 역할의 멤버 자격이 필요합니다. 다른 모든 사용자의 경우 원본 테이블에서 캡처된 모든 열에 대한 SELECT 권한이 필요하며 캡처 인스턴스에 대한 제어 역할이 정의된 경우 해당 데이터베이스 역할의 멤버 자격이 필요합니다. 호출자에게 원본 데이터를 볼 수 있는 권한이 없으면 함수는 오류 229("개체 'fn_cdc_get_all_changes_...', 데이터베이스 '<DatabaseName>', 스키마 'cdc'에 대한 SELECT 권한이 거부되었습니다")를 반환합니다.
주의
지정된 LSN 범위가 캡처 인스턴스에 대한 변경 추적 시간대를 벗어나는 경우 함수는 오류 208("프로시저 또는 함수 cdc.fn_cdc_get_all_changes에 제공된 인수 개수가 부족합니다")을 반환합니다.
데이터 형식이 image, text 또는 ntext인 열에는 __$operation이 1이거나 __$operation이 3일 때 항상 NULL 값이 할당됩니다. 데이터 형식이 varbinary(max), varchar(max) 또는 nvarchar(max)인 열에는 업데이트하는 동안 해당 열이 변경되지 않은 경우 __$operation이 3일 때 NULL 값이 할당됩니다. __$operation이 1인 경우에는 삭제할 때 이러한 열에 해당 값이 할당됩니다. 캡처 인스턴스에 포함된 계산 열은 항상 NULL 값을 갖습니다.
예
변경 데이터 캡처 쿼리 함수를 사용하는 방법을 보여 주기 위해 사용할 수 있는 SQL Server Management Studio 템플릿은 여러 개가 있습니다. 이러한 템플릿은 Management Studio의 보기 메뉴에 있습니다. 자세한 내용은 템플릿 탐색기을 참조하십시오.
이 예에서는 Enumerate All Changes for Valid Range Template을 보여 줍니다. 이 템플릿은 AdventureWorks2012 데이터베이스의 HumanResources.Department 원본 테이블에 대해 정의된 cdc.fn_cdc_get_all_changes_HR_Department 함수를 사용하여 HR_Department 캡처 인스턴스에서 현재 사용할 수 있는 모든 변경 내용을 보고합니다.
-- ==================================================
-- Enumerate All Changes for Valid Range Template
-- ==================================================
USE AdventureWorks2012;
GO
DECLARE @from_lsn binary(10), @to_lsn binary(10)
SET @from_lsn =
sys.fn_cdc_get_min_lsn('HR_Department')
SET @to_lsn = sys.fn_cdc_get_max_lsn()
SELECT * FROM cdc.fn_cdc_get_all_changes_HR_Department
(@from_lsn, @to_lsn, N'all');
GO
참고 항목
참조
cdc.fn_cdc_get_net_changes_<capture_instance>(Transact-SQL)
sys.fn_cdc_map_time_to_lsn(Transact-SQL)
sys.sp_cdc_get_ddl_history(Transact-SQL)
sys.sp_cdc_get_captured_columns(Transact-SQL)
sys.sp_cdc_help_change_data_capture(Transact-SQL)