Partilhar via


Habilitando níveis de isolamento baseados em controle de versão de linha

Os administradores de banco de dados controlam as configurações no nível de banco de dados para controle de versão de linha usando as opções de banco de dados READ_COMMITTED_SNAPSHOT e ALLOW_SNAPSHOT_ISOLATION na instrução ALTER DATABASE.

Quando a opção de banco de dados READ_COMMITTED_SNAPSHOT está definida como ON, são ativados os mecanismos usados para oferece suporte à opção imediatamente. Ao definir a opção READ_COMMITTED_SNAPSHOT, só a conexão que executa o comando ALTER DATABASE é permitida no banco de dados. Não deve haver nenhuma outra conexão aberta no banco de dados até que ALTER DATABASE esteja concluído. O banco de dados não precisa estar no modo do usuário único.

A seguinte instrução Transact-SQL habilita READ_COMMITTED_SNAPSHOT:

ALTER DATABASE AdventureWorks
    SET READ_COMMITTED_SNAPSHOT ON;

Quando a opção banco de dados ALLOW_SNAPSHOT_ISOLATION está definida como ON, a instância do MicrosoftMecanismo de Banco de Dados do SQL Server não gera versões de linhas para os dados modificados até que todas as transações ativas que modificaram os dados no banco de dados estejam concluídas. Se houver transações de modificação ativas, o SQL Server definirá o estado da opção como PENDING_ON. Depois que todas as modificações de transações estiverem concluídas, o estado da opção é alterado para ON. Os usuários não podem iniciar uma transação de instantâneo nesse banco de dados até que a opção esteja completamente ON. O banco de dados passa por um estado de PENDING_OFF quando o administrador de banco de dados define a opção ALLOW_SNAPSHOT_ISOLATION como OFF.

A instrução Transact-SQL a seguir habilitará ALLOW_SNAPSHOT_ISOLATION:

ALTER DATABASE AdventureWorks
    SET ALLOW_SNAPSHOT_ISOLATION ON;

A tabela a seguir relaciona e descreve os estados da opção ALLOW_SNAPSHOT_ISOLATION. Usar a opção ALTER DATABASE com a opção ALLOW_SNAPSHOT_ISOLATION não bloqueará os usuários que estiverem acessando os dados do banco de dados no momento.

Estado da estrutura de isolamento de instantâneo para banco de dados atual

Descrição

OFF

O suporte para as transações de isolamento de instantâneo não está ativado. Não é permitida nenhuma transação de isolamento de instantâneo.

PENDING_ON

O suporte para as transações de isolamento de instantâneo está em estado de transição (de OFF para ON). As transações abertas precisam ser concluídas.

Não é permitida nenhuma transação de isolamento de instantâneo.

ON

O suporte para as transações de isolamento de instantâneo está ativado.

São permitidas transações de instantâneo.

PENDING_OFF

O suporte para as transações de isolamento de instantâneo está em estado de transição (de ON para OFF).

As transações de instantâneo iniciadas depois dessa hora não poderão acessar este banco de dados. Atualizar transações ainda paga o custo de controle de versão neste banco de dados. As transações de instantâneo existentes ainda podem acessar este banco de dados sem problemas. O estado PENDING_OFF não se torna OFF até que todas as transações de instantâneo, que estavam ativas quando o estado de isolamento de instantâneo do banco de dados estava em ON, forem concluídas.

Use as exibições do catálogo sys.databases para determinar o estado de ambas as opções do banco de dados de controle de versão de linha.

Todas as atualizações para tabelas de usuário e algumas tabelas do sistema armazenados no mestre e no msdb geram versões de linha.

A opção ALLOW_SNAPSHOT_ISOLATION é definida automaticamente como ON nos bancos de dados mestre e msdb e não pode ser desabilitada.

Os usuários não podem definir a opção READ_COMMITTED_SNAPSHOT como ON no mestre, no tempdbou no msdb.