LOGIN:

iMasters | Por uma internet mais criativa e dinâmica

Feeds

SQL Server

Feed da seção SQL Server

Newsletter de SQL Server


Segunda-feira, 23/07/2001 - 01:59 - Por Mauro Pichiliani
Seções relacionadas:

Transações no SQL Server

Galera, na coluna da semana passada eu citei o uso de transações em Stored Procedures para poder ‘voltar’ os dados em caso de problemas. Esta semana vou me aprofundar um pouco no assunto.

Bom, pensem em transações como se fossem compras. Quando vamos a uma loja, damos o dinheiro e obtemos uma mercadoria. Se obtemos uma mercadoria com problema, ou recebemos nosso dinheiro de volta ou outra mercadoria sem o problema.

As transações no SQL Server seguem este mesmo princípio. Ou você tem todos os seus dados íntegros e consistentes no seu banco, ou não tem dado nenhum. Este tipo de transação também é chamado de two phase commit (commit de duas fases, pois ou tem os dados, ou não tem nada).

Agora, só mais um detalhe. Existem vários níveis de implementação de transação. Por exemplo, no ASP podemos utilizar alguns comandos do ADO (ActiveX Data Objects) para fazer transação. Mas se pensarmos em componentes , podemos utilizar ainda o MTS (Microsoft Transaction Server) para fazer as trasanções para componentes. Vou falar hoje um pouco sobre as transações simples no SQL Server. Existem ainda as transações distribuídas, mas isto fica para uma próxima coluna.

Basicamente as transações no SQL Server são feitas utilizando três comando: BEGIN TRANSACTION, COMMIT e ROLLBACK. Abaixo um exemplo de código utilizando uma transação:

BEGIN TRANSACTION
UPDATE TABELA1 SET CAMPO1 = ‘NOVO VALOR’
WHERE CAMPO2 = 35
IF @@ERROR <> 0
ROLLBACK
ELSE
COMMIT

Perceba que no exemplo acima , iniciamos a transação com o BEGIN TRANSACTION. Vamos supor que a tabela possua 5000 registros que satisfaçam a condição e que por algum motivo transcendente mediúnico, no registro 4628 houve um problema. Neste caso, a variável do SQL Server chamada @@ERROR vai guardar o código do erro, o comando ROLLBACK será executado e os 4628 registros já atulizados serão automaticamente voltados ao seu estado anterior. Alternativamente, se tudo correr bem , o comando COMMIT é executado e todos os 5000 registros que atenderam à condição serão atualizados com êxito.

Só um detalhe quanto aos comandos ROLLBACK e COMMIT.Sem nomear uma transação , o uso do TRANSACTION é opcional. Ou seja:

ROLLBACK tem o mesmo funcionamento de ROLLBACK TRANSACTION

COMMIT tem o mesmo funcionamento de COMMIT TRANSACTION
quando não colocamos nomes na transação.

Mas não se esqueça que BEGIN TRANSACTION não tem o mesmo funcionamento de BEGIN.

Agora, algumas dicas interessantes quanto ao uso de transações:

1. Mantenha transações curtas, ou seja, não coloque muitas instruções SQL entre o BEGIN TRANSACTION e o COMMIT. Apesar de outros usuários enxergarem os dados de uma transação que ainda não fez o COMMIT, os dados ficam gravados no SQL dentro do arquivo de Transaction Log (geralmente com a extensão .ldf)

2. Vamos supor que alguém resolva utilizar a mesma tomada do computador servidor em que o SQL Server está rodando para ligar uma cafeiteira , quando uma transação foi iniciada mais ainda não fez o COMMIT. Neste caso , quando o serviço do SQL Server foi reiniciado , todas as transações que ainda não executaram o COMMIT voltarão ao seu estado inicial antes do BEGIN TRANSACTION.

3. Procure sempre dar nomes as transações.Isso obriga o utilização do TRANSACTION no COMMIT e no ROLLBACK. Exemplo:

BEGIN TRANSACTION TRAN_01
DELETE FROM TABELA1
IF @@ERROR <> 0
ROLLBACK TRANSACTION TRAN_01
ELSE
COMMIT TRANSACTION TRAN_01

4) Encadeamento de transações são permitidos. Para ver em que nível de transação você está , utilize a variável @@TRANCOUNT

Abraço!

Todos os artigos de Mauro Pichiliani

5 comentários publicados

  • 1. COMMIT

    Segunda-feira, 01/08/2005, por Rogério Alexandre Machado Carr

    É possivel que um comit de uma Proc interfira nos TRANSACTIONS de outras que estão em execução no mesmo momente através de um programa chamador

    Responder comentário
  • 2. Reforçando o comentario acima

    Segunda-feira, 01/08/2005, por Rogério Alexandre Machado Carr

    É possivel ?
    Utilizo o Sybase E agluem do meu Depto comentou que isso já ocorreu .
    de um COMMIT fechar todos os Transactions que estão abertos no mesmo momento

    Responder comentário
  • 3. Reforçando o comentario acima

    Segunda-feira, 01/08/2005, por Rogério Alexandre Machado Carr

    É possivel ?
    Utilizo o Sybase E agluem do meu Depto comentou que isso já ocorreu .
    de um COMMIT fechar todos os Transactions que estão abertos no mesmo momento

    Responder comentário
  • 4. Reforçando o comentario acima

    Segunda-feira, 01/08/2005, por Rogério Alexandre Machado Carr

    É possivel ?
    Utilizo o Sybase E agluem do meu Depto comentou que isso já ocorreu .
    de um COMMIT fechar todos os Transactions que estão abertos no mesmo momento

    Responder comentário
  • 5. Excelente artigo

    Quinta-feira, 25/08/2005, por eduardo castro

    Finalmente percebi o que era transacções em Sql. Simples e eficaz. Muito bom Mauro.

    Responder comentário

Poste um comentário


Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.

Sobre o autor

Mauro Pichiliani é mestre em computação, possui as certificações MCP, MCDBA, MCT e MCTS e atua como consultor de banco de dados com enfoque na área de tunning.


Indique para um amigo

captcha

TI SHOP Produtos iMasters

  • Lançamento: CD-ROM Treinamento Aplicado de SQL - Lançamento! Treinamento Aplicado de SQL - Aprenda a trabalhar com SQL com bancos de dados Oracle e SQL Server. São mais de 100 tópicos explicados por Mauro Pichilliani, um articulistas mais lidos do iMasters. Aproveite! Apenas R$ 69,90 no TI SHOP.
  • Lançamento: Livro iMasters "O Encontro de 2 Mundos"- Este livro conta com 56 crônicas de profissionais mais admirados e influentes do mercado brasileiro de Internet. Aproveite o preço especial para leitores do iMasters. Apenas R$ 40,00 e envio imediato!
  • DVD Curso Completo de Photoshop - Do conceito à finalização Lançamento! Curso Completo de Photoshop, em DVD, com mais de 230 aulas dividas em 4 módulos: conceito, básico, avançado e finalização. Apenas R$ 69,50 no TI SHOP - Frete com 50% de desconto
  • DVD Javascript Starter - Curso Completo Com mais de 9 horas de vídeo-aulas, é um curso completo sobre Javascript. Ideal para quem deseja aprender a linguagem. Apenas R$ 64,90 no TI SHOP - Frete com 50% de desconto!

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.