Global outage event
If you’re experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
AWS DMS 작업에 CDC가 설정되어 있을 때 SQL Server용 RDS 소스에서 T-Log 전체 문제를 해결하려면 어떻게 해야 하나요?
변경 데이터 캡처(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_safeguard 및 pollingInterval 옵션이 있습니다.
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 전체 문제를 해결하고 문제를 해결하세요.
- 트랜잭션 로그 파일의 크기를 확인합니다.
DBCC SQLPERF(logspace)
- 트랜잭션 로그가 가득 차면 다음 명령을 실행하여 로그의 내용을 확인합니다.
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. 작업을 중지합니다.
- 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>'
- CDC가 꺼져 있는지 확인합니다.
select is_cdc_enabled, * from sys.databases where name = 'dbname' Value 1- enabled and 0 -Disabled
- 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)
- CDC를 다시 켠 다음 작업을 다시 시작합니다. 작업을 다시 시작하면 트랜잭션이 누락될 수 있습니다. Amazon RDS for SQL Server는 보관된 T-로그에 대한 액세스를 지원하지 않습니다.
관련 정보
- 언어
- 한국어

관련 콘텐츠
- 질문됨 일 년 전