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.
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:
- 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.
- 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.
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 |