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