Condividi tramite


Concetti di base di TxF

Isolamento di lettura

NTFS transazionale (TxF) offre coerenza con commit di lettura.

Un writer transazionato fa riferimento a un handle di file transazionato aperto con qualsiasi autorizzazione che non fa parte dell'accesso generico in lettura, ma fa parte dell'accesso in scrittura generico. Un writer transazionale visualizza la versione più recente di un file che include tutte le modifiche apportate dalla stessa transazione. Può essere presente un solo writer transacted per file. I writer non transazionati vengono sempre bloccati da un writer transazionato, anche se il file viene aperto con autorizzazioni di scrittura condivise.

Un lettore transazionato fa riferimento a un handle di file transazionato aperto con qualsiasi autorizzazione che fa parte dell'accesso generico in lettura, ma non fa parte dell'accesso in scrittura generico. Un lettore transazionato visualizza una versione commit del file esistente al momento dell'apertura dell'handle di file. Il lettore transazionato è isolato dagli effetti dei writer transazionati. In questo modo viene fornita una visualizzazione coerente del file solo per la durata dell'handle dei file e blocca i writer non transazionati.

Nota

Quando un handle è stato aperto per la modifica con la funzione CreateFileTransacted , tutte le successive apre il file all'interno di tale transazione, indipendentemente dalla lettura o meno, viene convertito dal sistema per essere un writer transazionale ai fini dell'isolamento e di altre semantiche transazionali. Ciò significa che successivamente, quando un handle viene aperto per l'accesso in sola lettura, l'handle non riceve una visualizzazione del file prima dell'inizio della transazione; riceve la visualizzazione delle transazioni attive del file.

Un handle di file non transazionale non visualizza modifiche apportate all'interno di una transazione fino al commit della transazione. L'handle di file non transazionale riceve una visualizzazione isolata simile a un lettore transazionale, ma a differenza di un lettore transazionale, riceve l'aggiornamento del file quando un writer transazionale esegue il commit della transazione.

Livelli di isolamento

TxF fornisce l'isolamento read-commit. Ciò significa che gli aggiornamenti dei file non vengono visualizzati all'esterno della transazione. Inoltre, se un file viene aperto più di una volta durante la lettura dei file all'interno della transazione, potrebbero essere visualizzati risultati diversi con ogni apertura successiva. I file disponibili per la prima volta a cui è stato eseguito l'accesso potrebbero non essere disponibili (perché sono stati eliminati) o viceversa.

Blocco transazionale

La creazione di un writer transacted in un file blocca in modo transazionale il file. Dopo che un file è bloccato da una transazione, altre operazioni del file system esterne alla transazione di blocco che tentano di modificare il file bloccato in modo transazionale avranno esito negativo con ERROR_SHARING_VIOLATION o ERROR_TRANSACTIONAL_CONFLICT.

La tabella seguente riepiloga il blocco transazionale.

File attualmente aperto da

Tentativo di apertura del file da parte di

Con transazione eseguita

Non transazioni

Reader

Lettore/Writer

Reader

Lettore/Writer

Lettore transacted

No2

Lettore/writer transacted

No2

No2

Lettore non transazionato

Lettore/writer non transacted

No1

No1

  1. Ha esito negativo con ERROR_TRANSACTIONAL_CONFLICT
    2. Errore con ERROR_SHARING_VIOLATION

Se si apre un flusso denominato per una modifica che usa una transazione, è necessario bloccare l'intero file.

Oltre al blocco transazionale, si applicano le regole di condivisione file NTFS tipiche.

È necessario considerare le due modalità di condivisione file seguenti in parallelo:

  • Modalità di blocco transazionale.
  • Normali modalità di condivisione file.

La modalità più restrittiva è quella che si applica.