JetInit 函数

适用于: Windows |Windows Server

JetInit 函数

JetInit 函数将数据库引擎置于可以支持应用程序使用数据库文件的状态。 必须使用 JetSetSystemParameter 为初始化正确配置引擎。 数据库崩溃恢复作为初始化过程的一部分自动执行。

JET_ERR JET_API JetInit(
  __in_out_opt  JET_INSTANCE* pinstance
);

parameters

pinstance

要用于此调用的 实例。

对于 Windows 2000,此参数将被忽略,并且应始终为 NULL。

对于 Windows XP 及更高版本,此参数的使用取决于引擎的操作模式。 如果引擎在仅支持一个实例的旧模式 (Windows 2000 兼容模式) 运行,则此参数可以是 NULL,也可以设置为有效的输出缓冲区,该缓冲区将返回作为初始化的副作用而创建的全局实例句柄。 此输出缓冲区必须设置为 NULL 或JET_instanceNil。 然后,可以将此实例句柄传递给使用实例的任何其他函数。 如果引擎在多实例模式下运行,则必须将此参数设置为有效的输入缓冲区,该缓冲区包含正在初始化的 JetCreateInstance 函数实例返回的实例句柄。

备注

实例必须通过对 JetInit 的调用进行初始化,然后才能被 JetSetSystemParameter 以外的任何项使用。

调用 JetTerm 函数会销毁实例,即使从未使用 JetInit 初始化该实例。 实例是数据库引擎的可恢复性单位。 它控制用于保护一组数据库文件中数据完整性的所有文件的生命周期。 这些文件包括检查点文件和事务日志文件。

任何时间可以创建的最大实例数由 JET_paramMaxInstances 控制,可通过调用 JetSetSystemParameter 进行配置。 首次初始化数据库引擎时, JetInit 将创建一组初始文件以支持该实例。 这些文件包括名为>< JET_paramBaseName 的检查点文件 (。CHK) ,一组 (名为 RES1 的保留事务日志文件。LOG 和 RES2。LOG) , (名为>< JET_paramBaseName 的初始事务日志文件。LOG) , (根据JET_paramTempPath) 命名的临时数据库文件。 如果 JET_paramRecovery 设置为“关”,则不会创建检查点文件和日志文件。 如果 JET_paramMaxTemporaryTables 设置为零,则不会创建临时数据库文件。 这些文件表示实例的磁盘占用空间,必须谨慎管理。 如果这些文件单独损坏或彼此损坏,则存储在与实例关联的数据库中的数据可能会丢失。

使用一组现有的事务日志文件初始化数据库引擎时,将检查这些文件,以查看实例的上一个化身是否遭受崩溃。 如果检测到崩溃,则会自动执行崩溃恢复。 此过程将重新构造在上一个引擎化身期间附加到实例的数据库,并将更改保存回数据库文件。 结果将是事务一致的数据库。 如果针对数据库重播的事务日志文件数很大,则此过程可能需要相当长的时间。

由于 JetInit 执行崩溃恢复,因此在发生故障时,几乎可以返回任何数据库引擎错误。 实际上,部署中出现的大多数错误分为两类:数据损坏和文件管理不正。 数据损坏最常出现在以下或类似错误中:

  • JET_errReadVerifyFailure

  • JET_errLogFileCorrupt

  • JET_errCheckpointCorrupt

这些错误几乎总是由硬件问题引起,因此无法避免。 文件管理不力最常出现在以下或类似错误中:

  • JET_errMissingLogFile

  • JET_errAttachedDatabaseMismatch

  • JET_errDatabaseSharingViolation

  • JET_errInvalidLogSequence

如果在一组日志上运行恢复,但并非所有数据库都存在 (在正常情况下) 返回错误JET_errAttachedDatabaseMismatch,并且客户端希望在缺少数据库的情况下继续恢复,则可以使用 JET_ bitReplayIgnoreMissingDB 继续恢复可用数据库。 应用程序可以避免这些错误。 应用程序必须小心保护这些文件的存储库免受外部力量(如用户或其他应用程序)的操纵。 如果应用程序希望完全销毁实例,则必须删除与该实例关联的所有文件。 其中包括检查点文件、事务日志文件和附加到实例的任何数据库文件。

对于附加到实例的数据库文件, JetInit 函数的行为在 Windows 2000 和更高版本之间有所不同。

Windows 2000: 在 Windows 2000 中,在上一个实例化身期间附加到该实例的任何数据库在 JetInit 成功完成后仍会附加到该实例。 无需在 JetInit 之后调用 JetAttachDatabase,以确保以后的数据库访问。 如果在 JetInit 函数之后调用 JetAttachDatabase 函数,则将返回JET_wrnDatabaseAttached警告。 此警告指示数据库附件已保留,可以忽略。

Windowsxp: 在 Windows XP 及更高版本中, JetInit 会自动从实例中分离所有数据库。 这意味着在这种情况下,必须始终在 JetInit 之后调用 JetAttachDatabase

在 Windows 2000 和更高版本上运行的任何应用程序必须始终在 JetInit 之后调用 JetAttachDatabase。 如果应用程序在 Windows 2000 上运行,则在某些情况下,它必须看到JET_wrnDatabaseAttached。 有关详细信息 ,请参阅 JetAttachDatabase

要求

要求

客户端

需要 Windows Vista、Windows XP 或 Windows 2000 专业版。

服务器

需要 Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。

标头

在 Esent.h 中声明。

Library

使用 ESENT.lib。

DLL

需要ESENT.dll。

另请参阅

可扩展存储引擎文件
JET_ERR
JET_GRBIT
JET_INSTANCE
JET_paramMaxTemporaryTables
JET_paramRecovery
JetAttachDatabase
JetCreateInstance
JetInit3
JetSetSystemParameter