Freigeben über


JetBeginTransaction-Funktion

Letzte Änderung: Freitag, 27. Februar 2015

Gilt für: Windows | Windows Server

JetBeginTransaction-Funktion

Die Funktion JetBeginTransaction bewirkt, dass eine Sitzung eingeben eine Transaktion und erstellen Sie ein neues speichern Punkt. Diese Funktion kann nur einmal auf eine einzige Sitzung verursachen die Erstellung von speichern zusätzliche Punkten aufgerufen werden. Dieser Speichervorgänge Punkt können selektiv beibehalten oder verwerfen von Änderungen an den Status der Datenbank verwendet werden.

JET_ERR JET_API JetBeginTransaction(
  __in          JET_SESID sesid
);

Parameter

sesid

Die Sitzung für diesen Aufruf verwenden.

Return Value

Diese Funktion gibt den Datentyp JET_ERR mit einem der folgenden Rückgabecodes. Weitere Informationen zu den möglichen ESE-Fehlern finden Sie unter Extensible Storage Engine-Fehlern und Fehler behandeln von Parametern.

Rückgabecode

Beschreibung

JET_errSuccess

Der Vorgang wurde erfolgreich abgeschlossen.

JET_errClientRequestToStopJetService

Es ist nicht möglich, den Vorgang abzuschließen, da alle Aktivitäten auf die Instanz der Sitzung zugeordnet aufgrund eines Aufrufs von JetStopServicebehoben ist.

JET_errInstanceUnavailable

Es ist nicht möglich, den Vorgang abzuschließen, da die Instanz der Sitzung zugeordnet ein schwerwiegender Fehler, der erforderlich sind aufgetreten wurde, dass der Zugriff auf alle Daten gesperrt werden, um die Integrität der Daten zu schützen.

Dieser Fehler wird nur von Windows XP und spätere Versionen zurückgegeben werden.

JET_errNotInitialized

Es ist nicht möglich, den Vorgang abzuschließen, da die Instanz der Sitzung zugeordnet wurde noch nicht initialisiert.

JET_errRestoreInProgress

Es ist nicht möglich, den Vorgang abzuschließen, da ein Restore-Vorgang in Arbeit auf die Instanz der Sitzung zugeordnet ist.

JET_errSessionSharingViolation

Die gleiche Sitzung kann nicht für mehrere Threads gleichzeitig verwendet werden. Dieser Fehler wird nur von Windows XP und spätere Versionen zurückgegeben werden.

JET_errTermInProgress

Es ist nicht möglich, den Vorgang abzuschließen, da die Instanz der Sitzung zugeordnet heruntergefahren wird.

JET_errTransTooDeep

Eine neue Transaktion kann nicht gestartet werden, da die Sitzung bereits mit maximaler speichern zulässige Depth (engl.) wird von der Datenbank-Engine.

Klicken Sie auf Erfolg werden die bereitgestellte Sitzung innerhalb einer Transaktion. Wenn die Sitzung wurde werden zuvor innerhalb einer Transaktion klicken Sie dann eine neue speichern Punkt erstellt.

Bei einem Fehler bleiben unverändert transaktionale Status der Sitzung. Keine Änderung an den Zustand der Datenbank erfolgt.

Anmerkungen

Die Datenbank-Engine enthält ein Snapshot Isolation-Modell für die Transaktionen. Dies bedeutet, dass wenn eine Sitzung zuerst in einen Zustand transaktionale eingibt, der die Sitzung die gesamte Datenbank in der Zeit am Anfang der Transaktion fixiert angezeigt wird. Eine Sitzung muss nicht Lesesperre keine Daten, da es immer die entsprechende Version des diese Daten zugreifen kann. Dies bedeutet, dass eine Sitzung, die Daten aktualisiert diese Daten lesen eine andere Sitzung nie blockieren.

Eine weitere Folge der Verwendung der Snapshot-Isolation ist das Sperren Modell für Updates. Die Datenbank-Engine wird eine Schreibsperre auf einem angegebenen Codeabschnitt Daten in der ersten Sitzung vergeben, die diese anfordert. Diese Schreibsperre wird aufgehoben, wenn die Transaktion übermittelt oder vollständig abgebrochen so, dass die Sitzung nicht mehr in einer Transaktion ist. Während eine Sitzung eine Schreibsperre enthält, blockiert keine anderen Sitzungen, die Anforderungen, die die gleiche Sperre Schreiben nicht, bis die Sperre Schreibzugriff verfügbar ist. Zweite Sitzung schlägt vielmehr sofort mit JET_errWriteConflict fehl. Um diesen Konflikt zu lösen, die zweite Sitzung muss Abbruch (oder commit) Transaktionsprotokoll vollständig, warten Sie einige kleine Zeitraum für die erste Sitzung auf die Transaktion ausgeführt oder abgebrochen, und starten Sie alle über erneut.

Zur Unterstützung der Snapshot-Isolation speichert die Datenbank-Engine alle Versionen aller geänderte Daten im Arbeitsspeicher seit dem Zeitpunkt, zu die älteste aktive Transaktion für jede Sitzung zuerst gestartet wurde. Dies hat wichtige Auswirkungen auf die Anwendung. Jedes Verhalten, bei dem eine große Anzahl von Versionen zur Erstellung von im Arbeitsspeicher, kann dazu führen, dass die Instanz, die die maximale Version Store Größe ursprünglich (Weitere Informationen finden Sie unter JET_paramMaxVerPages im System-Parameter ). Ein solches Verhalten enthält, jedoch ist nicht auf sehr große Updates in einer einzigen Transaktion und sehr lange ausgeführte Transaktionen beschränkt. Daher ist es sehr wichtig, um die Größe des Version-Speicher für die erwartete transaktionale Laden der Anwendung ordnungsgemäß zu konfigurieren. Es ist auch wichtig sorgfältige zur Begrenzung der Anzahl von Updates in einer einzigen Transaktion ausgeführt werden. Darüber hinaus ist es wichtig, um Transaktionen als kurzer Dauer wie unter hoher Last Szenarien möglich zu machen.

Es wird dringend empfohlen, dass die Anwendung immer im Kontext einer Transaktion beim Aufruf von ESE-APIs, die Daten abgerufen oder aktualisiert. Wenn dies nicht der Fall, wird die Datenbank-Engine jede ESE-API-Aufruf dieses Typs automatisch in einer Transaktion für die Anwendung umbrochen. In einigen Fällen kann schnell die Kosten für diese sehr kurzen Transaktionen addieren.

Das Standardverhalten des Moduls ist, um die Verwendung einer Sitzung auf demselben Thread ab dem Zeitpunkt zu beschränken, der erste Aufruf von JetBeginTransaction bis zum Zeitpunkt hergestellt wird, wenn das Aufruf von JetCommitTransaction oder JetRollback erfolgt. Dieses Verhalten kann geändert werden, um diese Einschränkung durch Festlegen eines benutzerdefinierten Sitzungskontexts mithilfe von JetSetSessionContext und JetResetSessionContextzu entfernen.

Die Datenbank-Engine unterstützt auch transaktionale Schemaänderungen. Beispielsweise ist es möglich, eine neue Transaktion beginnen, erstellen Sie eine Tabelle, einige Spalten hinzufügen, erstellen Sie einen Index oder zwei und dann Abbruch der Transaktion. Die Schemaelemente, die gerade hinzugefügt wurden werden aus der Datenbank entfernt. Es ist auch möglich, Schemaänderungen und normale Datenbankaktualisierungen in derselben Transaktion verwenden.

Voraussetzungen

-Client,

Erfordert Windows Vista, Windows XP oder Windows 2000 Professional.

Server

WindowsServer 2008, WindowsServer 2003 oder Windows 2000 Server benötigt.

Kopfzeile

In Esent.h deklariert.

Library

Verwenden Sie ESENT.lib.

DLL

Erfordert "ESENT.dll".

Siehe auch

JET_ERR
JET_GRBIT
JET_SESID
JetCommitTransaction
JetGetSystemParameter
JetResetSessionContext
JetRollback
JetSetSessionContext
JetStopService
Systemparameter