Conceitos básicos do TxF
Isolamento de leitura
O TxF (NTFS transacional) fornece consistência confirmada por leitura.
Um gravador transacionado refere-se a um identificador de arquivo transacionado aberto com qualquer permissão que não faça parte do acesso de leitura genérico, mas que faz parte do acesso de gravação genérico. Um gravador transacionado exibe a versão mais recente de um arquivo que inclui todas as alterações pela mesma transação. Pode haver apenas um gravador transacionado por arquivo. Gravadores não transacionados são sempre bloqueados por um gravador transacionado, mesmo que o arquivo seja aberto com permissões de gravação compartilhada.
Um leitor transacionado refere-se a um identificador de arquivo transacionado aberto com qualquer permissão que faça parte do acesso de leitura genérico, mas não faça parte do acesso de gravação genérico. Um leitor transacionado exibe uma versão confirmada do arquivo que existia no momento em que o identificador de arquivo foi aberto. O leitor transacionado é isolado dos efeitos dos gravadores transacionados. Isso fornece uma exibição consistente do arquivo somente durante a vida útil do identificador de arquivo e bloqueia gravadores não transacionados.
Observação
Quando um identificador é aberto para modificação com a função CreateFileTransacted, todas as aberturas subsequentes do arquivo dentro dessa transação são convertidas somente leitura ou não pelo sistema para ser um gravador transacionado para fins de isolamento e outras semânticas transacionais. Isso significa que, posteriormente, quando um identificador é aberto para acesso somente leitura, o identificador não recebe uma exibição do arquivo antes do início da transação; ele recebe a exibição de transação ativa do arquivo.
Um identificador de arquivo não transacionado não vê nenhuma alteração feita em uma transação até que a transação seja confirmada. O identificador de arquivo não transacionado recebe uma exibição isolada semelhante a um leitor transacionado, mas ao contrário de um leitor transacionado, ele recebe a atualização de arquivo quando um gravador transacionado confirma a transação.
Níveis de isolamento
O TxF fornece isolamento de leitura confirmada. Isso significa que as atualizações de arquivo não são vistas fora da transação. Além disso, se um arquivo for aberto mais de uma vez durante a leitura de arquivos dentro da transação, você poderá ver resultados diferentes a cada abertura subsequente. Os arquivos que estavam disponíveis na primeira vez que você os acessou podem não estar disponíveis (porque foram excluídos) ou vice-versa.
Bloqueio transacional
A criação de um gravador transacionado em um arquivo bloqueia transacionalmente o arquivo. Depois que um arquivo é bloqueado por uma transação, outras operações do sistema de arquivos externas à transação de bloqueio que tentam modificar o arquivo bloqueado transacional falharão com ERROR_SHARING_VIOLATION ou ERROR_TRANSACTIONAL_CONFLICT.
A tabela a seguir resume o bloqueio transacional.
Arquivo atualmente aberto por
Tentativa de abertura de arquivo
Transacionado
Não transacionado
Leitor
Leitor/Gravador
Leitor
Leitor/Gravador
Leitor Transacionado
Sim
Sim
Sim
Não2
Leitor/Gravador Transacionado
Sim
Não2
Sim
Não2
Leitor não transacionado
Sim
Sim
Sim
Sim
Leitor/gravador não transacionado
Nº 1
Nº 1
Sim
Sim
- Falha com ERROR_TRANSACTIONAL_CONFLICT
2. Falha com ERROR_SHARING_VIOLATION
Se você abrir um fluxo nomeado para uma modificação que esteja usando uma transação, todo o arquivo precisará ser bloqueado.
Além do bloqueio transacional, as regras típicas de compartilhamento de arquivos NTFS se aplicam.
Você precisa considerar os dois modos de compartilhamento de arquivos a seguir em paralelo:
- O modo de bloqueio transacional.
- Modos normais de compartilhamento de arquivos.
Qualquer modo mais restritivo é aquele que se aplica.