Condividi tramite


Interfaccia ILog (txlogpub.h)

Fornisce funzionalità di registrazione generica a basso livello.

Common Log File System (CLFS), offre funzionalità che sono un superset di quello fornito da ILog.

Ereditarietà

L'interfaccia ILog eredita dall'interfaccia IUnknown . ILog include anche questi tipi di membri:

Metodi

L'interfaccia ILog include questi metodi.

 
ILog::AppendRecord

Scrivere un nuovo record alla fine del log.
ILog::Force

Forza il contenuto del log su disco, almeno fino all'LSN specificato.
ILog::GetLogLimits

Recupera informazioni sui limiti correnti del log.
ILog::ReadRecord

Leggere un record dal log.
ILog::ReadRecordPrefix

Legge una parte iniziale di un record dal log.
ILog::SetAccessPolicyHint

Fornisce un suggerimento all'implementazione del modello in cui verranno letti i record.
ILog::TruncatePrefix

Genera il prefisso specificato del log, rendendolo non più recuperabile.

Commenti

WAL è una tecnica usata da determinate applicazioni, ad esempio i sistemi di gestione dei database, per implementare transazioni atomiche e isolate. Questa tecnica implica la scrittura di record di modifiche alle risorse dell'applicazione in un log prima di apportare queste modifiche. In questo modo le modifiche possono essere ripristinate se sono necessarie, ad esempio se la transazione ha esito negativo o viene interrotta. Per consentire alle applicazioni di fornire transazioni affidabili contro le interruzioni, ad esempio l'arresto anomalo del sistema o l'errore di alimentazione, l'implementazione della registrazione deve fornire un metodo per forzare il log; ovvero, per assicurarsi che i record scritti in precedenza siano su disco prima di continuare.

La scrittura di record che usano ILog è un'operazione sequenziale; ovvero, i nuovi record vengono sempre aggiunti alla fine del log. Ogni record aggiunto al log viene assegnato un numero di sequenza di log (LSN), un identificatore numerico che può essere usato per recuperare il record in un secondo momento. Il tipo di dati LSN è un typedef per LARGE_INTEGER, un valore a 64 bit firmato; ILog usa tuttavia solo LSN con valori nonnegative. Inoltre, le reti LSN devono soddisfare le condizioni seguenti:

  • Le LSN aumentano monotonicamente; se il record B viene scritto nel log dopo il record A, l'LSN del record B deve essere maggiore dell'LSN del record A.
  • I valori di zero e MAXLSN (0x7FFFFFFFFFFFFFFF) non devono mai essere usati come LSN di un record, poiché hanno un significato speciale per alcuni dei metodi di ILog.
Oltre alle condizioni qui, nessun presupposto deve essere fatto sul modo in cui le reti LSN vengono assegnate da un'implementazione di ILog. In particolare, non è sicuro presupporre che i record verranno assegnati valori sequenziali per le reti LSN.

Dopo aver aggiunto un record al log, potrebbe non essere modificato. Tuttavia, quando i record scritti in precedenza non sono più necessari, ad esempio record di modifiche in una transazione già eseguita, ILog supporta il troncamento del log. In questo modo, lo spazio su disco usato per i record non essenziali può essere riutilizzato. Troncare il log consiste nell'eliminare tutti i record con un LSN minore di un valore specificato.

Come ottimizzazione delle prestazioni, alcune implementazioni di ILog possono eseguire il buffer dei record in memoria fino a quando il log non viene forzato. Se si tratta del caso, è necessario considerare il controllo degli errori e il ripristino. Considerare la situazione seguente:

  1. Il record A viene aggiunto al log, ma il log non è forzato. L'implementazione ILog copia il record in un buffer in memoria e restituisce un codice riuscito.
  2. Il record B viene aggiunto al log e l'implementazione ILog decide di forzare il log su disco. Si tratta del fatto che il chiamante ha chiesto al chiamante di essere forzato o perché il buffer di memoria è pieno. Tuttavia, l'operazione di scrittura ha esito negativo, ad esempio a causa di spazio su disco ridotto.
In questa situazione, sarebbe inappropriato per l'implementazione di ILog consentire l'aggiunta di record aggiuntivi al log, a meno che non possa garantire che tutti i record per cui ha restituito un codice di esito positivo vengano prima scritti su disco. Un possibile metodo di controllo degli errori consiste nel aggiungere il log in uno stato di errore quando si verifica questa situazione, consentendo in modo permanente la rimozione di scritture aggiuntive nell'istanza del log. I chiamanti che non forzano il log su disco per ogni record aggiunto devono comprendere che questa situazione può verificarsi e essere in grado di gestirla in modo appropriato.

Implementazione basata su file ILog

Il sistema operativo Windows offre un'implementazione basata su file di ILog, che consente di creare un log adatto per la registrazione in anticipo in un file. Il log usa un file come buffer circolare, che consente di riutilizzare lo spazio inutilizzato. Può anche aumentare le dimensioni del file che potrebbero essere necessarie per adattare record aggiuntivi quando il log è pieno. Le modifiche apportate al log vengono apportate in modo atomico, in modo che il contenuto del log possa essere recuperato dopo un arresto anomalo. Questa implementazione usa un buffer in memoria per l'aggiunta di record di log. Di conseguenza, i record non devono essere scritti su disco quando il metodo ILog::AppendRecord restituisce, a meno che il chiamante non richieda che il log venga forzato.

Usare il CLSID seguente per creare un'istanza di un log basato su file (vedere CoCreateInstance):

CLSID_SimpleFileBasedLog ({E16C0593-128F-11D1-97E4-00C04FB9618A} ).

L'implementazione basata su file di ILog supporta inoltre le interfacce IFileBasedLogInit e IPersistFile . Usare IFileBasedLogInit::InitNew per creare un nuovo file di log. Usare IPersistFile::Load per aprire un file di log esistente.

Questa implementazione usa un semplice criterio di controllo degli errori. Se uno dei metodi ha esito negativo a causa di un errore a livello di file system, che include un errore completo del disco, il log viene aggiunto in uno stato di errore. Ciò impedisce ai client di aggiungere record aggiuntivi al file o leggere i record potenzialmente non validi. Per continuare a usare il file di log, è necessario creare una nuova istanza del log.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione txlogpub.h

Vedi anche

IFileBasedLogInit