programing

SQL Server에서 MSDTC를 활성화하려면 어떻게 해야 합니까?

batch 2023. 5. 6. 14:11
반응형

SQL Server에서 MSDTC를 활성화하려면 어떻게 해야 합니까?

이것이 유효한 질문입니까?저는 있습니다.MSTDC를 사용하고 있으며 예외를 발생시키는 NET Windows 앱:

시스템. 트랜잭션.트랜잭션 관리자 커뮤니케이션예외:MSDTC(분산 트랜잭션 관리자)에 대한 네트워크 액세스가 비활성화되었습니다.구성 요소 서비스 관리 도구 ---> 시스템을 사용하여 MSDTC에 대한 보안 구성에서 네트워크 액세스 DTC를 활성화하십시오.런타임.Interop Services.COME 예외(0x8004D024):트랜잭션 관리자가 원격/네트워크 트랜잭션에 대한 지원을 사용하지 않도록 설정했습니다(HRESULT: 0x8004D024에서 예외).트랜잭션.Oletx.IDTC Proxy Shim Factory.트랜잭션 수신(Unt32 전파토큰 크기, 바이트[] 전파토큰, IntPtr 관리식별자, GUID 및 트랜잭션식별자, Oletx 트랜잭션격리레벨 & 격리레벨, IT 트랜잭션심&거래심)...

Kbalertz 가이드에 따라 앱이 설치된 PC에서 MSDTC를 활성화했지만 여전히 오류가 발생합니다.

이게 데이터베이스 문제인지 궁금합니다.그렇다면 어떻게 해결해야 합니까?

윈도우즈 Server 2008 r2 및 윈도우즈 Server 2012 R2에 사용

  1. 시작, 실행을 차례로 클릭하고 dcomcnfg를 입력한 다음 확인을 클릭하여 구성 요소 서비스를 엽니다.

  2. 콘솔 트리에서 구성 요소 서비스를 클릭하여 확장하고, 컴퓨터를 클릭하여 확장하고, 컴퓨터를 클릭하여 확장하고, 분산 트랜잭션 코디네이터를 클릭하여 확장한 다음 로컬 DTC를 클릭합니다.

  3. 로컬 DTC를 마우스 오른쪽 버튼으로 클릭하고 속성을 클릭하여 로컬 DTC 속성 대화 상자를 표시합니다.

  4. 보안 탭을 클릭합니다.

  5. "네트워크 DTC 액세스" 확인란을 선택합니다.

  6. 마지막으로 "인바운드 허용" 및 "아웃바운드 허용" 확인란을 선택합니다.

  7. 적용, 확인클릭합니다.

  8. 서비스를 다시 시작한다는 메시지가 나타납니다.

  9. 확인을 클릭하면 이상입니다.

참조: https://msdn.microsoft.com/en-us/library/dd327979.aspx

참고: 때때로 로컬 컴퓨터 또는 서버의 네트워크 방화벽이 연결을 방해할 수 있으므로 다음에 대해 "인바운드 허용" 및 "아웃바운드" 연결을 허용하는 규칙을 만드십시오.C:\Windows\System32\msdtc.exe

MSDTC가 필요합니까?이러한 에스컬레이션은 단일 트랜잭션 범위 내에서 여러 개의 연결을 생성함으로써 발생하는 경우가 많습니다.

필요한 경우 오류 메시지에 설명된 대로 활성화해야 합니다.XP의 경우:

  • 관리 도구 -> 구성 요소 서비스로 이동합니다.
  • 구성 요소 서비스 확장 -> 컴퓨터 ->
  • 마우스 오른쪽 버튼 클릭 -> 속성 -> MSDTC 탭
  • 보안 구성 버튼을 누릅니다.

디버그하는 가장 좋은 방법은 DTCPing이라는 Microsoft 도구를 사용하는 것입니다.

  1. 파일을 서버(DB)와 클라이언트(애플리케이션 서버/클라이언트 PC)에 모두 복사합니다.
    • 서버 및 클라이언트에서 시작
    • 서버에서: 클라이언트 netbios 컴퓨터 이름을 입력하고 DTC 연결을 설정합니다.
    • 두 응용 프로그램을 다시 시작합니다.
    • 클라이언트에서 서버 netbios 컴퓨터 이름을 입력하고 DTC 연결을 설정합니다.

이전 회사 네트워크에서 발생한 문제에 대해 논의한 적이 있습니다. 몇 가지 팁이 있습니다.

  • "Gethostbyname failed" 오류 메시지가 표시되면 컴퓨터가 netbios 이름으로 다른 컴퓨터를 찾을 수 없음을 의미합니다.예를 들어 서버가 클라이언트를 확인하고 ping할 수 있지만 DNS 수준에서 작동합니다.netbios 조회 수준이 아닙니다.WINS 서버를 사용하거나 LMHOST(더러움)를 변경하면 이 문제가 해결됩니다.
  • 액세스 거부 오류가 발생하면 보안 설정이 일치하지 않습니다.msdc의 보안 탭을 비교하여 서버와 클라이언트를 일치시켜야 합니다.RestrictRemoteClients 값도 확인할 수 있습니다.OS 버전과 서비스 팩에 따라 이 값이 다를 수 있습니다.
  • 기타 연결 문제:
    • 서버와 클라이언트 사이의 방화벽은 포트 135를 통한 통신을 허용해야 합니다.그리고 더 중요한 것은 두 사이트 모두에서 연결을 시작할 수 있다는 것입니다(회사의 방화벽 담당자들은 서버만 해당 포트에 대한 연결을 열 것이라고 가정했기 때문에 문제가 많았습니다).
    • 프로토콜은 실제 트랜잭션 통신을 위해 연결할 임의 포트를 반환합니다.방화벽 사용자들은 포트를 특정 범위로 제한하는 것을 좋아하지 않습니다.방화벽과 함께 작동하도록 RPC 동적 포트 할당을 구성하는 방법에 설명된 대로 키를 사용하여 RPC 동적 포트 생성을 특정 범위로 제한할 수 있습니다.

제 경험에 따르면, DTC Ping이 클라이언트에서 시작되고 서버에서 시작되는 DTC 연결을 설정할 수 있다면 귀하의 트랜잭션은 더 이상 문제가 되지 않습니다.

제어판의 services.msc에서 MSDTC를 켜는 방법도 여기에서 확인할 수 있습니다.

트리거가 있는 서버에서 MSDTC 서비스를 켜야 합니다.START > SETTINGS > CONTROL PANEL > 관리도구 > SERVICE를 클릭하시면 됩니다.'분산거래 코디네이터'라는 서비스를 찾아 오른쪽 클릭(그 위에서 선택) > 시작

MSDTC는 서버 및 클라이언트 시스템 모두에서 활성화되어야 합니다.
또한 시스템 간에 RPC를 차단하는 방화벽이 없는지 확인합니다.
DTCTest는 다른 문제를 해결하는 데 도움이 되는 좋은 작은 앱입니다.

@댄,

트랜잭션이 작동하려면 msdc를 활성화할 필요가 없습니까?

분산 트랜잭션만 - 둘 이상의 연결을 포함하는 트랜잭션입니다.트랜잭션 내에서 하나의 연결만 열 수 있는지 두 번 확인하십시오. 그러면 연결이 확대되지 않습니다. 성능도 훨씬 더 좋아질 것입니다.

MSDTC는 다음과 같은 MSDTC PowerShell 모듈로 구성할 수 있습니다.

# Import the module
Import-Module -Name MsDtc

# Set the DTC config
$dtcNetworkSetting = @{
    DtcName                           = 'Local'
    AuthenticationLevel               = 'NoAuth'
    InboundTransactionsEnabled        = $true
    OutboundTransactionsEnabled       = $true
    RemoteClientAccessEnabled         = $true
    RemoteAdministrationAccessEnabled = $true
    XATransactionsEnabled             = $false
    LUTransactionsEnabled             = $true
}
Set-DtcNetworkSetting @dtcNetworkSetting

# Restart the MsDtc service
Get-Service -Name MsDtc | Restart-Service

분산 트랜잭션을 지원할 각 컴퓨터(즉, MSDTC 서비스가 실행 중인 컴퓨터)에서 실행합니다.

언급URL : https://stackoverflow.com/questions/7694/how-do-i-enable-msdtc-on-sql-server

반응형