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