Функция JetDefragment2

Применимо к: Windows | Windows Сервером

Функция JetDefragment2

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

**Windows xp:**JetDefragment2 появился в Windows XP.

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

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

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

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

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

Параметры

сесид

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

DBID

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

сзтабленаме

Иногда сзтабленаме является обязательным, и иногда она запрещена:

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

Дефрагментация выполняется для всей базы данных, описанной по заданному ИДЕНТИФИКАТОРу базы данных.

пкпассес

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

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

пксекондс

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

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

обратный вызов

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

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

грбит

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

Значение

Значение

JET_bitDefragmentAvailSpaceTreesOnly

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

JET_bitDefragmentBatchStart

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

JET_bitDefragmentBatchStop

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

JET_bitDefragmentBTree

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

JET_bitDefragmentBTreeBatch

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

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

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

Код возврата

Описание

JET_errSuccess

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

JET_errClientRequestToStopJetService

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

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 был передан, но в данный момент задача дефрагментации не выполняется.

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

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

Remarks

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

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

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

Требования

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

Клиент

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

Server

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

Header

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

Библиотека

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

DLL

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

Юникод

Реализуется как JetDefragment2W (Юникод) и JetDefragment2A (ANSI).

См. также:

JET_ERR
JET_SESID
жеткомпакт
жетдефрагмент
жетсетсистемпараметер
жетстопсервице