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


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

Указатель, используемый для обозначения альтернативной библиотеки DLL ESE, которую можно использовать для чтения базы данных-источника, и для предоставления необязательных параметров для операции 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

Указан указатель pconvert , отличный от NULL, но используемая версия 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 %, чтобы уменьшить количество операций ввода-вывода во время обработки запроса. Однако если данные часто обновляются с помощью операций, которые увеличивают размер данных, хранящихся вместе с записью, или часто добавляются новые данные, приложение выберет более низкую плотность, чтобы обновления чаще находили необходимые ресурсы. Операция сжатия базы данных приводит к тому, что база данных будет идеально выложена в соответствии с заполнением, выбранным приложением.

Сжатие базы данных является автономной операцией. Она не может быть выполнена, пока используется база данных. В результате это обычно выполняется как часть процесса сборки приложения, которое предоставляет набор данных как часть самого себя.

Сжатие автономной базы данных затрагивает каждый бит данных в базе данных и может использоваться в качестве средства проверки согласованности базы данных. Если база данных является подозрительной, ее можно сжать. Если ошибка при сжатии не найдена, будет известно, что база данных находится в допустимом состоянии для ESE.

Требования

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

Клиент

Требуется Windows Vista, Windows XP или Windows 2000 Professional.

Сервер

Требуется Windows Server 2008, Windows Server 2003 или Windows 2000 Server.

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

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

Библиотека

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

DLL

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

Юникод

Реализовано как JetCompactW (Юникод) и JetCompactA (ANSI).

См. также:

JET_COLTYP
JET_ERR
JET_SESID
JetDefragment
JetStopService