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