[firebase-br] RES: Meio OFF [SQLSERVER VS FIREBIRD ou ORACLE]
Davi Eduardo Borges Wall
davi.wall em mult.com.br
Sex Jun 8 14:16:49 -03 2007
Marco!!! Seguinte!!
A instrução (HINT) NOLOCK faz com que o Select se torne DirtyRead. E não é bem isso o que eu estou procurando. DirtyRead's trazem dados não commitados e conseqüentemente irreais.
Se alguém está interessado eu achei uma solução para o problema
somente para SQL SERVER 2005, é uma instrução nova. Provavelmente muita gente andou reclamando para MS e eles não agüentaram.
ALTER DATABASE XXX
SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE XXX
SET READ_COMMITTED_SNAPSHOT ON
READ COMMITED SNAPSHOT é uma extensão de isolation Level que compatibiliza
o READ COMMITED como nos outros Bancos.
Então o SQL SERVER não vai mais gerar locks.
Ele vai levar o registro em transação para um TEmpDB e após commitado
Então ele irá escrever o dado na base de dados propriamente dita.
Agora o problema continua as versões anteriores do SQL SERVER.
Fazer o que !
[]'s
Obrigado pela atenção.
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em nome de Marco A
Enviada em: sexta-feira, 8 de junho de 2007 12:40
Para: lista em firebase.com.br
Assunto: Re: [firebase-br] Meio OFF [SQLSERVER VS FIREBIRD ou ORACLE]
nunca tive este problema, mas sei que o sql tem a opcao NOLOCK justamente
para que o registro nao seja travado durante um select, ou seja independente
de commitar ou nao ele nao trava o registro e nao deixa de retornar o valor.
se vc nao usa esta clausula, ele tenta bloquear o registro enquanto lista.
provavelmente se ele ja estiver bloqueado, ele retorna mensagem de erro.
tenta ai tipo select * from tabela nolock .....
se falei bobagem tbm, me corrijam ! rsrs
"Davi Eduardo Borges Wall"
<davi.wall em mult.com.br> escreveu na mensagem
news:C675ACED260795429F251C2D0AA212AD4D88F4 em internetsrv.mult.com.br...
Olá amigos,
Tenho uma dúvida intrigante. Trabalho no desenvolvimento de uma aplicação
multibanco SQLSERVER, FIREBIRD, ORACLE.
A questão é a seguinte...
(utilizando ReadCommited)
Inicio uma transação, em uma tabela eu altero um registro da coluna
"DESCRICAO" de "TESTE" para "XXXX" e ainda não dei COMMIT.
Se em outra conexão eu efetuar um select desta tabela, o firebird e o oracle
me retornam o valor TESTE para este registro. (valor anterior ao inicio da
transação)
No SQL SERVER da LOCK!
Procurei na internet todo tipo de informação a respeito disto, e tudo indica
que este é o comportamento correto do SQLSERVER
nesta ocasião.
A minha questão é POR QUÊ? Porque o SQLSERVER faz uma barbaridade dessas?
Se eu quero somente ler dados "COMMITADOS" o que ta não está commitado na
faz diferença então pra que dar lock?
Pelo que percebi isto não tem solução, mas ainda estou muito curioso para
saber o que levou a microsoft a seguir este caminho, totalmente diferente de
outros SGDB's do mercado?
Se falei alguma besteira, por favor, me corrijam!
Qualquer dica é bem vinda, até mesmo o endereço de um grupo de discussão
SQLSERVER.
[]'s
Obrigado.
Davi Wall.
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista