Функция JetCommitTransaction

Область применения: Windows | Сервер Windows

Функция JetCommitTransaction

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

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

Параметры

sesid

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

гбит

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

Значение

Значение

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 , чтобы прервать транзакцию.

Remarks

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

Требования

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

Клиент

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

Server

Требуется 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