Функция JetCommitTransaction

Применимо к: Windows | Windows Server

Функция JetCommitTransaction

Функция JetCommitTransaction фиксирует изменения, внесенные в состояние базы данных во время текущей точки сохранения, и переносит их в предыдущую точку сохранения. Если самая внешняя точка сохранения зафиксирована, то изменения, внесенные во время этой точки сохранения, будут зафиксированы в состоянии базы данных, а сеанс завершит транзакцию.

    JET_ERR JET_API JetCommitTransaction(
      __in          JET_SESID sesid,
      __in          JET_GRBIT grbit
    );

Параметры

sesid

Сеанс, используемый для этого вызова.

grbit

Группа битов, задающая ноль или несколько следующих параметров.

Значение

Значение

JET_bitCommitLazyFlush

Транзакция фиксируется обычно, но этот API не ожидает, пока транзакция будет переброшена в файл журнала транзакций, прежде чем вернуться вызывающей объекту. Это значительно сокращает длительность операции фиксации за счет устойчивости. Любая транзакция, которая не записывается в журнал до сбоя, будет автоматически прервана во время восстановления при следующем вызове JetInit.

Если указаны JET_bitWaitLastLevel0Commit или JET_bitWaitAllLevel0Commit, этот параметр игнорируется.

Если этот вызов JetCommitTransaction не соответствует первому вызову JetBeginTransaction для этого сеанса, этот параметр игнорируется. Это связано с тем, что последнее действие, выполняемое в самой внешней точке сохранения, является определяющим фактором, определяющим, действительно ли вся транзакция зафиксирована на диске.

JET_bitWaitAllLevel0Commit

Все транзакции, ранее зафиксированные любым сеансом, которые еще не были удалены в файл журнала транзакций, будут немедленно удалены. Этот API будет ожидать, пока транзакции не будут удалены, прежде чем вернуться вызывающей объекту.

Этот параметр можно использовать, даже если сеанс в данный момент не входит в транзакцию.

Этот параметр нельзя использовать в сочетании с любым другим параметром.

Этот параметр доступен только в Windows Server 2003.

JET_bitWaitLastLevel0Commit

Если сеанс ранее фиксировал какие-либо транзакции и они еще не были удалены в файл журнала транзакций, они должны быть немедленно удалены. Этот API будет ожидать, пока транзакции не будут удалены, прежде чем вернуться вызывающей объекту. Это полезно, если приложение ранее зафиксировало несколько транзакций с помощью JET_bitCommitLazyFlush и теперь хочет записать их все на диск.

Этот параметр можно использовать, даже если сеанс в данный момент не входит в транзакцию.

Этот параметр нельзя использовать в сочетании с любым другим параметром.

Возвращаемое значение

Эта функция возвращает тип данных JET_ERR с одним из следующих кодов возврата. Дополнительные сведения о возможных ошибках ESE см. в разделах Ошибки подсистемы расширяемого хранилища и Параметры обработки ошибок.

Код возврата

Описание

JET_errSuccess

Операция выполнена успешно.

JET_errClientRequestToStopJetService

Невозможно выполнить операцию, так как все действия экземпляра, связанного с сеансом, прекратились в результате вызова JetStopService.

JET_errInstanceUnavailable

Невозможно выполнить операцию, так как экземпляр, связанный с сеансом, столкнулся с неустранимой ошибкой, требующей отмены доступа ко всем данным для защиты целостности этих данных.

Эта ошибка будет возвращена только в Windows XP и более поздних выпусках.

JET_errInvalidgrbit

Один из запрошенных вариантов был недопустим или не реализован. Эта ошибка будет возвращена JetCommitTransaction , если:

  • Указан недопустимый гбит .

  • JET_bitWaitLastLevel0Commit был указан в сочетании с другим гбитом.

  • JET_bitWaitAllLevel0Commit был указан в сочетании с другим гбитом.

JET_errNotInitialized

Невозможно выполнить операцию, так как экземпляр, связанный с сеансом, еще не инициализирован.

JET_errNotInTransaction

Операция завершилась сбоем, так как данный сеанс не находится в транзакции.

JET_errRestoreInProgress

Невозможно выполнить операцию, так как операция восстановления выполняется в экземпляре, связанном с сеансом.

JET_errSessionSharingViolation

Один и тот же сеанс нельзя использовать для нескольких потоков одновременно.

Эта ошибка будет возвращена только в Windows XP и более поздних выпусках.

JET_errTermInProgress

Невозможно завершить операцию, так как экземпляр, связанный с сеансом, завершает работу.

При успешном выполнении все изменения, внесенные в базу данных во время текущей точки сохранения для данного сеанса, будут зафиксированы, и эта точка сохранения будет завершена. Если последняя точка сохранения для сеанса была завершена, транзакция при необходимости будет сохранена в файле журнала транзакций, и сеанс завершит транзакцию.

При сбое состояние транзакций сеанса останется неизменным. Изменение состояния базы данных не произойдет. Приложение должно вызвать JetRollback , чтобы прервать транзакцию.

Комментарии

Для сопоставления каждого вызова JetBeginTransaction для определенного сеанса должен быть один вызов JetCommitTransaction или JetRollback.

Требования

Требование Значение

Клиент

Требуется Windows Vista, Windows XP или Windows 2000 Professional.

Сервер

Требуется Windows Server 2008, Windows Server 2003 или Windows 2000 Server.

Верхняя часть

Объявлено в Esent.h.

Библиотека

Используйте ESENT.lib.

DLL

Требуется ESENT.dll.

См. также:

JET_ERR
JET_GRBIT
JET_SESID
JetBeginTransaction
JetCommitTransaction
JetRollback
JetStopService