Amazon RDS for SQL Server에 변경 데이터 캡처 사용 - Amazon Relational Database Service

Amazon RDS for SQL Server에 변경 데이터 캡처 사용

Amazon RDS는 Microsoft SQL Server를 실행하는 DB 인스턴스에 대해 CDC(변경 데이터 캡처)를 지원합니다. 테이블의 데이터에 대한 CDC 캡처 변경입니다. 각 변경 사항에 대한 메타데이터를 저장하고, 이후에 액세스할 수 있습니다. CDC 작동 방식에 대한 자세한 내용은 Microsoft 설명서의 변경 데이터 캡처를 참조하세요.

Amazon RDS DB 인스턴스에 CDC를 사용하기 전에 msdb.dbo.rds_cdc_enable_db를 실행하여 데이터베이스에서 이를 활성화합니다. Amazon RDS DB 인스턴스에서 CDC를 활성화하려면 마스터 사용자 권한이 있어야 합니다. CDC가 활성화된 이후 데이터베이스의 db_owner인 모든 사용자는 데이터베이스의 테이블에서 CDC를 활성화 또는 비활성화할 수 있습니다.

중요

복원 도중 CDC가 비활성화됩니다. 모든 관련 메타데이터가 데이터베이스에서 자동으로 제거됩니다. 이는 스냅샷 복원, 특정 시점으로 복원 및 S3로부터의 SQL Server 기본 복원에 적용됩니다. 이러한 유형의 복원 중 하나를 수행한 이후 CDC를 다시 활성화하고 추적할 테이블을 다시 지정할 수 있습니다.

DB 인스턴스에 대해 CDC를 활성화하려면 msdb.dbo.rds_cdc_enable_db 저장 프로시저를 실행합니다.

exec msdb.dbo.rds_cdc_enable_db 'database_name'

DB 인스턴스에 대해 CDC를 비활성화하려면 msdb.dbo.rds_cdc_disable_db 저장 프로시저를 실행합니다.

exec msdb.dbo.rds_cdc_disable_db 'database_name'

변경 데이터 캡처로 테이블 추적

데이터베이스에서 CDC가 활성화된 이후 특정 테이블 추적을 시작할 수 있습니다. sys.sp_cdc_enable_table을 실행하여 추적할 테이블을 선택할 수 있습니다.

--Begin tracking a table exec sys.sp_cdc_enable_table @source_schema = N'source_schema' , @source_name = N'source_name' , @role_name = N'role_name' --The following parameters are optional: --, @capture_instance = 'capture_instance' --, @supports_net_changes = supports_net_changes --, @index_name = 'index_name' --, @captured_column_list = 'captured_column_list' --, @filegroup_name = 'filegroup_name' --, @allow_partition_switch = 'allow_partition_switch' ;

테이블에 대한 CDC 구성을 보려면 sys.sp_cdc_help_change_data_capture를 실행합니다.

--View CDC configuration exec sys.sp_cdc_help_change_data_capture --The following parameters are optional and must be used together. -- 'schema_name', 'table_name' ;

SQL Server 설명서의 CDC 테이블, 함수 및 저장된 절차에 대한 자세한 내용은 다음을 참조하세요.

변경 데이터 캡처 작업

CDC를 활성화할 때 SQL Server가 CDC 작업을 생성합니다. 데이터베이스 소유자(db_owner)는 CDC 작업의 보기, 생성, 수정 및 삭제가 가능합니다. 하지만 RDS 시스템 계정은 이들을 소유합니다. 따라서 기본 보기, 절차 또는 SQL Server Management Studio에서 작업이 보이지 않습니다.

데이터베이스의 CDC 동작을 제어하려면 sp_cdc_enable_tablesp_cdc_start_job과 같은 기본 SQL Server 절차를 사용합니다. maxtransmaxscans와 같은 CDC 작업 파라미터를 변경하려면 sp_cdc_change_job을 사용할 수 있습니다.

CDC 작업에 관한 추가 정보를 얻으려면 다음 동적 관리 보기를 쿼리할 수 있습니다.

  • sys.dm_cdc_errors

  • sys.dm_cdc_log_scan_sessions

  • sysjobs

  • sysjobhistory

다중 AZ 인스턴스에 대한 변경 데이터 캡처

다중 AZ 인스턴스에서 CDC를 사용하는 경우 미러의 CDC 작업 구성이 보안 주체에 있는 것과 일치해야 합니다. CDC 작업은 database_id로 매핑됩니다. 보조의 데이터베이스 ID가 보안 주체의 ID와 다른 경우 작업이 올바른 데이터베이스와 연결되지 않습니다. 장애 조치 이후 오류를 방지하기 위해 RDS는 작업을 취소하고 새 보안 주체에 작업을 다시 생성합니다. 다시 생성된 작업은 장애 조치 이전에 보안 주체가 기록한 파라미터를 사용합니다.

이 프로세스가 빠르게 실행되기는 하지만 CDC 작업은 RDS가 이를 수정하기 전에 실행될 수 있습니다. 기본 복제본과 보조 복제본 사이의 파라미터를 강제로 일관되게 하는 3가지 방법이 있습니다.

  • CDC를 활성화한 모든 데이터베이스에 대해 동일한 작업 파라미터를 사용합니다.

  • CDC 작업 구성을 변경하기 전에 다중 AZ 인스턴스를 단일 AZ로 변환합니다.

  • 보안 주체에서 파라미터를 변경할 때마다 수동으로 전송합니다.

장애 조치 이후 CDC 작업을 다시 생성하는 데 사용되는 CDC 파라미터를 보고 정의하려면 rds_show_configurationrds_set_configuration을 사용합니다.

다음은 cdc_capture_maxtrans의 값을 반환하는 예입니다. RDS_DEFAULT로 설정된 모든 파라미터의 경우 RDS가 자동으로 값을 구성합니다.

-- Show configuration for each parameter on either primary and secondary replicas. exec rdsadmin.dbo.rds_show_configuration 'cdc_capture_maxtrans';

보조에서 구성을 설정하려면 rdsadmin.dbo.rds_set_configuration을 실행합니다. 이 절차는 부 서버의 모든 데이터베이스에 대한 파라미터 값을 설정합니다. 이러한 설정은 장애 조치 이후에만 사용됩니다. 다음 예제는 모든 CDC 캡처 작업에 대한 maxtrans1000으로 설정합니다.

--To set values on secondary. These are used after failover. exec rdsadmin.dbo.rds_set_configuration 'cdc_capture_maxtrans', 1000;

보안 주체에서 CDC 작업 파라미터를 설정하려면 sys.sp_cdc_change_job을 대신 사용합니다.