JetCompact 函数
适用于: Windows |Windows Server
JetCompact 函数
JetCompact 函数创建现有数据库的副本。 副本压缩为最佳使用状态。 复制的数据将根据创建索引时为索引选择的度量值进行打包。 这样,压缩的数据可以尽可能密集地存储。 或者,压缩数据可能会为后续记录增长或索引插入保留空间。
JET_ERR JET_API JetCompact(
__in JET_SESID sesid,
__in JET_PCSTR szDatabaseSrc,
__in JET_PCSTR szDatabaseDest,
__in JET_PFNSTATUS pfnStatus,
__in_opt JET_CONVERT* pconvert,
__in JET_GRBIT grbit
);
参数
sesid
用于此调用的会话。
szDatabaseSrc
要压缩的源数据库。
szDatabaseDest
要用于压缩数据库的名称。
pfnStatus
可以通过数据库压缩操作定期调用以报告进度的回调函数。
pconvert
指针,用于指定可用于读取源数据库的备用 ESE DLL,并为将数据库从早期版本格式转换为更高版本格式的 JetCompact 操作提供可选参数。 此功能在 Windows Server 2003 中已停用。
grbit
一组指定以下选项的零个或多个位。
值 |
含义 |
---|---|
JET_bitCompactRepair |
在已知源数据库损坏时使用。 它支持一整套新行为,旨在从源数据库中挽救尽可能多的数据。 使用此选项集的 JetCompact 可能会返回JET_errSuccess但不复制源数据库中创建的所有数据。 将跳过源数据库损坏部分的数据。 |
JET_bitCompactStats |
使 JetCompact 将源数据库上的统计信息转储到名为 DFRGINFO.TXT 的文件。 统计信息包括源数据库中每个表的名称、每个表中的行数、每个表中所有行的总字节数、 JET_coltypLongText 或 JET_coltypLongBinary 类型的所有列的总字节数(以字节为单位),这些列的大小足以与记录分开存储,聚集索引叶页数, 和长值叶页数。 此外,还转储了包括源数据库大小、目标数据库大小、数据库压缩所需的时间、临时数据库空间在内的汇总统计信息。 |
返回值
此函数返回具有以下返回代码之一 的JET_ERR 数据类型。 有关可能的 ESE 错误的详细信息,请参阅 可扩展存储引擎错误 和 错误处理参数。
返回代码 |
说明 |
---|---|
JET_errSuccess |
操作已成功完成。 |
JET_errClientRequestToStopJetService |
无法完成操作,因为由于调用 JetStopService,与会话关联的实例上的所有活动都已停止。 |
JET_errFeatureNotAvailable |
已提供非 NULL pconvert 指针,但所使用的 ESE 版本不支持转换功能。 此功能已在 ESE 的 Windows Server 2003 版本中删除。 |
JET_errInstanceUnavailable |
无法完成该操作,因为与会话关联的实例遇到一个致命错误,该错误要求撤销对所有数据的访问以保护该数据的完整性。 此错误仅由 Windows XP 和更高版本返回。 |
JET_errInTransaction |
调用会话位于事务中。 JetCompact 必须由任何事务之外的会话调用。 |
JET_errNotInitialized |
无法完成操作,因为尚未初始化与会话关联的实例。 |
JET_errRestoreInProgress |
无法完成操作,因为正在与会话关联的实例上执行还原操作。 |
JET_errSessionSharingViolation |
同一会话不能同时用于多个线程。 此错误仅由 Windows XP 和更高版本返回。 |
JET_errTermInProgress |
无法完成操作,因为与会话关联的实例正在关闭。 |
成功后,源数据库将复制到目标数据库。 目标数据库处于最佳状态,例如,所有表索引都位于相邻的逻辑磁盘空间中。 每个索引页都填充到最初在源数据库中创建索引时配置的量。 所有数据和元数据设置都以完全保真度复制,除非指定了修复选项。 如果指定了修复选项,可能尚未复制源数据库中的某些数据。
失败时,目标数据库可能存在,但不是源数据库的完整副本。
备注
压缩数据库还用于将数据库从早期版本格式升级到更现代的版本。 可选参数是 pconvert,它包含一个结构,该结构可以保存用于读取源数据库格式的早期版本 DLL 的说明。 此功能在 Windows Server 2003 中已停用。 在 Windows Server 2003 之后,新版本的 ESE 始终能够读取较旧版本的数据库格式,因此不需要此功能。
在创建表和索引时指定压缩操作后所需的数据密度。 密度必须介于 20% 到 100% 之间。 如果数据库主要为读取且未更新,则应用程序会将密度设置为 100%,以减少查询处理期间的 I/O 操作数。 但是,如果数据频繁更新,其操作会增加与记录一起存储的数据的大小,或者频繁插入新数据,则应用程序将选择较低的密度,以便更新更频繁地找到所需的可用资源。 压缩数据库的操作会使数据库根据应用程序选择的填充进行理想布局。
数据库压缩是一种非在线操作。 使用数据库时无法执行该操作。 因此,它通常是在开发应用程序(将数据集作为自身一部分提供)的生成过程中完成的。
脱机数据库压缩涉及数据库中的每一位数据,并可用作检查数据库一致性的一种手段。 如果怀疑某个数据库,则可以将其压缩。 如果压缩中未发现错误,则已知数据库处于 ESE 的有效状态。
要求
要求 | 值 |
---|---|
客户端 |
需要 Windows Vista、Windows XP 或 Windows 2000 Professional。 |
服务器 |
需要 Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。 |
标头 |
在 Esent.h 中声明。 |
Library |
使用 ESENT.lib。 |
DLL |
需要ESENT.dll。 |
Unicode |
作为 JetCompactW (Unicode) 和 JetCompactA (ANSI) 实现。 |