Función JetDefragment2

Se aplica a: Windows | Windows Server

Función JetDefragment2

La función JetDefragment2 inicia y detiene las tareas de desfragmentación de bases de datos que mejoran la organización de datos dentro de una base de datos, con un parámetro de devolución de llamada disponible para notificar el progreso de la desfragmentación. Esto se hace para limitar el crecimiento de la base de datos mediante la asignación de disco existente de forma más eficaz dentro de la base de datos. También puede reducir el espacio de trabajo asegurándose de que los datos están más estrechamente empaquetados. Por último, puede mejorar el rendimiento de las aplicaciones mediante la aceleración de las operaciones comunes a través de una mejor organización de datos.

Windows XP:JetDefragment2 se presenta en Windows XP.

JetDefragment2 también contiene un parámetro de función de devolución de llamada que se usa para informar sobre el progreso del proceso de desfragmentación.

La desfragmentación de bases de datos es una operación en línea y no interrumpe la actividad regular de la base de datos, como las operaciones de consulta o las actualizaciones de datos. JetDefragment2 tampoco realiza una copia de todos los datos existentes. En su lugar, desfragmenta una base de datos en su lugar. Por último, JetDefragment2 recupera el espacio interno de la base de datos para volver a usar, pero no libera espacio excesivo en el sistema de archivos del sistema operativo.

El formato resultante de los datos puede ser mucho más eficaz, pero no suele ser óptimo. La desfragmentación se limita a liberar páginas de base de datos para volver a usar que contienen datos que ya se han eliminado lógicamente. La desfragmentación también hace que las páginas de base de datos estén disponibles para volver a usarse en algunos casos mediante la combinación de datos de dos páginas cuando caben en una sola página.

Esta operación es diferente de JetCompact que hace una copia de una base de datos de solo lectura en un formato altamente óptimo.

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

Parámetros

sesid

La sesión que se va a usar para esta llamada.

dbid

Base de datos que se va a desfragmentar.

szTableName

A veces se requiere szTableName y, a veces, está prohibido:

grbit szTableName
JET_bitDefragmentBTreeBatch Debe ser NULL.
JET_bitDefragmentBTree Especifica el nombre de la tabla/BTree que se va a desfragmentar.
other Debe ser NULL.

La desfragmentación se realiza para toda la base de datos descrita por el identificador de base de datos especificado.

pcPasses

Al iniciar una tarea de desfragmentación en línea, este parámetro de entrada opcional establece el número máximo de pases de desfragmentación. Al detener una tarea de desfragmentación en línea, este búfer de salida opcional se establece en el número de pases realizados.

Cuando este parámetro se establece en NULL, el número de pases de desfragmentación en línea es ilimitado.

pcSeconds

Al iniciar una tarea de desfragmentación en línea, este parámetro de entrada opcional establece el tiempo máximo para la desfragmentación. Al detener una tarea de desfragmentación en línea, este búfer de salida opcional se establece en el período de tiempo utilizado para la desfragmentación.

Cuando este parámetro se establece en NULL o si pcSeconds apunta a un valor negativo, el tiempo máximo de desfragmentación es ilimitado.

callback

Función de devolución de llamada que llama a la desfragmentación periódicamente para notificar el progreso.

grbit szTableName
JET_bitDefragmentBTreeBatch Debe ser NULL.
JET_bitDefragmentBTree Debe ser NULL.
other Opcional.

grbit

Un grupo de bits que especifica cero o más de las siguientes opciones.

Value

Significado

JET_bitDefragmentAvailSpaceTreesOnly

Esta opción se usa para desfragmentar la parte de espacio disponible de la asignación de espacio de la base de datos ESE. El espacio de base de datos se divide en dos tipos, espacio propiedad y espacio disponible. El espacio propiedad se asigna a una tabla o índice mientras el espacio disponible está listo para su uso en la tabla o el índice, respectivamente. El espacio disponible es mucho más dinámico en el comportamiento y requiere la desfragmentación en línea más que el espacio o la tabla o los datos de índice propiedad.

JET_bitDefragmentBatchStart

Esta opción se usa para iniciar una nueva tarea de desfragmentación.

JET_bitDefragmentBatchStop

Esta opción se usa para detener una tarea de desfragmentación iniciada existente.

JET_bitDefragmentBTree

Esta opción se usa para desfragmentar un árbol B, especificado por szTableName.

JET_bitDefragmentBTreeBatch

Esta opción se usa para llamar a OLD2 en toda la base de datos.

Valor devuelto

Esta función devuelve el JET_ERR tipo de datos con uno de los siguientes códigos de retorno. Para obtener más información sobre los posibles errores de ESE, vea Extensible Storage Engine Errors and Error Handling Parameters.

Código devuelto

Descripción

JET_errSuccess

La operación se ha completado correctamente.

JET_errClientRequestToStopJetService

No es posible completar la operación porque toda la actividad de la instancia asociada a la sesión ha dejado de funcionar como resultado de una llamada a JetStopService.

JET_errDatabaseFileReadOnly

La base de datos elegida para la desfragmentación es de solo lectura y no se puede actualizar de ninguna manera, incluida la desfragmentación.

JET_errDistributedTransactionAlreadyPreparedToCommit

La sesión especificada está preparada para confirmarse y no puede iniciar nuevas actualizaciones hasta que la transacción actual se confirme o revierte.

JET_errInstanceUnavailable

No es posible completar la operación porque la instancia asociada a la sesión ha encontrado un error irrecuperable que requiere que se revoque el acceso a todos los datos para proteger la integridad de esos datos. Este error solo lo devolverá Windows XP y versiones posteriores.

JET_errInvalidDatabaseId

El identificador de base de datos especificado no coincide con una base de datos conocida en la instancia de .

JET_errNotInitialized

No es posible completar la operación porque la instancia asociada a la sesión aún no se ha inicializado.

JET_errRestoreInProgress

No es posible completar la operación porque una operación de restauración está en curso en la instancia asociada a la sesión.

JET_errSessionSharingViolation

No se puede usar la misma sesión para más de un subproceso al mismo tiempo. Este error solo lo devolverá Windows XP y versiones posteriores.

JET_errTermInProgress

No es posible completar la operación porque la instancia asociada a la sesión se está cerrando.

JET_errTransReadOnly

La sesión especificada solo tiene privilegios de solo lectura y no puede iniciar una tarea que pueda realizar una actualización, incluida la desfragmentación.

JET_errVersionStoreOutOfMemory

Este error se producirá cuando el tamaño configurado del almacén de versiones no sea suficiente para contener todas las actualizaciones pendientes.

JET_wrnDefragAlreadyRunning

Se ha pasado la opción JET_bitDefragmentBatchStart, pero ya se está ejecutando una tarea de desfragmentación en la base de datos especificada.

JET_wrnDefragNotRunning

Se ha pasado la opción JET_bitDefragmentBatchStop, pero actualmente no se está ejecutando ninguna tarea de desfragmentación.

Si se ejecuta correctamente, se realiza la acción solicitada de iniciar una tarea de desfragmentación para un dato determinado con opciones dadas, o bien se realiza la acción de detener una tarea de desfragmentación existente.

En caso de error, la acción solicitada de iniciar o detener un trabajo de desfragmentación en línea no se realiza. No se producen otros efectos secundarios.

Comentarios

La desfragmentación en línea se controla mediante una configuración de parámetro, así como con esta API. El valor predeterminado del parámetro del sistema es JET_OnlineDefragAll, lo que significa que la desfragmentación está habilitada para todas las estructuras de datos admitidas. Sin embargo, con JetSetSystemParameter, es posible deshabilitar la desfragmentación en línea o habilitarla de forma selectiva solo para árboles de espacio de base de datos, bases de datos solo, archivos de streaming o cualquier combinación de estas opciones. Si la configuración del sistema para la desfragmentación en línea es a una configuración obsoleta, JetDefragment2 tratará la configuración como JET_OnlineDefragAll.

Puede haber como máximo una tarea en ejecución para cada base de datos. La tarea se ejecuta como un subproceso en el proceso que hospeda ESE.

La sesión utilizada para iniciar la tarea de desfragmentación en línea se puede usar posteriormente para las operaciones de base de datos mientras continúa la tarea de desfragmentación, ya que la tarea de desfragmentación asigna su propia sesión. La sesión especificada solo se usa para comprobar los permisos asociados a la sesión de inicio de la tarea y no se usa realmente para las propias operaciones de desfragmentación.

Requisitos

Requisito Value

Cliente

Requiere Windows Vista o Windows XP.

Servidor

Requiere Windows Server 2008 o Windows Server 2003.

Encabezado

Declarado en Esent.h.

Library

Use ESENT.lib.

Archivo DLL

Requiere ESENT.dll.

Unicode

Se implementa como JetDefragment2W (Unicode) y JetDefragment2A (ANSI).

Consulte también

JET_ERR
JET_SESID
JetCompact
JetDefragment
JetSetSystemParameter
JetStopService