Функция 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_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