Поделиться через


Функция JetCommitTransaction2

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

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

Функция JetCommitTransaction2 появилась в Windows 8 операционной системе.

JET_ERR JET_API JetCommitTransaction2(
  __in          JET_SESID sesid,
  __in          JET_GRBIT grbit,
  __in          DWORD cmsecDurableCommit,
  __out         JET_COMMIT_ID pCommitID
);

Параметры

sesid

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

grbit

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

Значение

Значение

JET_bitCommitLazyFlush

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

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

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

JET_bitWaitAllLevel0Commit

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

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

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

Этот параметр доступен в версиях операционной системы Windows Server, начиная с Windows Server 2003.

JET_bitWaitLastLevel0Commit

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

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

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

cmsecDurableCommit

Длительность фиксации отложенной транзакции.

pCommitID

Идентификатор фиксации, связанный с этой записью фиксации.

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

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

Код возврата

Описание

JET_errSuccess

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

JET_errClientRequestToStopJetService

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

JET_errInstanceUnavailable

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

Эта ошибка будет возвращена только версиями операционной системы Windows, начиная с Windows XP.

JET_errInvalidgrbit

Один из запрошенных вариантов был недопустим или не реализован. Эта ошибка будет возвращена функцией JetCommitTransaction2 при возникновении следующего:

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

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

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

JET_errNotInitialized

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

JET_errNotInTransaction

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

JET_errRestoreInProgress

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

JET_errSessionSharingViolation

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

Эта ошибка будет возвращена только версиями операционной системы Windows, начиная с Windows XP.

JET_errTermInProgress

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

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

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

Комментарии

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

Требования

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

Клиент

Требуется Windows 8.

Сервер

Требуется Windows Server 2012.

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

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

Библиотека

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

DLL

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

См. также раздел

JET_ERR
JET_GRBIT
JET_SESID
JetBeginTransaction
JetCommitTransaction
JetRollback
JetStopService