MSDTC-Problembehandlungen
Allgemeine Erklärung
Der Distributed Transaction Coordinator (DTC oder MSDTC) ist ein Systemdienst von Microsoft, der bei Windows-NT-basierten Systemen standardmäßig enthalten ist und automatisch mitgestartet wird. Er dient zur Koordination atomarer Operationen, welche auf mehrere Ressourcen angewendet werden. In Windows selbst ist der DTC ein normaler Windows-Systemdienst, der im Hintergrund ausgeführt wird und in der Systemsteuerung unter 'Verwaltung - Dienste' gesteuert werden kann.
Verwendung in easyWinArt
In easyWinArt wird der DTC verwendet, um sicherzustellen, dass zusammengehörige Änderungen an mehreren Tabellen oder von mehreren Datensätzen in einer Tabelle auf jeden Fall komplett oder gar nicht durchgeführt werden, so dass keine nach easyWinArt-Logik inkonsistenten Zustände entstehen können. Weiterhin wird das gesamte Software-Update von easyWinArt in einer Transaktion durchgeführt, um zu gewährleisten, dass dieses konsistent abläuft.
Die eigentliche Verwendung der Transaktionen wird im Quellcode von easyWinArt angestoßen. An den entsprechenden Programmpunkten, an denen z.B. die Datenbankänderungen gestartet werden, sind gezielt Befehle bzgl. der Transaktionen enthalten. Die Klassenbibliotheken der von uns eingesetzten .NET-Software-Plattform bieten entsprechende Funktionen an.
Bei einer Einzelplatzinstallation oder bei der Verwendung von easyWinArt auf dem Server, auf dem sich auch die Datenbank und das Applikations-Verzeichnis befinden, ist nur der eine DTC-Dienst dieses Computers involviert, die Transaktionen laufen innerhalb eines Windows-Betriebssystems ab, vorausgesetzt, der DTC-Dienst wird ausgeführt. Diese Konstellation ist unproblematisch und es sind diesbezüglich noch keine Probleme aufgetreten.
Wird easyWinArt im Netzwerk (Client-Server-Struktur) verwendet, so sind an einer Transaktion zwei DTC-Dienste beteiligt, auf der einen Seite der DTC des Computers, auf dem easyWinArt ausgeführt (auch Client genannt) wird und auf der anderen Seite der DTC des Computers, auf dem der SQL Server mit der Datenbank läuft (auch Server genannt). Die beiden DTC-Dienste müssen über das Netzwerk miteinander kommunizieren können. Hierbei können Schwierigkeiten auftreten und ggf. besondere Einstellungen oder Konfigurationen notwendig sein.
Im Startvorgang von easyWinArt wird nach dem Bestätigen des Anmeldefensters die korrekte Funktion der Transaktionen überprüft. Sollte keine Transaktion durchgeführt werden können, so erscheint eine entsprechende Fehlermeldung und easyWinArt wird beendet.
Voraussetzungen eines Client-Server-DTC-Betriebs
Ausführung DTC und RPC: Auf beiden Computern muss jeweils der DTC-Systemdienst ausgeführt werden (Bei 'Startmodus: Automatisch' wird dieser mit Windows gestartet, dies ist auch die Standardeinstellung einer Windows-Installation). Weiterhin muss die RPC-Technik auf beiden Computern laufen und funktionieren, dies ist in der Regel standardmäßig von Microsoft aus gegeben.
DTC-Einstellungen: Auf beiden Computern müssen die Sicherheitseinstellungen konfiguriert sein, wie hier beschrieben. In der Regel wird dies soweit möglich durch den easyWinArt-Installationsassistenten erledigt, sollte aber bei Problemen nochmals überprüft werden.
Firewall bzgl. DTC: Die Kommunikation zwischen den DTC-Diensten wird standardmäßig durch die beiden Windows-Firewalls der beiden beteiligten Computer blockiert. Diese müssen beide konfiguriert werden, wie hier beschrieben. Wird auf einer der beiden Seiten eine andere Software-Firewall als die von Windows eingesetzt, so beachten Sie bitte die Hinweise weiter unten.
NetBios/DNS - Namensauflösung: Die beiden beteiligten Computer müssen sich gegenseitig über ihre Computernamen erreichen können. Dies lässt sich durch jeweils einen Ping von beiden Seiten aus unter Verwendung des jeweiligen Computernamens leicht testen.
Firewall bzgl. RPC: Die RPC-Kommunikation zwischen den beiden Computern darf nicht blockiert werden. Bisher hat es diesbezüglich bei Verwendung der Windows-Firewall keine Probleme gegeben. Wird auf mindestens einem der beteiligten Computer eine andere Software-Firewall als die von Windows eingesetzt, so können gesonderte Einstellungen notwendig sein, siehe weiter unten.
Security Identifier (SID): Durch diesen Sicherheits-Identifikator identifiziert Microsoft Windows automatisch jedes System, jeden Benutzer und jede Gruppe. Wird ein Windows auf einen anderen PC geclont, kann es unter Umständen vorkommen, dass beide PCs dieselbe SID eingestellt haben. Dies ist für Transaktionen nicht zulässig. Mit dem Programm PsGetSid kann die SID ausgelesen werden. Bei gleichen SIDs ist dafür zu sorgen, dass diese überall unterschiedlich sind.
Allgemeine Problembehebung
Sollte es Probleme mit den Transkationen und dem DTC geben, so prüfen Sie bitte an allen beteiligten Computern die oben genannten Einstellungen bezüglich Sicherheitseinstellungen und Firewall-Freigaben. Nach Möglichkeit probieren Sie bitte mehrere Clients aus. Sobald ein Client funktioniert, ist zumindest sichergestellt, dass am Server alles korrekt eingestellt ist und es müssen nur noch die restlichen Clients beachtet werden.
NetBios/DNS - Namensauflösung: Test und Problembehebung
Server und Client müssen sich über Ihre Computernamen erreichen können. Dabei wird auf DNS oder NetBios zurückgegriffen, um den Computernamen aufzulösen und die dazugehörige IP-Adresse zu erfahren. Um dies zu testen, starten Sie auf dem Server-Computer die Eingabeaufforderung und geben Sie den Befehl 'ping MeinClient-PC' ein. Hierbei muss als Ergebnis die IP-Adresse des Clients sowie eine erfolgreiche Rückmeldung angezeigt werden. Wiederholen Sie dies am Client-Computer mit dem Computernamen des Servers. Sollte einer der Tests fehlschlagen, so beheben Sie das Netzwerkproblem oder wenden Sie sich an den zuständigen Administrator. Bei festen IP-Adressen kann man das Problem zumindest kurzfristig beheben, in dem man an dem Computer, der den anderen nicht erreichen kann, eine entsprechende Zuordnung in der hosts-Datei ergänzt.
Firewall-Hinweise bzgl. DTC und RPC
Bei manchen Firewalls, z.B. von Norton, reicht es nicht aus, den DTC-Dienst auf Dateiebene freizuschalten, wie oben bereits beschrieben. Es müssen zusätzlich Ports freigegeben werden. Generell müssen folgende Ports für die bidirektionale Kommunikation geöffnet sein:
- port 135 (RPC Endpoint Mapper port for handshake)
- port 3372 (MSDTC port)
- mindestens ein dynamischer port (standardmäßig zwischen 1024 und 65535)
Eventuell hilft es, die Kommunikation im internen Netzwerk (LAN) komplett freizugeben, damit ein dynamischer Port zustande kommen kann.
Hilfreiche Seiten im Internet
Folgende Seiten bieten hilfreiche Hinweise sowie das Tool DTCPing.exe von Microsoft, mit dem DTC-Tests möglich sind.
http://simpleverse.wordpress.com/2012/08/23/how-to-configure-ms-dtc-through-a-firewall/
http://msdn.microsoft.com/en-us/library/aa561924.aspx
http://www.sqlwebpedia.com/content/msdtc-troubleshooting
http://technet.microsoft.com/de-de/library/cc753510%28v=ws.10%29.aspx
http://support.microsoft.com/kb/154596/en-us
http://support.microsoft.com/kb/306843
http://technet.microsoft.com/de-de/library/cc753866%28v=ws.10%29.aspx
http://technet.microsoft.com/de-de/library/cc725983%28v=ws.10%29.aspx
http://fairwaytech.com/2012/12/distributed-transaction-coordinators-port-135-and-firewalls-oh-my/
http://stackoverflow.com/questions/673806/msdtc-how-many-ports-are-needed
http://technet.microsoft.com/en-us/library/cc738291%28v=ws.10%29.aspx