Ich verstehe, auf eine unscharfe Weise, wie reguläre ACID-Transaktionen arbeiten. Sie führen einige Arbeiten an einer Datenbank so durch, dass die Arbeit erst bestätigt wird, wenn eine Art Commit-Flag gesetzt ist. Der Commit-Teil basiert auf einer zugrundeliegenden Annahme (wie ein einzelner Plattenblock-Schreibvorgang atomar ist). Im Falle eines katastrophalen Fehlers können Sie die nicht festgeschriebenen Daten in der Wiederherstellungsphase einfach löschen.Wie funktionieren verteilte Transaktionen (z. B. MSDTC)?
Wie funktionieren verteilte Transaktionen? In einigen der MS-Dokumentation habe ich gelesen, dass Sie unter anderem eine Transaktion über Datenbanken und Dateisysteme durchführen können.
Diese Technologie könnte (und ist wahrscheinlich) für Installationsprogramme verwendet werden, bei denen das Programm vollständig installiert oder vollständig fehlen soll. Sie starten einfach zu Beginn des Installationsprogramms eine Transaktion. Als Nächstes können Sie eine Verbindung zur Registrierung und zum Dateisystem herstellen und die Änderungen vornehmen, die die Installation definieren. Wenn der Job fertig ist, einfach Commit oder Rollback, wenn die Installation aus irgendeinem Grund fehlschlägt. Die Registrierung und das Dateisystem werden automatisch von diesem magischen verteilten Transaktionskoordinator für Sie bereinigt.
Wie ist es möglich, dass auf diese Weise zwei unterschiedliche Systeme abgewickelt werden können? Es scheint mir, dass es immer möglich ist, das System in einem inkonsistenten Zustand zu belassen, in dem das Dateisystem seine Änderungen festgeschrieben hat und die Registrierung dies nicht getan hat. Ich denke, in MSDTC ist es sogar möglich, eine Transaktion über das Netzwerk durchzuführen.
Ich habe gelesen http://blogs.msdn.com/florinlazar/archive/2004/03/04/84199.aspx, aber es fühlt sich an wie nur der Anfang der Erklärung, und dieser Schritt 4 sollte erheblich erweitert werden.
Edit: Von dem, was ich auf http://en.wikipedia.org/wiki/Distributed_transaction sammeln, kann es durch eine Zwei-Phasen-Commit (http://en.wikipedia.org/wiki/Two-phase_commit) erreicht werden. Nachdem ich das gelesen habe, verstehe ich die Methode immer noch nicht 100%, es scheint so, als gäbe es viel Platz für Fehler zwischen den Schritten.
Da * ist * eine Menge Platz für Fehler. Insbesondere beruht es auf "COMMIT PREPARED", das immer funktioniert. Die Realität ist anders. –