Eu adiciono a leitura confirmada após SET TRANSACTION ISOLATION LEVEL SERIALIZABLE?

9

Dentro de um procedimento armazenado, tenho o seguinte: (sql server 2008)

 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
 BEGIN TRANSACTION getStuff
 BEGIN TRY 
    /*  some selects, updates, etc, etc. */
    ....
    COMMIT TRANSACTION getStuff
 END TRY
 BEGIN CATCH 
   ...
 END CATCH

Como isso é baseado em transações, pensei que o restante das conexões com o banco de dados não será afetado pelo SERIALIZABLE.

Preciso definir implicitamente o nível de isolamento para ler confirmado após minha confirmação? Isso afetará negativamente outras conexões entre meu servidor de aplicativos e o servidor de banco de dados?

CFNinja
fonte

Respostas:

6

O comando é TRANSACTION ISOLATION LEVELnão SERVER ISOLATION LEVEL. Ele altera apenas o nível de isolamento do escopo da transação.

Erik Darling
fonte
5

Não, você não precisa definir implicitamente o nível de isolamento novamente para ler confirmado.

De livros online .

Se você emitir SET TRANSACTION ISOLATION LEVEL em um procedimento ou gatilho armazenado, quando o objeto retornar controlar, o nível de isolamento será redefinido para o nível em vigor quando o objeto foi chamado. Por exemplo, se você definir REPEATABLE READ em um lote, e o lote chamar um procedimento armazenado que defina o nível de isolamento para SERIALIZABLE, a configuração do nível de isolamento será revertida para REPEATABLE READ quando o procedimento armazenado retornar o controle para o lote.

SqlWorldWide
fonte
3

O comando que você postou apenas executa a transação no SP com TRANSACTION ISOLATION LEVEL SERIALIZABLE. Outras conexões serão padronizadas para o nível de isolamento padrão - leitura confirmada (a menos que especificado explicitamente um nível de isolamento diferente).

Há uma excelente série de Paul White - Níveis de isolamento do SQL Server: uma série que o ajudará a entender em profundidade o que os diferentes níveis de isolamento significam e fazem quando são usados.

Kin Shah
fonte
-3

Um algoritmo relativamente novo que evita a maioria das desvantagens das abordagens anteriores. Ele usa uma abordagem otimista, permitindo que as transações continuem sem bloquear. Quando uma transação deseja confirmar, ela é verificada e abortada se a execução não tiver sido serializada. Mais detalhes de todas as abordagens de aplicativos em: http://writeulearn.com/relational-database-transactions/

cccc
fonte
Isso não parece ser uma resposta para a pergunta ....
RDFozz