Condividi tramite


Funzione JetInit

Si applica a: Windows | Windows Server

Funzione JetInit

La funzione JetInit inserisce il motore di database in uno stato in cui può supportare l'uso di file di database da parte dell'applicazione. Il motore deve essere già configurato correttamente per l'inizializzazione tramite JetSetSystemParameter. Il ripristino di arresto anomalo del database viene eseguito automaticamente come parte del processo di inizializzazione.

JET_ERR JET_API JetInit(
  __in_out_opt  JET_INSTANCE* pinstance
);

Parametri

pinstance

Istanza da utilizzare per questa chiamata.

Per Windows 2000, questo parametro viene ignorato e deve essere sempre NULL.

Per Windows XP e versioni successive, l'uso di questo parametro dipende dalla modalità operativa del motore. Se il motore funziona in modalità legacy (modalità di compatibilità di Windows 2000) in cui è supportata una sola istanza, questo parametro può essere NULL oppure può essere impostato su un buffer di output valido che restituirà l'handle di istanza globale creato come effetto collaterale dell'inizializzazione. Questo buffer di output deve essere impostato su NULL o JET_instanceNil. Questo handle di istanza può quindi essere passato a qualsiasi altra funzione che usa un'istanza di . Se il motore opera in modalità a istanze multipli, questo parametro deve essere impostato su un buffer di input valido che contiene l'handle di istanza restituito dall'istanza della funzione JetCreateInstance che viene inizializzata.

Commenti

Un'istanza di deve essere inizializzata con una chiamata a JetInit prima che possa essere usata da qualsiasi elemento diverso da JetSetSystemParameter.

Un'istanza viene eliminata definitivamente da una chiamata alla funzione JetTerm , anche se tale istanza non è mai stata inizializzata usando JetInit. Un'istanza è l'unità di recuperabilità per il motore di database. Controlla il ciclo di vita di tutti i file usati per proteggere l'integrità dei dati in un set di file di database. Questi file includono il file del checkpoint e i file di log delle transazioni.

Il numero massimo di istanze che è possibile creare in qualsiasi momento viene controllato da JET_paramMaxInstances, che può essere configurato da una chiamata a JetSetSystemParameter. Quando il motore di database viene inizializzato per la prima volta, JetInit creerà un set iniziale di file per supportare tale istanza. Questi file includono un file di checkpoint (denominato <JET_paramBaseName>. CHK), un set di file di log delle transazioni riservati (denominato RES1. LOG e RES2. LOG), un file di log delle transazioni iniziale (denominato <JET_paramBaseName>. LOG) e un file di database temporaneo (denominato in base a JET_paramTempPath). Se JET_paramRecovery è impostato su "Disattivato", il file di checkpoint e i file di log non verranno creati. Se JET_paramMaxTemporaryTables è impostato su zero, il file di database temporaneo non verrà creato. Questi file rappresentano il footprint su disco di un'istanza e devono essere gestiti con attenzione. Se questi file sono danneggiati singolarmente o rispetto l'uno all'altro, i dati archiviati nei database associati all'istanza potrebbero andare persi.

Quando il motore di database viene inizializzato con un set esistente di file di log delle transazioni, tali file verranno controllati per verificare se l'incarnazione precedente dell'istanza ha subito un arresto anomalo. Se viene rilevato un arresto anomalo del sistema, il ripristino di arresto anomalo verrà eseguito automaticamente. Questo processo ricostruirà i database collegati all'istanza durante l'incarnazione precedente del motore e salva le modifiche ai file di database. Il risultato sarà database coerenti con la transazione. È possibile che questo processo richiede molto tempo se il numero di file di log delle transazioni da riprodurre nei database è di grandi dimensioni.

A causa del fatto che JetInit esegue il ripristino di arresto anomalo del sistema, è possibile che venga restituito quasi qualsiasi errore del motore di database in caso di errore. In pratica, la maggior parte degli errori riscontrati nella distribuzione rientra in due categorie: danneggiamento dei dati e gestione errata dei file. Il danneggiamento dei dati si manifesterà più spesso negli errori seguenti o simili:

  • Jet_errreadverifyfailure

  • JET_errLogFileCorrupt

  • JET_errCheckpointCorrupt

Questi errori sono quasi sempre causati da problemi hardware e pertanto non possono essere evitati. La gestione errata del file si manifesterà più spesso negli errori seguenti o simili:

  • JET_errMissingLogFile

  • JET_errAttachedDatabaseMismatch

  • JET_errDatabaseSharingViolation

  • JET_errInvalidLogSequence

Se il ripristino è in esecuzione in un set di log, per cui non tutti i database sono presenti (che restituirà l'errore JET_errAttachedDatabaseMismatch in circostanze normali) e il client desidera continuare nonostante i database mancanti, è possibile usare il JET_ bitReplayIgnoreMissingDB per continuare il ripristino per i database disponibili. Questi errori sono evitabili dall'applicazione. L'applicazione deve prestare attenzione a proteggere il repository di questi file dalla manipolazione da forze esterne, ad esempio l'utente o altre applicazioni. Se l'applicazione desidera eliminare completamente un'istanza, tutti i file associati all'istanza devono essere eliminati. Sono inclusi il file del checkpoint, i file di log delle transazioni e tutti i file di database collegati all'istanza di .

La funzione JetInit si comporta in modo diverso rispetto ai file di database collegati all'istanza, tra Windows 2000 e versioni successive.

Windows 2000: In Windows 2000, qualsiasi database collegato all'istanza durante un'incarnazione precedente di tale istanza rimane collegato all'istanza dopo il completamento di JetInit . Non è necessario chiamare JetAttachDatabase dopo JetInit per garantire l'accesso al database successivo. Se la funzione JetAttachDatabase viene chiamata dopo la funzione JetInit , verrà restituito l'avviso JET_wrnDatabaseAttached. Questo avviso indica che l'allegato del database è stato mantenuto e può essere ignorato.

Windows XP: In Windows XP e versioni successive tutti i database vengono scollegati automaticamente dall'istanza di JetInit. Ciò significa che JetAttachDatabase deve essere sempre chiamato dopo JetInit in questo caso.

Qualsiasi applicazione scritta per l'esecuzione in Windows 2000 e nelle versioni successive deve sempre chiamare JetAttachDatabase dopo JetInit. Se l'applicazione viene eseguita in Windows 2000, deve aspettarsi di visualizzare JET_wrnDatabaseAttached in alcuni casi. Per altre informazioni, vedere JetAttachDatabase .

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.

Vedere anche

File del motore di archiviazione estendibile
JET_ERR
JET_GRBIT
JET_INSTANCE
JET_paramMaxTemporaryTables
JET_paramRecovery
JetAttachDatabase
JetCreateInstance
JetInit3
JetSetSystemParameter