Condividi tramite


Funzione JetDefragment

Si applica a: Windows | Windows Server

Funzione JetDefragment

La funzione JetDefragment avvia e arresta le attività di deframmentazione del database che migliorano l'organizzazione dei dati all'interno di un database. Questa operazione consente di limitare la crescita del database usando l'allocazione del disco esistente in modo più efficiente all'interno del database. Può anche ridurre il set di lavoro garantendo che i dati siano più strettamente compressi. Infine, può migliorare le prestazioni dell'applicazione accelerando le operazioni comuni tramite un'organizzazione dei dati migliore.

La deframmentazione del database è un'operazione online e non interrompe l'attività regolare del database, ad esempio operazioni di query o aggiornamenti dei dati. JetDefragment non esegue anche una copia di tutti i dati esistenti. Invece, deframmenta un database sul posto. Infine, JetDefragment recupera lo spazio interno del database per il riutilizzo, ma non rilascia spazio in eccesso nel file system del sistema operativo.

Il formato risultante dei dati può essere molto più efficiente, ma non è in genere ottimale. La deframmentazione è limitata al rilascio delle pagine del database per il re-use che contengono dati già eliminati logicamente. La deframmentazione rende inoltre disponibili le pagine del database per il riutilizzo in alcuni casi combinando i dati da due pagine quando può adattarsi a una singola pagina.

Questa operazione è diversa da JetCompact che crea una copia di un database di sola lettura in un formato estremamente ottimale.

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

Parametri

sesid

Sessione da usare per questa chiamata.

dbid

Database che verrà deframmentato.

szTableName

Parametro non utilizzato. La deframmentazione viene eseguita per l'intero database descritto dall'ID del database specificato.

pcPasses

Quando si avvia un'attività di deframmentazione online, questo parametro di input imposta il numero massimo di passaggi di deframmentazione. Quando si arresta un'attività di deframmentazione online, questo buffer di output è impostato sul numero di passaggi eseguiti.

Quando questo parametro è impostato su NULL, il numero di passaggi di deframmentazione online è illimitato.

pcSeconds

Quando si avvia un'attività di deframmentazione online, questo parametro di input imposta il tempo massimo per la deframmentazione. Quando si arresta un'attività di deframmentazione online, questo buffer di output viene impostato sulla durata di tempo utilizzata per la deframmentazione.

Quando questo parametro è impostato su NULL o se pcSeconds punta a un valore negativo, il tempo massimo per la deframmentazione è illimitato.

grbit

Un gruppo di bit che specificano zero o più delle opzioni seguenti.

Valore

Significato

JET_bitDefragmentAvailSpaceTreesOnly

Deframmenta la parte disponibile dello spazio di allocazione dello spazio del database ESE. Lo spazio del database è diviso in due tipi, spazio di proprietà e spazio disponibile. Lo spazio di proprietà viene allocato a una tabella o a un indice, mentre lo spazio disponibile è pronto per l'uso rispettivamente all'interno della tabella o dell'indice. Lo spazio disponibile è molto più dinamico nel comportamento e richiede la deframmentazione on-line più di uno spazio o una tabella o un indice di proprietà.

JET_bitDefragmentBatchStart

Avvia una nuova attività di deframmentazione.

JET_bitDefragmentBatchStop

Arresta un'attività di deframmentazione.

Valore restituito

Questa funzione restituisce il tipo di dati JET_ERR con uno dei codici restituiti seguenti. Per altre informazioni sugli errori ESE possibili, vedere Errori del motore di archiviazione estendibili e parametri di gestione degli errori.

Codice restituito

Descrizione

JET_errSuccess

Operazione riuscita.

JET_errClientRequestToStopJetService

Non è possibile completare l'operazione perché tutte le attività nell'istanza associata alla sessione non sono state interrotte in seguito a una chiamata a JetStopService.

JET_errDatabaseFileReadOnly

Il database scelto per la deframmentazione è di sola lettura e non può essere aggiornato in alcun modo, inclusa la deframmentazione.

JET_errDistributedTransactionAlreadyPreparedToCommit

La sessione specificata si trova nello stato di commit e non può iniziare nuovi aggiornamenti fino al commit o al rollback della transazione corrente.

JET_errInstanceUnavailable

Non è possibile completare l'operazione perché l'istanza associata alla sessione ha rilevato un errore irreversibile che richiede che l'accesso a tutti i dati venga revocato per proteggere l'integrità dei dati. Questo errore verrà restituito solo da Windows XP e versioni successive.

JET_errInvalidDatabaseId

L'ID del database specificato non corrisponde a un database noto nell'istanza.

JET_errNotInitialized

Non è possibile completare l'operazione perché l'istanza associata alla sessione non è ancora stata inizializzata.

JET_errRestoreInProgress

Non è possibile completare l'operazione perché un'operazione di ripristino è in corso nell'istanza associata alla sessione.

JET_errSessionSharingViolation

La stessa sessione non può essere usata contemporaneamente per più thread. Questo errore verrà restituito solo da Windows XP e versioni successive.

JET_errTermInProgress

Non è possibile completare l'operazione perché l'istanza associata alla sessione viene arrestata.

JET_errTransReadOnly

La sessione specificata ha privilegi di sola lettura e non può avviare un'attività che può eseguire un aggiornamento, inclusa la deframmentazione.

JET_errVersionStoreOutOfMemory

Questo errore si verifica quando le dimensioni configurate dell'archivio versioni non sono sufficienti per contenere tutti gli aggiornamenti in sospeso.

JET_wrnDefragAlreadyRunning

L'opzione JET_bitDefragmentBatchStart è stata passata, ma un'attività di deframmentazione è già in esecuzione nel database specificato.

JET_wrnDefragNotRunning

L'opzione JET_bitDefragmentBatchStop è stata passata, ma non è attualmente in esecuzione alcuna attività di deframmentazione.

In caso di esito positivo, viene eseguita l'azione richiesta di avviare un'attività di deframmentazione per i dati specificati con le opzioni specificate oppure l'azione di arresto di un'attività di deframmentazione esistente.

In caso di errore, l'azione richiesta di avvio o arresto di un processo di deframmentazione online non viene eseguita. Non si verificano altri effetti collaterali.

Commenti

La deframmentazione online è controllata sia da un'impostazione di parametro che da questa API. Il valore del parametro di sistema predefinito è JET_OnlineDefragAll, il che significa che la deframmentazione è abilitata per tutte le strutture dati supportate. Tuttavia, usando JetSetSystemParameter, è possibile disabilitare la deframmentazione online o abilitarla in modo selettivo solo per alberi dello spazio del database, database solo, file di streaming o qualsiasi combinazione di queste opzioni. Se l'impostazione di sistema per la deframmentazione online è impostata su un'impostazione obsoleta, JetDefragment considera l'impostazione come JET_OnlineDefragAll.

La maggior parte delle attività può essere eseguita per ogni database. L'attività viene eseguita come thread nel processo che ospita ESE.

La sessione usata per avviare l'attività di deframmentazione online può essere usata successivamente per le operazioni di database mentre l'attività di deframmentazione continua, perché l'attività di deframmentazione alloca la propria sessione. La sessione specificata viene usata solo per controllare le autorizzazioni associate alla sessione di avvio dell'attività e non viene effettivamente usata per le operazioni di deframmentazione stesse.

Requisiti

Requisito Valore

Client

Richiede Windows Vista, Windows XP o Windows 2000 Professional.

Server

Richiede Windows Server 2008, Windows Server 2003 o Windows 2000 Server.

Intestazione

Dichiarato in Esent.h.

Libreria

Usare ESENT.lib.

DLL

Richiede ESENT.dll.

Unicode

Implementato come JetDefragmentW (Unicode) e JetDefragmentA (ANSI).

Vedere anche

JET_ERR
JET_SESID
JetCompact
JetDefragment2
JetSetSystemParameter
JetStopService