적용 대상
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Standard on Windows

증상

Microsoft SQL Server WITH DTC_SUPPORT = PER_DB 절을 사용하여 가용성 그룹을 만든다고 가정합니다. 트랜잭션 또는 시스템 저장 프로시저(예: sp_executesql)에서 SAVE TRANSACTION 문을 실행하려고 하면 다음 오류 메시지 중 하나가 표시됩니다.

Msg 627, Level 16, State 0, Line LineNumber 분산 트랜잭션 내에서 SAVE TRANSACTION을 사용할 수 없습니다.Msg 12324, Level 16, State 100, LineNumber DTC(분산 트랜잭션)는 메모리 최적화 테이블에서 지원되지 않습니다.오류: 3933, 심각도: 16, 상태: 1.이 트랜잭션에 활성 저장 지점이 있으므로 트랜잭션을 분산 트랜잭션으로 승격할 수 없습니다.

원인

트랜잭션에 여러 데이터베이스가 포함된 한 Always On 가용성 그룹의 데이터베이스가 WITH DTC_SUPPORT = PER_DB 사용하도록 설정된 경우 트랜잭션은 SQL Server 2016 SP2 및 SQL Server 2017에서 MSDTC 트랜잭션으로 승격됩니다. MSDTC 트랜잭션에는 제한 사항이 있습니다. 예를 들어 저장 지점을 사용할 수 없고 메모리 최적화 테이블을 사용할 수 없습니다.

경우에 따라 데이터베이스 간 트랜잭션은 사용자가 두 개의 사용자 데이터베이스를 포함하는 트랜잭션이 있기 때문이 아니라 트랜잭션에 현재 데이터베이스 및 시스템 데이터베이스(master, tempdb, 모델, 시스템 리소스 데이터베이스)가 포함되므로 발생합니다. 시스템 리소스 데이터베이스는 실제로 읽기 전용이므로 데이터베이스 간 트랜잭션에 시스템 리소스 데이터베이스가 포함되지만 다른 시스템 데이터베이스는 포함되지 않은 경우 MSDTC 트랜잭션으로 승격할 필요가 없습니다. 

해결 방법

이 KB에 도입된 수정 사항은 시스템 리소스 데이터베이스와 PER_DB DTC에 사용하도록 설정된 가용성 그룹의 일부인 사용자 데이터베이스가 동일한 SQL Server 인스턴스 내의 데이터베이스 간 트랜잭션에 관련된 경우 MSDTC 트랜잭션으로의 승격을 건너뜁니다.

따라서 위에 나열된 오류의 원래 원인이 시스템 리소스 데이터베이스와 관련된 데이터베이스 간 트랜잭션인 경우 이 수정 사항이 해결됩니다. 경우에 따라 사용자는 동일한 근본 원인으로 위에 나열된 오류를 볼 수 있습니다. 다음은 이 수정 사항이 적용되는 조건을 나열합니다.

  • 데이터베이스는 WITH DTC_SUPPORT = PER_DB 사용하도록 설정된 Always On 가용성 그룹의 일부입니다.

  • 데이터베이스 간 트랜잭션에는 이 데이터베이스와 동일한 SQL Server 인스턴스의 시스템 리소스 데이터베이스가 포함됩니다.

  • 데이터베이스 간 트랜잭션 내에서 SAVE TRANSACTION이 사용되거나 메모리 최적화 테이블이 관련됩니다.

이러한 트랜잭션은 이 수정 없이 위에 나열된 오류로 실패합니다. 이 수정을 사용하면 이러한 트랜잭션이 진행되어야 합니다.

참고: 이 수정은 시스템 리소스 데이터베이스를 포함하는 데이터베이스 간 트랜잭션을 해결하지만 사용자 데이터베이스를 포함하고 SAVE TRANSACTION 문을 포함하는 모든 데이터베이스 간 트랜잭션은 여전히 실패하며 다시 작성해야 합니다.

이 문제는 SQL Server 대한 다음 누적 업데이트에서 해결되었습니다.

SQL Server 대한 각각의 새로운 누적 업데이트에는 모든 핫픽스 및 이전 누적 업데이트에 포함된 모든 보안 수정 사항이 포함됩니다. SQL Server 대한 최신 누적 업데이트를 확인하세요.

추가 정보

DTC_SUPPORT = PER_DB, 메모리 최적화 테이블, SAVE TRANSACTION에 대한 추가 정보는 다음 링크에서 찾을 수 있습니다.

동일한 SQL Server 인스턴스 내의 데이터베이스 트랜잭션은 이 파트를 https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-2017#sql-server-2016-sp1-and-before-support-for-cross-database-transactions-within-the-same-sql-server-instance메모리 최적화 테이블에 연결합니다. 트랜잭션 저장 https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitations 이 부분을 https://learn.microsoft.com/en-us/sql/t-sql/language-elements/save-transaction-transact-sql?view=sql-server-2017#remarks 연결

https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-replication-for-always-on-availability-groups-sql-server?view=sql-server-2017#step2

상태

Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.

참고 자료

Microsoft에서 소프트웨어 업데이트를 설명하는 데 사용하는 용어 에 대해 알아봅니다.

도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.