AWS DMS 작업에 CDC가 설정되어 있을 때 SQL Server용 RDS 소스에서 T-Log 전체 문제를 해결하려면 어떻게 해야 하나요?

4분 분량
0

변경 데이터 캡처(CDC)가 활성화된 AWS Database Migration Service(AWS DMS) 작업이 있습니다. 내 작업에서는 Amazon Relational Database Service(RDS)를 소스로 사용합니다. AWS DMS 작업에서 “SQL Server T-Log 전체” 문제가 나타납니다.

간략한 설명

SQL Server를 AWS DMS 작업의 소스로 사용하는 경우, 인스턴스에서 MS 변경 데이터 캡처(CDC)를 활성화하여 변경 사항을 복제하세요. Amazon RDS SQL Server, 온프레미스 SQL Server 및 AAmazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 SQL Server에서 MS-CDC를 사용할 수 있습니다.

CDC를 켜면 fn_dblog() 함수를 사용하여 활성 로그 파일에서 진행 중인 DML 변경 사항을 추적하고 읽습니다. CDC에서는 모든 소스 테이블에 해당 CDC 변경 테이블을 생성합니다.

CDC는 변경 사항을 추적하기 위해 두 개의 작업을 만듭니다.

  • 캡처 작업 - Scans T-로그를 스캔한 다음 sp_replcmds 저장 프로시저를 사용하여 해당 변경 테이블에 변경 내용을 캡처하고 기록합니다.

  • Cleanup job - 보존 정책에 따라 변경 내용 추적을 정리합니다.

다음 저장 절차를 실행하여 이 설정에 대해 설정된 값을 확인합니다.

EXEC sys.sp_cdc_help_jobs
  • Maxtrans - 각 스캔 주기에서 처리할 최대 트랜잭션 수입니다.
  • Maxscans - 로그에서 모든 행을 추출하기 위해 실행할 최대 스캔 주기 수입니다.
  • Pollinginterval - 로그 스캔 주기 사이의 시간(초)입니다.

Amazon RDS for SQL Server에서는 트랜잭션 로그 백업이 5분마다 실행되도록 설계되어 있습니다. 트랜잭션 로그 백업 중에 SQL Server에서 트랜잭션 로그의 비활성 부분을 잘라냅니다. 이 부분에는 AWS DMS가 읽지 않은 LSN(로그 시퀀스 번호)이 포함되어 있습니다. 그 결과, AWS DMS가 원하는 데이터 변경 사항을 복제하는 데 필요한 LSN을 찾지 못할 수 있습니다.

이 문제를 방지하기 위해 AWS DMS에는 awsdms_truncation_safeguardpollingInterval 옵션이 있습니다.

awsdms_truncation_safeguard: AWS DMS는 소스 데이터베이스에 awsdms_truncation_safeguard라는 테이블을 생성합니다. 이 테이블은 데이터베이스의 트랜잭션을 모방하여 트랜잭션 로그가 잘리는 것을 방지합니다.

그러나 AWS DMS가 로그 읽기를 10분 이상 지연하면 작업이 다시 실패합니다. 이 문제를 방지하려면 pollingInterval 매개 변수를 사용하세요. 자세한 내용은 With Microsoft SQL Server 데이터베이스를 AWS DMS의 소스로 사용을 참고하세요.

pollingInterval: 기본값은 캡처 작업에 대해 5초로 설정됩니다. 즉, pollingInterval가 5초마다 실행되고, T-로그를 스캔하여 변경 사항을 읽은 다음, 이러한 로그를 복제된 것으로 표시합니다. 그런 다음 로그를 잘라냅니다.

pollingInterval 값을 >=3599로 설정하는 것이 가장 좋습니다. 이렇게 하면 캡처 작업이 너무 자주 실행되는 것을 방지할 수 있습니다. 또한 T-로그가 지정된 시간 동안 잘리지 않도록 구성합니다.

트랜잭션이 많은 데이터베이스는 T-로그가 가득 찬 상태가 될 수 있습니다. 그러면 다음과 유사한 오류와 함께 작업이 실패합니다.

E: RetCode: SQL_ERROR SqlState: 42000 NativeError: 9002 Message: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]The transaction
log for database 'yourdatabase' is full due to 'REPLICATION'

해결 방법


참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

CDC가 켜진 상태에서 SQL Server T-Log 전체 문제 해결 및 해결

다음 단계를 완료하여 CDC가 켜진 상태에서 SQL Server T-Log 전체 문제를 해결하고 문제를 해결하세요.

  1. 트랜잭션 로그 파일의 크기를 확인합니다.
DBCC SQLPERF(logspace)
  1. 트랜잭션 로그가 가득 차면 다음 명령을 실행하여 로그의 내용을 확인합니다.
select name, log\_reuse\_wait\_desc from sys.databases where name = ' db\_name '
  • 복제: 복제가 작동을 중지했거나 활성 트랜잭션을 읽지 않습니다.
  • Active_transaction: 열려 있는 트랜잭션이 있습니다.

활성 트랜잭션이 있는 경우 열려 있는 트랜잭션 목록을 확인하세요.

select \* from sys.sysprocesses where open\_tran=1

참고: AWS DMS가 실행 중 상태인 경우, CDC에서 켜져 있는 데이터베이스의 T-Log를 축소할 수 없습니다. 대신 작업을 중지한 다음 로그 백업이 트랜잭션 로그를 잘라낼 때까지 기다리세요. 그런 다음 데이터베이스의 T-Log를 축소합니다.

T-로그 파일을 축소하고 작업을 다시 시작합니다.

로그를 정리한 후 T-로그 파일을 축소한 다음 작업을 다시 시작합니다.

1.    작업을 중지합니다.

  1. CDC의 상태를 확인한 다음 CDC를 끕니다.

CDC 상태 확인:

select b.name,a.run\_date,a.run\_status from msdb.dbo.sysjobhistory as a
join msdb.dbo.sysjobs as b on a.job\_id=b.job\_id
where b.name like '%cdc%capture%';

데이터베이스 수준에서 CDC를 끕니다.

exec msdb.dbo.rds_cdc_disable_db '<db_name>'

CDC의 일부인 테이블을 찾습니다.

USE db\_name
GO
SELECT s.name AS Schema\_Name, tb.name AS Table\_Name
, tb.object\_id, tb.type, tb.type\_desc, tb.is\_tracked\_by\_cdc
FROM sys.tables tb
INNER JOIN sys.schemas s on s.schema\_id = tb.schema\_id
WHERE tb.is\_tracked\_by\_cdc = 1

테이블 수준에서 CDC를 끕니다.

use <db_name>
EXEC sys.sp_cdc_disable_table
@source_schema = N'<schema>',
@source_name = N'<table>',
@capture_instance = N'<schema_table>'
  1. CDC가 꺼져 있는지 확인합니다.
select is_cdc_enabled, * from sys.databases where name = 'dbname' Value 1- enabled and 0 -Disabled
  1. CDS가 꺼져 있는지 확인한 후 10분 이상 기다린 다음 T-로그를 축소합니다.
use <dbname>
SELECT file_id, name
FROM sys.database_files;
GO
USE <dbname>
GO
DBCC SHRINKFILE (N'dbname_log' , 0, TRUNCATEONLY)
GO

5.로그 크기 확인:

DBCC SQLPERF(logspace)
  1. CDC를 다시 켠 다음 작업을 다시 시작합니다. 작업을 다시 시작하면 트랜잭션이 누락될 수 있습니다. Amazon RDS for SQL Server는 보관된 T-로그에 대한 액세스를 지원하지 않습니다.

관련 정보

SQL Server 원본에서 진행 중인 복제(CDC)를 사용하기 위한 필수 구성 요소

Amazon RDS for SQL Server를 AWS DMS의 소스로 사용할 때 권장되는 설정

AWS 공식
AWS 공식업데이트됨 일 년 전