Función JetDefragment
Se aplica a: Windows | Windows Server
Función JetDefragment
La función JetDefragment 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. 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.
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. JetDefragment tampoco realiza una copia de todos los datos existentes. En su lugar, desfragmenta una base de datos en su lugar. Por último, JetDefragment 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 JetDefragment(
__in JET_SESID sesid,
__in JET_DBID dbid,
__in JET_PCSTR szTableName,
__out_opt unsigned long* pcPasses,
__out_opt unsigned long* pcSeconds,
__in JET_GRBIT grbit
);
Parámetros
sesid
La sesión que se va a usar para esta llamada.
dbid
Base de datos que se desfragmentará.
szTableName
Parámetro sin usar. 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 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 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 establece el tiempo máximo para la desfragmentación. Al detener una tarea de desfragmentación en línea, este búfer de salida 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.
grbit
Un grupo de bits que especifica cero o más de las siguientes opciones.
Valor |
Significado |
---|---|
JET_bitDefragmentAvailSpaceTreesOnly |
Desfragmenta 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 una desfragmentación en línea más que el espacio o la tabla o los datos de índice propiedad. |
JET_bitDefragmentBatchStart |
Inicia una nueva tarea de desfragmentación. |
JET_bitDefragmentBatchStop |
Detiene una tarea de desfragmentación. |
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 se realiza la acción de detener una tarea de desfragmentación existente.
Si se produce un 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.
Observaciones
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 está establecida en una configuración obsoleta, JetDefragment 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 usada para iniciar la tarea de desfragmentación en línea se puede usar posteriormente para las operaciones de base de datos mientras la tarea de desfragmentación continúa, 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 tareas y no se usa realmente para las propias operaciones de desfragmentación.
Requisitos
Requisito | Value |
---|---|
Cliente |
Requiere Windows Vista, Windows XP o Windows 2000 Professional. |
Servidor |
Requiere Windows Server 2008, Windows Server 2003 o Windows 2000 Server. |
Encabezado |
Declarado en Esent.h. |
Library |
Use ESENT.lib. |
Archivo DLL |
Requiere ESENT.dll. |
Unicode |
Se implementa como JetDefragmentW (Unicode) y JetDefragmentA (ANSI). |
Consulte también
JET_ERR
JET_SESID
JetCompact
JetDefragment2
JetSetSystemParameter
JetStopService