it-swarm.com.de

MSDTC auf dem Server des Servers ist nicht verfügbar

Ich bekomme diesen seltsamen Fehler in SQL Server. Und in älteren Beiträgen finde ich keine Lösung. 

Ich habe dieses Verfahren:

create proc _upJM_SyncAll_test
as
begin
    DECLARE @SQLString nvarchar(max)

set @SQLString = N'
DELETE FROM OPENQUERY([LOCAL_MYSQL],''SELECT acSubject FROM _utjm_setitemprices'') where acSubject not in (select acSubject from _uvJM_SetSubj)
DELETE FROM OPENQUERY([LOCAL_MYSQL],''SELECT acSubject FROM _utjm_setsubj'') where acSubject not in (select acSubject from _uvJM_SetSubj)

update a
set acName2 = b.acName2,
    acName3 = b.acName3,
    acAddress = b.acAddress,
    acPost = b.acPost,
    acPostName = b.acPostName, 
    acCountry = b.acCountry, 
    acVATCodePrefix = b.acVATCodePrefix,
    acCode = b.acCode, 
    anDaysForPayment = b.anDaysForPayment
from OPENQUERY([LOCAL_MYSQL],''SELECT * FROM _utjm_setsubj'') a join _uvJM_SetSubj b on (a.acSubject = b.acSubject)
where 1=1
and (   isnull(a.acName2,'''') <> isnull(b.acName2,'''') OR 
        isnull(a.acName3,'''') <> isnull(b.acName3,'''') OR 
        isnull(a.acAddress,'''') <> isnull(b.acAddress,'''') OR 
        isnull(a.acPost,'''') <> isnull(b.acPost,'''') OR 
        isnull(a.acPostName,'''') <> isnull(b.acPostName,'''') OR 
        isnull(a.acCountry,'''') <> isnull(b.acCountry,'''') OR 
        isnull(a.acVATCodePrefix,'''') <> isnull(b.acVATCodePrefix,'''') OR 
        isnull(a.acCode,'''') <> isnull(b.acCode,'''') OR 
        isnull(a.anDaysForPayment,'''') <> isnull(b.anDaysForPayment,'''')
)

insert into OPENQUERY([LOCAL_MYSQL],''SELECT * FROM _utjm_setsubj'') (acSubject, acName2, acName3, acAddress, acPost, acPostName, acCountry, acVATCodePrefix, acCode, anDaysForPayment)
select b.acSubject, b.acName2, b.acName3, b.acAddress, b.acPost, b.acPostName, b.acCountry, b.acVATCodePrefix, b.acCode, b.anDaysForPayment
from OPENQUERY([LOCAL_MYSQL],''SELECT * FROM _utjm_setsubj'') a right join _uvJM_SetSubj b on (a.acSubject = b.acSubject)
where a.acSubject is null '

EXECUTE sp_executesql @SQLString;
end

Wenn ich eine Prozedur im Management-Studio so ablaufe:

  exec dbo._upJM_SyncAll_test

alles ist ok. Ich bekomme keine Fehlermeldung, die Synchronisierung funktioniert einwandfrei. 

Aber wenn ich Ausführen so auslösen:

create trigger _utrJM_SetSubj on tHE_SetSubj after insert, update, delete
as
begin
    exec dbo._upJM_SyncAll_test
end

Ich erhalte diesen Fehler:

Msg 8501, Ebene 16, Status 3, Prozedur _upJM_SyncAll_test, Zeile 54
MSDTC auf Server 'Server' ist nicht verfügbar.

Die Prozedur _upJM_SyncAll_test hat nur 39 Zeilen ... 

39
Kiki

In meinem Fall wurde der Dienst gestoppt. Lösung: Der MSDTC-Dienst muss aktiviert werden

  1. gehe zu Services. (START> EINSTELLUNGEN> KONTROLLFELD> ADMINISTRATIVE TOOLS> SERVICES)
  2. Suchen Sie den Dienst 'Distributed Transaction Coordinator' und Klicken Sie mit der rechten Maustaste (darauf) und wählen Sie> Start.
  3. führen Sie diesen Dienst aus, um Automatisch auszuführen, um dieses Problem dauerhaft zu lösen
114
Everson Rafael

Auslöser sind in der impliziten Transaktion enthalten, die zum Einfügen, Aktualisieren und Löschen von Anweisungen erforderlich ist. Da Sie innerhalb einer Transaktion eine Verbindung zu einem Verbindungsserver herstellen, wird dieser von SQL Server für eine verteilte Transaktion heraufgestuft.

Sie müssen MSDTC konfigurieren. Sie können entweder MMC öffnen und das MSDTC-Plugin laden oder das folgende Skript zum Öffnen von eingehenden und ausgehenden Transaktionen verwenden.

https://technet.Microsoft.com/de-de/library/cc731495.aspx

REG QUERY "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccess
REG QUERY "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccessTransactions
REG QUERY "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccessInbound
REG QUERY "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccessOutbound
PAUSE

REG ADD "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccess /t REG_DWORD /d 1
REG ADD "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccessTransactions /t REG_DWORD /d 1
REG ADD "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccessInbound /t REG_DWORD /d 1
REG ADD "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccessOutbound /t REG_DWORD /d 1
PAUSE

net stop MSDTC
net start MSDTC
PAUSE
22
jtimperley

Ich bin auf den gleichen Fehler gestoßen, es war jedoch nicht so einfach wie der Distributed Transaction Coordinator-Dienst, der nicht ausgeführt wird. Ich habe automatisch ein Treiberupdate über Windows erhalten, das Probleme mit COM + verursachte und MSDTC nicht ordnungsgemäß kommunizieren ließ, obwohl der MSDTC-Dienst ausgeführt wurde. In meinem Fall war dies ein Problem mit HP Hotkey-Treibern. Bei der Suche fand ich jedoch andere Berichte über Probleme mit Audiotreibern anderer Hersteller, die dies ebenfalls verursacht haben. 

Um zu überprüfen, ob Sie ein ähnliches Problem haben, starten Sie Component Services (dcomcnfg.exe), erweitern Sie dann Component Services> Computers> Arbeitsplatz Sie können nicht mit Microsoft Distributed Transaction Coordinator sprechen "oder es wird ein roter Fehler über dem Symbol für Arbeitsplatz in der Navigation angezeigt. 

Für mich war es das Problem, die Dienste "HP Hotkey Service" und "HotKeyServiceUWP" zu deaktivieren. Sobald diese Dienste deaktiviert waren, funktionierte MSDTC sofort. 

6
Mac

Der Dienst 'Distributed Transaction Coordinator' wurde nicht ausgeführt. Daher wurde der Service gestartet und der Service-Typ wurde auf automatisch geändert.

0