Verteilte MS DTC-Transaktionen

Anwendungen, die mithilfe von OLE DB, ODBC (Open Database Connectivity), ADO (ActiveX Data Objects) oder DB-Library geschrieben wurden, können verteilte Transact-SQL-Transaktionen verwenden, indem sie Transact-SQL-Anweisungen zum Starten und Beenden von verteilten Transact-SQL-Transaktionen ausgeben. OLE DB und ODBC verfügen auf der API-Ebene (Application Programming Interface, Schnittstelle für Anwendungsprogrammierung) auch über Unterstützung für die Verwaltung verteilter Transaktionen. OLE DB- und ODBC-Anwendungen können diese API-Funktionen für die Verwaltung verteilter Transaktionen verwenden. Dies ist auch zusammen mit anderen COM-Ressource-Managern (Component Object Model) als SQL Server Database Engine (Datenbankmodul) möglich, sofern sie Microsoft DTC-Transaktionen (Distributed Transaction Coordinator) unterstützen. Sie können die API-Funktionen auch verwenden, um zusätzliche Steuerungsmöglichkeiten über die Grenzen einer verteilten Transaktion zu erhalten, die mehrere Computer umfasst, die Instanzen von Database Engine (Datenbankmodul) ausführen.

Verteilte ODBC-Transaktionen

Sie können lokale Transaktionen auf der ODBC-API-Ebene steuern, indem Sie das SQL_ATTR_AUTOCOMMIT-Verbindungsattribut auf SQL_AUTOCOMMIT_OFF festlegen und anschließend die SQLEndTran-Funktion von ODBC aufrufen, um für jede Transaktion einen Commit oder Rollback auszuführen. Verwenden Sie diese Funktionen nicht zur Verwaltung einer verteilten Transaktion in einer ODBC-Anwendung. Verwenden Sie stattdessen die COM-Methoden von MS DTC:

  • Rufen Sie DtcGetTransactionManager zum Herstellen einer Verbindung mit MS DTC auf.

  • Rufen Sie ITransactionDispenser::BeginTransaction auf, um die verteilte Transaktion zu starten und ein Transaktionsobjekt abzurufen.

  • Rufen Sie bei jeder ODBC-Verbindung, die an der verteilten Transaktion beteiligt ist, die SQLSetConnectAttr-Funktion von ODBC auf; dabei muss fOption auf SQL_COPT_SS_ENLIST_IN_DTC festgelegt sein, und vParam muss die Adresse des Transaktionsobjekts von ITransactionDispenser::BeginTransaction enthalten.

  • Nach Abschluss der Transaktion rufen Sie anstelle der SQLEndTran-Funktion von ODBC die ITransaction::Commit- oder ITransaction::Rollback-Methode für das Transaktionsobjekt auf, das von ITransactionDispenser::BeginTransaction abgerufen wurde.

Verteilte OLE DB-Transaktionen

Das Modell zur Steuerung einer verteilten Transaktion in OLE DB ist mit dem Modell zur Steuerung einer lokalen Transaktion vergleichbar. Folgende Schritte führt ein OLE DB-Consumer aus, um eine lokale Transaktion zu steuern:

  • Verwenden der ITransactionLocal::StartTransaction-Methode, um die lokale Transaktion zu starten und ein Transaktionsobjekt abzurufen.

  • Aufrufen der ITransaction::Commit- oder ITransaction::Rollback-Methode für das Transaktionsobjekt, das von ITransactionLocal::StartTransaction abgerufen wurde.

Zur Steuerung einer verteilten Transaktion führt der Consumer die folgenden Schritte aus:

  • Aufrufen von DtcGetTransactionManager zum Herstellen einer Verbindung mit MS DTC.

  • Aufrufen von ITransactionDispenser::BeginTransaction, um die verteilte Transaktion zu starten und ein Transaktionsobjekt abzurufen.

  • Aufrufen der ITransactionJoin-Schnittstelle des verteilten Transaktionsobjekts für jede Verbindung, die an der verteilten Transaktion beteiligt ist.

  • Aufrufen der ITransaction::Commit- oder ITransaction::Rollback-Methode des verteilten Transaktionsobjekts, um die Transaktion abzuschließen.