Функция JetDefragment2

Применимо к: Windows | Windows Server

Функция JetDefragment2

Функция JetDefragment2 запускает и останавливает задачи дефрагментации базы данных, что улучшает организацию данных в базе данных с параметром обратного вызова, доступным для отчета о ходе дефрагментации. Это делается, чтобы ограничить рост базы данных за счет более эффективного выделения существующего диска в базе данных. Он также может уменьшить рабочий набор, обеспечивая более тесную упаковка данных. Наконец, это позволяет повысить производительность приложений, ускоряя общие операции за счет более эффективной организации данных.

Windows XP:JetDefragment2 появилась в Windows XP.

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

Дефрагментация базы данных является оперативной операцией и не прерывает регулярные действия базы данных, такие как операции запроса или обновление данных. JetDefragment2 также не копирует все существующие данные. Вместо этого он дефрагментирует базу данных на месте. Наконец, JetDefragment2 восстанавливает внутреннее пространство базы данных для повторного использования, но не освобождает избыточное пространство в файловой системе операционной системы.

Результирующий формат данных может быть гораздо более эффективным, но, как правило, неоптимальным. Дефрагментация ограничивается освобождением страниц базы данных для повторного использования, содержащих данные, которые уже были логически удалены. Дефрагментация также делает страницы базы данных доступными для повторного использования в некоторых случаях путем объединения данных с двух страниц, когда они могут поместиться на одной странице.

Эта операция отличается от JetCompact , которая делает копию базы данных только для чтения в весьма оптимальной форме.

JET_ERR JET_API JetDefragment2(
  __in          JET_SESID sesid,
  __in          JET_DBID dbid,
  __in          JET_PCSTR szTableName,
  __out_opt     unsigned long* pcPasses,
  __out_opt     unsigned long* pcSeconds,
  __in          JET_CALLBACK callback,
  __in          JET_GRBIT grbit
);

Параметры

sesid

Сеанс, используемый для этого вызова.

dbid

База данных для дефрагментации.

szTableName

Иногда требуется szTableName , а иногда — запрещено:

grbit szTableName
JET_bitDefragmentBTreeBatch Этот параметр должен содержать значение NULL.
JET_bitDefragmentBTree Указывает имя таблицы или BTree для дефрагментации.
Других Этот параметр должен содержать значение NULL.

Дефрагментация выполняется для всей базы данных, описанной заданным идентификатором базы данных.

pc Pass

При запуске задачи дефрагментации в сети этот необязательный входной параметр задает максимальное число проходов дефрагментации. При остановке задачи дефрагментации в сети для этого дополнительного выходного буфера устанавливается количество выполненных проходов.

Если для этого параметра задано значение NULL, количество проходов дефрагментации в сети не ограничено.

pcSeconds

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

Если для этого параметра задано значение NULL или если pcSeconds указывает на отрицательное значение, максимальное время дефрагментации не ограничено.

Обратного вызова

Функция обратного вызова, которая регулярно вызывает дефрагментацию, чтобы сообщить о ходе выполнения.

grbit szTableName
JET_bitDefragmentBTreeBatch Этот параметр должен содержать значение NULL.
JET_bitDefragmentBTree Этот параметр должен содержать значение NULL.
Других Необязательный элемент.

grbit

Группа битов, задающая ноль или несколько следующих параметров.

Значение

Значение

JET_bitDefragmentAvailSpaceTreesOnly

Этот параметр используется для дефрагментации части доступного пространства при выделении пространства базы данных ESE. Пространство базы данных делится на два типа: собственное и доступное пространство. Собственное пространство выделяется для таблицы или индекса, а доступное пространство готово для использования в таблице или индексе соответственно. Доступное пространство является гораздо более динамичным в поведении и требует дефрагментации в сети больше, чем собственные пространства, таблицы или индексные данные.

JET_bitDefragmentBatchStart

Этот параметр используется для запуска новой задачи дефрагментации.

JET_bitDefragmentBatchStop

Этот параметр используется для остановки существующей запущенной задачи дефрагментации.

JET_bitDefragmentBTree

Этот параметр используется для дефрагментации дерева типа B, заданного szTableName.

JET_bitDefragmentBTreeBatch

Этот параметр используется для вызова OLD2 для всей базы данных.

Возвращаемое значение

Эта функция возвращает тип данных JET_ERR с одним из следующих кодов возврата. Дополнительные сведения о возможных ошибках ESE см. в разделах Ошибки подсистемы расширяемого хранилища и Параметры обработки ошибок.

Код возврата

Описание

JET_errSuccess

Операция выполнена успешно.

JET_errClientRequestToStopJetService

Невозможно выполнить операцию, так как все действия экземпляра, связанного с сеансом, прекратились в результате вызова JetStopService.

JET_errDatabaseFileReadOnly

База данных, выбранная для дефрагментации, доступна только для чтения и не может быть обновлена каким-либо образом, включая дефрагментацию.

JET_errDistributedTransactionAlreadyPreparedToCommit

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

JET_errInstanceUnavailable

Невозможно выполнить операцию, так как экземпляр, связанный с сеансом, столкнулся с неустранимой ошибкой, требующей отмены доступа ко всем данным для защиты целостности этих данных. Эта ошибка будет возвращена только в Windows XP и более поздних выпусках.

JET_errInvalidDatabaseId

Данный идентификатор базы данных не соответствует известной базе данных в экземпляре .

JET_errNotInitialized

Невозможно выполнить операцию, так как экземпляр, связанный с сеансом, еще не инициализирован.

JET_errRestoreInProgress

Невозможно выполнить операцию, так как операция восстановления выполняется в экземпляре, связанном с сеансом.

JET_errSessionSharingViolation

Один и тот же сеанс нельзя использовать для нескольких потоков одновременно. Эта ошибка будет возвращена только в Windows XP и более поздних выпусках.

JET_errTermInProgress

Невозможно завершить операцию, так как экземпляр, связанный с сеансом, завершает работу.

JET_errTransReadOnly

Данный сеанс имеет только права доступа только для чтения и не может запустить задачу, которая может выполнить обновление, включая дефрагментацию.

JET_errVersionStoreOutOfMemory

Эта ошибка возникает, если настроенного размера хранилища версий недостаточно для хранения всех невыполненных обновлений.

JET_wrnDefragAlreadyRunning

Параметр JET_bitDefragmentBatchStart передан, но задача дефрагментации уже выполняет дефрагментацию в заданной базе данных.

JET_wrnDefragNotRunning

Параметр JET_bitDefragmentBatchStop передан, но в настоящее время задача дефрагментации не выполняется.

При успешном выполнении запрошенного действия либо запуска задачи дефрагментации для заданных данных с заданными параметрами, либо выполняется действие остановки существующей задачи дефрагментации.

В случае сбоя запрошенное действие запуска или остановки задания дефрагментации в сети не выполняется. Другие побочные эффекты не возникают.

Комментарии

Дефрагментация в сети управляется как параметром, так и этим API. Значение системного параметра по умолчанию — JET_OnlineDefragAll. Это означает, что дефрагментация включена для всех поддерживаемых структур данных. Однако с помощью JetSetSystemParameter можно отключить дефрагментацию в сети или выборочно включить ее только для деревьев пространства базы данных, только баз данных, только потоковой передачи файлов или любого сочетания этих параметров. Если системный параметр для локальной дефрагментации является устаревшим, JetDefragment2 будет рассматривать этот параметр как JET_OnlineDefragAll.

Для каждой базы данных может выполняться не более одной задачи. Задача выполняется как поток в процессе, в котором размещается ESE.

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

Требования

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

Клиент

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

Сервер

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

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

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

Библиотека

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

DLL

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

Юникод

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

См. также:

JET_ERR
JET_SESID
JetCompact
JetDefragment
JetSetSystemParameter
JetStopService