por Wagner Aparecido Miranda - W2R Consultoria e Sistemas Os Niveis de Isolamento (ou Transaction Isolation Level, do Ingles) nao sao apenastransacoes criadas para validar se um processamento gerou erro ou nao. Vejomuita gente usando somente o BEGIN TRAN e COMMIT/ROLLBACK pensando que estaousando transacoes de forma correta, afinal, se der algum problema durante oprocessamento ele pode voltar com um ROLLBACK e tudo estara tudo como antes.Bom, olhar somente por essa otica podeestar errado, justamente pelo fato do Isolation Level ter causas/efeitos maisprofundos do que somente garantir que a transacao que esta rodando no momentode erro ou nao.Vale lembrar que o SQL Server e um SGBDque implementa o conceito de ACID(Atomicidade, Consistencia, Isolamento e Durabilidade) eos niveis de isolamento atuam diretamente neste conceito. Outra coisa que e bomlembrar e que os niveis de isolamento impactam diretamente na quantidade de LOCKs e WAITs geradosno SQL.Por padrao, o SQL Server tem oIsolation Level configurado para READ COMMITED. Issopode ser confirmado rodando esta linha de codigo abaixo, e encontrando o resultadode ISOLATION LEVEL.DBCC USEROPTIONSPara exemplificar estas explicacoes,abra uma conexao com o SQL Server e execute o codigo abaixo. Ele ira criar umdatabase e duas tabelas com alguns dados, onde serao explicados os tipos deisolamentos e de quebra um exemplo de dead lock.CREATE DROP DATABASE dbNogareGOUSE dbNogareGOCREATE TABLE tbIsolationLevel( Id INT IDENTITY, Col1 varchar(10), Col2 varchar(10), Col3 varchar(10))GOINSERT INTOtbIsolationLevel(Col1,Col2,Col3)VALUES ('AAAAA','BBBBB','CCCCC')GO 5CREATE TABLE tbDeadlock ( id INT)GOINSERT INTO tbDeadlock(ID) values (1),(2)GOQuando alteramos o nivel de isolamento,ele e aplicado a conexao que o alterou. Se voce abrir uma nova conexao com oSQL Server e verificar qual e o nivel de isolamento desta transacao, voce veraque voltou para o padrao. Read Committed.O READ COMMITTED nosgarante uma leitura somente do que ja esta comitado no banco, isso e, garanteque o dado que esta sendo lido foi realmente escrito no banco e nao e umaleitura suja ou fantasma, causado por alguma outra transacao. Pelo fato dele soler as informacoes realmente escritas no banco, se uma outra transacao estivertrabalhando com a tabela que voce quer ler, o SQL ira esperar a transacaoliberar a tabela para entao fazer a leitura. Isso gera LOCK (pela outra transacao)e WAIT (pela sua).Para entender na pratica esse tipo deisolamento, abra duas conexoes diferentes com a tabela tbNogare e execute oprimeiro bloco de codigo em uma delas, e o segundo bloco na segunda conexao.Apos iniciar a execucao do primeiro, va ate a segunda conexao e execute emsimultaneo, deixando ambas rodando. Voce ira ver o SQL Server terminar deexecutar a primeira transacao para entao iniciar a segunda./********* RODAR NA CONEXAO 1 *********/BEGIN TRAN UPDATE tbIsolationLevel set Col1 = 'DDDDD' where id = 1 WAITFOR DELAY '00:00:10'ROLLBACK TRAN/********* RODAR NA CONEXAO 2 *********/SET TRANSACTION ISOLATION LEVEL READ COMMITTEDSELECT * FROM tbIsolationLevelO READ UNCOMMITTED evitaque o SQL Server de um LOCK na tabelade leitura por causa de uma transacao, isso faz com que tambem nao gere um WAIT em outra transacao. Porem, este processopermite uma leitura suja dos dados,entregando a informacao errada em algunscenarios. Quando se utiliza este nivel de isolamento, e possivel ler os dadosde uma tabela mesmo ela sendo