MS DTC를 사용하여 여러 서버에서 분산 트랜잭션을 관리하는 경우 연결이 손실되면 분산 트랜잭션이 알 수 없는 상태 또는 "미결" 상태로 남습니다. 중단의 일반적인 원인은 다음과 같습니다.
MS DTC를 사용하여 여러 서버에서 분산 트랜잭션을 관리하는 경우 연결이 손실되면 분산 트랜잭션이 알 수 없는 상태 또는 "미결" 상태로 남습니다. 중단의 일반적인 원인은 다음과 같습니다.
네트워크 오류
MSSQLSERVER 또는 MS DTC 중지
다른 관련 서비스 중지
분산 트랜잭션에 포함된 하나 이상의 컴퓨터에서 위와 같은 상황이 발생하는 경우입니다. 연결이 중단된 후에 MS DTC는 해당 단계에서 진행 중인 모든 트랜잭션을 일관성 없는 상태로 둡니다. "확실하지 않은" 트랜잭션은 SQL Server가 트랜잭션을 커밋하거나 롤백할지 여부를 확인할 수 없고 SQL Server가 MS DTC에서 계속하는 방법을 알려 주도록 요구하기 때문에 이러한 증상을 일으킵니다.
일관성 없는 분산 트랜잭션을 확인하는 데 사용할 수 있는 여러 가지 방법이 있습니다.:
SQL Server 온라인 설명서의 "MS DTC 트랜잭션 문제 해결"에 설명된 방법을 사용할 수 있습니다.
분산 트랜잭션에 포함된 하나 이상의 서버에서 MS DTC를 중지하는 경우 MS DTC를 다시 시작하면 문제가 해결될 수 있습니다.
자주 MS DTC 관리 콘솔을 사용할 수 있습니다.
MS DTC 관리 콘솔을 사용하려면 다음과 같이 하십시오.
. 실행 대화 상자에서 "mmc.exe"(인용 부호 제외)를 입력하여 MMC(Microsoft Management Console)를 엽니다.
. MMC의 콘솔 메뉴에서 스냅인 추가/제거를 클릭합니다.
. 스냅인 추가/제거 대화 상자에서 추가를 클릭합니다.
. 독립 실행형 스냅인 추가 대화 상자에서 구성 요소 서비스를 클릭한 다음 추가를 클릭하여 스냅인을 추가합니다.
. 닫기를 클릭
. 스냅인 추가/제거 대화 상자에서 확인을 클릭합니다.
. 구성 요소 서비스의 콘솔 루트에서 구성 요소 서비스를 확장하고, 컴퓨터, 내 컴퓨터를 차례로 가리킨 다음 Distributed Transaction Coordinator를 클릭합니다.
. 트랜잭션 목록을 선택합니다. 세부 정보 창에 트랜잭션이 나타납니다. 트랜잭션을 마우스 오른쪽 단추로 클릭한 다음 해결을 클릭합니다. 이제 커밋, 중단 또는 무시의 세 가지 옵션이 있습니다. 상황에 적합한 옵션을 선택하십시오.
이름 | 설명 | 기본값 |
사용 | 워크플로 사용하거나 사용하지 않도록 설정합니다. | 예 |
간격(초) | 워크플로를 실행하는 반복 시간 간격(초)입니다. | 300 |
우선 순위 | 알림 우선 순위를 정의합니다. | 1 |
심각도 | 알림 심각도를 정의합니다. | 1 |
동기화 시간 | 동기화 시간 |
|
시간 제한(초) | 닫히고 실패한 것으로 표시되기 전에 워크플로를 실행할 수 있는 시간을 지정합니다. | 200 |
데이터베이스 연결 시간 제한(초) | 워크플로는 지정된 기간 동안 데이터베이스에 액세스할 수 없으면 실패하며 이벤트를 등록합니다. | 15 |
Target | Microsoft.SQLServer.Windows.DBEngine | ||
Category | EventCollection | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Warning | ||
Alert Priority | Normal | ||
Remotable | True | ||
Alert Message |
| ||
Comment | Mom2017ID='{6B1C776D-E075-4F73-B9C0-66CEF9024905}';MOM2017GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74} |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
_F6DA1507_12AF_11D3_AB21_00A0C98620CE_ | DataSource | Microsoft.SQLServer.Windows.DataSource.EventCollectionFiltered | Default |
GenerateAlert | WriteAction | System.Health.GenerateAlert | Default |
<Rule ID="Microsoft.SQLServer.Windows.EventRule.DBEngine.Error_recovering_database_._Could_not_connect_to_MSDTC_to_check_the_completion_status_of_transaction_1_5_Rule" Target="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2017ID='{6B1C776D-E075-4F73-B9C0-66CEF9024905}';MOM2017GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="_F6DA1507_12AF_11D3_AB21_00A0C98620CE_" Comment="{F6DA1507-12AF-11D3-AB21-00A0C98620CE}" TypeID="Microsoft.SQLServer.Windows.DataSource.EventCollectionFiltered">
<MachineName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<NetbiosComputerName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<InstanceVersion>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Version$</InstanceVersion>
<InstanceEdition>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Edition$</InstanceEdition>
<MonitoringType>$Target/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<SqlExecTimeoutSeconds>60</SqlExecTimeoutSeconds>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<TimeoutSeconds>200</TimeoutSeconds>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<EventDisplayNumber>3437</EventDisplayNumber>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="Health!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.Windows.EventRule.DBEngine.Error_recovering_database_._Could_not_connect_to_MSDTC_to_check_the_completion_status_of_transaction_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter2>
<AlertParameter3>Event ID: $Data/Property[@Name='EventID']$. $Data/Property[@Name='Message']$</AlertParameter3>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>