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
);

parameters

sesid

用于此调用的会话。

grbit

一组位,指定下表中列出的零个或多个值。

含义

JET_bitCommitLazyFlush

事务会正常提交,但此 API 不会等待事务刷新到事务日志文件,然后再返回到调用方。 这大大缩短了提交操作的持续时间,但代价是持久性。 在崩溃恢复期间,在下次调用 JetInit 函数期间,任何未在崩溃前刷新到日志的事务都会自动中止。

如果指定了JET_bitWaitLastLevel0Commit或JET_bitWaitAllLevel0Commit,则忽略此选项。

如果此对 JetCommitTransaction2 的调用与此会话对 JetBeginTransaction 函数的第一次调用不匹配,则忽略此选项。 这是因为在最外层保存点上发生的最后操作是决定整个事务是否实际提交到磁盘的因素。

JET_bitWaitAllLevel0Commit

之前由任何会话提交但尚未刷新到事务日志文件的所有事务都将立即刷新。 此 API 将等到刷新事务后再返回到调用方。

即使会话当前不在事务中,也可以使用此选项。

此选项不能与任何其他选项结合使用。

此选项在从 Windows Server 2003 开始的 Windows Server 操作系统版本中可用。

JET_bitWaitLastLevel0Commit

如果会话以前已提交任何事务,但尚未将其刷新到事务日志文件,则应立即刷新这些事务。 此 API 将等到刷新事务后再返回到调用方。 如果应用程序以前使用 JET_bitCommitLazyFlush 提交了多个事务,现在想要将其全部刷新到磁盘,这非常有用。

即使会话当前不在事务中,也可以使用此选项。

此选项不能与任何其他选项结合使用。

cmsecDurableCommit

提交延迟事务的持续时间。

pCommitID

与此提交记录关联的提交 ID。

返回值

此函数使用下表中列出的返回代码之一返回 JET_ERR 数据类型。 有关可能的可扩展存储引擎 (ESE) 错误的详细信息,请参阅 可扩展存储引擎错误错误处理参数

返回代码

说明

JET_errSuccess

操作已成功完成。

JET_errClientRequestToStopJetService

无法完成操作,因为由于调用 JetStopService 函数,与会话关联的实例上的所有活动都已停止。

JET_errInstanceUnavailable

无法完成该操作,因为与会话关联的实例遇到一个致命错误,该错误要求撤销对所有数据的访问以保护该数据的完整性。

此错误仅由从 Windows XP 开始的 Windows 操作系统版本返回。

JET_errInvalidgrbit

请求的选项之一无效或未实现。 发生以下情况时, JetCommitTransaction2 函数将返回此错误:

  • 指定了非法 的 grbit

  • JET_bitWaitLastLevel0Commit与另一 个 grbit 一起指定。

  • JET_bitWaitAllLevel0Commit与另一 个 grbit 一起指定。

JET_errNotInitialized

无法完成操作,因为尚未初始化与会话关联的实例。

JET_errNotInTransaction

操作失败,因为给定的会话不在事务中。

JET_errRestoreInProgress

无法完成操作,因为正在与会话关联的实例上执行还原操作。

JET_errSessionSharingViolation

同一会话不能同时用于多个线程。

此错误仅由从 Windows XP 开始的 Windows 操作系统版本返回。

JET_errTermInProgress

无法完成操作,因为与会话关联的实例正在关闭。

成功后,将在给定会话的当前保存点期间对数据库所做的任何更改提交,并且该保存点将结束。 如果会话的最后一个保存点已结束,则事务将选择性地刷新到事务日志文件,并且会话将退出该事务。

失败时,会话的事务状态将保持不变。 不会更改数据库状态。 应用程序应调用 JetRollback 函数来中止事务。

备注

必须有一次对 JetCommitTransaction2JetRollback 的调用,才能匹配给定会话对 JetBeginTransaction 的每次调用。

要求

要求

客户端

需要Windows 8。

服务器

需要Windows Server 2012。

标头

在 Esent.h 中声明。

Library

使用 ESENT.lib。

DLL

需要ESENT.dll。

另请参阅

JET_ERR
JET_GRBIT
JET_SESID
JetBeginTransaction
JetCommitTransaction
JetRollback
JetStopService