Функция JetDefragment2

Область применения: Windows | Сервер Windows

Функция 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 , а иногда это запрещено:

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

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

PcPasses

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

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

pcSeconds

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

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

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

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

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

гбит

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

Значение

Значение

JET_bitDefragmentAvailSpaceTreesOnly

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

JET_bitDefragmentBatchStart

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

JET_bitDefragmentBatchStop

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

JET_bitDefragmentBTree

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

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

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

Remarks

Дефрагментация в сети управляется как параметром, так и этим API. Значение системного параметра по умолчанию — JET_OnlineDefragAll. Это означает, что дефрагментация включена для всех поддерживаемых структур данных. Однако с помощью JetSetSystemParameter можно отключить дефрагментацию в сети или выборочно включить ее только для деревьев пространства базы данных, баз данных, только потоковых файлов или любого сочетания этих параметров. Если системный параметр для дефрагментации в строке является устаревшим параметром, 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
JetCompact
JetDefragment
JetSetSystemParameter
JetStopService