Vous êtes sur la page 1sur 12

TRABALHO SOBRE TRANSAO

Transao
um conjunto de procedimentos que executado num banco de dados, que para o usurio visto como uma nica ao. A integridade de uma transao depende de 4 propriedades, conhecidas como ACID. Atomicidade Todas as aes que compem a unidade de trabalho da transao devem ser concludas com sucesso, para que seja efetivada. Se durante a transao qualquer ao que constitui unidade de trabalho falhar, a transao inteira deve ser desfeita (rollback). Quando todas as aes so efetuadas com sucesso, a transao pode ser efetivada e persistida em banco (commit). Consistncia Todas as regras e restries definidas no banco de dados devem ser obedecidas. Relacionamentos por chaves estrangeiras, checagem de valores para campos restritos ou nicos devem ser obedecidos para que uma transao possa ser completada com sucesso. Isolamento Cada transao funciona completamente parte de outras estaes. Todas as operaes so parte de uma transao nica. O principio que nenhuma outra transao, operando no mesmo sistema, possa interferir no funcionamento da transao corrente( um mecanismo de controle). Outras transaes no podem visualizar os resultados parciais das operaes de uma transao em andamento (ainda em respeito propriedade da atomicidade). Durabilidade Significa que os resultados de uma transao so permanentes e podem ser desfeitos somente por uma transao subseqente.Por exemplo: todos os dados e status relativos a uma transao devem ser armazenados num repositrio permanente, no sendo passveis de falha por uma falha de hardware. Na prtica, alguns SGBDs relaxam na implementao destas propriedades buscando desempenho. Controle de concorrncia um mtodo usado para garantir que as transaes sejam executadas de uma forma segura e sigam as regras ACID. Os SGBD devem ser capazes de assegurar que nenhuma ao de transaes completadas com sucesso (committed transactions) seja perdida ao desfazer transaes abortadas (rollback). Uma transao uma unidade que preserva consistncia. Requeremos, portanto, que qualquer escalonamento produzido ao se processar um conjunto de transaes concorrentemente seja computacionalmente equivalente a um escalonamento produzindo executando essas transaes serialmente em alguma ordem. Diz-se que um sistema que garante esta propriedade assegura aseriabilidade.

(ACESSADO: 16/08/2012 - http://pt.wikipedia.org/wiki/Banco_de_dados )

o uma seqncia de operaes executadas como uma nica unidade lgica de trabalho. Uma unidade lgica de trabalho deve mostrar quatro propriedades, designadas pelas iniciais

ACID (atomicidade, consistncia, isolamento e durabilidade), para que seja qualificada como uma transao. Atomicidade Uma transao deve ser uma unidade atmica de trabalho; ou todas as suas modificaes de dados so executadas ou nenhuma delas executada. Consistncia Quando concluda, uma transao deve deixar todos os dados em um estado consistente. Em um banco de dados relacional, todas as regras devem ser aplicadas s modificaes da transao para manter toda a integridade dos dados. Todas as estruturas de dados internas, tais como ndices em rvore B ou listas duplamente vinculadas, devem estar corretas ao trmino da transao. Isolamento Modificaes feitas por transaes simultneas devem ser isoladas das modificaes feitas por qualquer outra transao simultnea. Uma transao reconhece os dados no estado em que estavam antes de outra transao simultnea t-los modificado ou reconhece os dados depois que a segunda transao tiver sido concluda, mas no reconhece um estado intermedirio. Isso chamado serializabilidade porque resulta na capacidade de recarregar os dados iniciais e reexecutar uma srie de transaes de modo que os dados obtidos estejam no mesmo estado em que estavam depois que as transaes originais foram executadas. Durabilidade Depois que uma transao tiver sido concluda, seus efeitos ficam permanentemente no sistema. As modificaes persistem at mesmo no caso de uma queda do sistema.

Especificando e impondo transaes


Os programadores SQL so responsveis por iniciar e terminar transaes em pontos que imponham a consistncia lgica dos dados. O programador deve definir a seqncia de modificaes de dados que deixem os dados em um estado consistente em relao s regras comerciais da organizao. O programador inclui essas instrues de modificao em uma nica transao de modo que o Mecanismo de banco de dados do SQL Server possa aplicar a integridade fsica da transao. de responsabilidade de um sistema de banco de dados empresarial, tal como uma instncia do Mecanismo de Banco de Dados, oferecer mecanismos que assegurem a integridade fsica de cada transao. O Mecanismo de Banco de Dados oferece: Recursos de bloqueio que preservam o isolamento da transao. Recursos de log que garantem a durabilidade da transao. Mesmo se o hardware do servidor, o sistema operacional ou a instncia do Mecanismo de Banco de Dados falharem, a instncia usa os logs da transao ao reinicializar para reverter automaticamente qualquer transao incompleta at o ponto da falha do sistema. Recursos de administrao de transao que impem a atomicidade e a consistncia da transao. Depois que uma transao tiver sido iniciada, ela deve ser concluda com xito ou a instncia do Mecanismo de Banco de Dados desfar todas as modificaes de dados feitas desde que a transao foi iniciada.

Consulte tambm

Conceitos
Controlando transaes (Mecanismo de Banco de Dados) Transaes explcitas Transaes de confirmao automtica Transaes implcitas Transaes distribudas (Mecanismo de Banco de Dados) Tpicos de transaes avanadas

Controlando transaes (Mecanismo de Banco de Dados)


SQL Server 2008 R2 Os aplicativos controlam transaes principalmente ao especificar quando uma transao comea e termina. Isso pode ser especificado pelo uso de instrues Transact-SQL ou funes de interface de programao de aplicativo (API) de banco de dados. O sistema tambm deve ser capaz de processar corretamente os erros que encerram uma transao antes de sua concluso. Por padro, as transaes so gerenciadas no nvel de conexo. Quando uma transao iniciada em uma conexo, todas as instrues Transact-SQL executadas nessa conexo fazem parte da transao at a concluso da transao. Porm, em uma sesso de vrios conjuntos de resultados ativos (MARS), uma transao Transact-SQL explcita ou implcita se torna uma transao no escopo do lote gerenciada no nvel do lote. Quando o lote for concludo, se a transao no escopo do lote no for confirmada ou revertida, ela ser revertida automaticamente pelo SQL Server.

Iniciando transaes
Ao usar funes de API e instrues Transact-SQL, voc pode iniciar transaes em uma instncia do Mecanismo de banco de dados do SQL Server como transaes explcitas, autoconfirmadas ou implcitas. Em uma sesso de MARS, as transaes explcitas e implcitas do Transact-SQL se tornam transaes no escopo do lote. Transaes explcitas Inicie uma transao explicitamente por uma funo de API ou emitindo a instruo Transact-SQL BEGIN TRANSACTION. Transaes de confirmao automtica O modo padro do Mecanismo de Banco de Dados. Cada instruo Transact-SQL individual confirmada na concluso. Voc no precisa especificar nenhuma instruo para controlar transaes. Transaes implcitas Defina o modo de transao implcito como ativado por uma funo de API ou pela instruo Transact-SQL SET IMPLICIT_TRANSACTIONS ON. A prxima instruo inicia uma nova transao automaticamente. Quando essa transao concluda, a prxima instruo Transact-SQL inicia uma nova transao. Transaes no escopo do lote Aplicvel apenas a vrios conjuntos de resultados ativos (MARS), uma transao TransactSQL explcita ou implcita iniciada em uma sesso MARS se torna uma transao no escopo do lote. Uma transao no escopo do lote no confirmada ou revertida quando um lote concludo revertida automaticamente pelo SQL Server. Os modos de transao so gerenciados no nvel de conexo. Se uma conexo for alterada de um modo de transao para outro, isso no ter nenhum efeito nos modos de transao de qualquer outra conexo.

Finalizando transaes
Voc pode finalizar transaes com uma instruo COMMIT ou ROLLBACK ou por uma funo de API. COMMIT Se uma transao for concluda com xito, confirme-a. Uma instruo COMMIT garante que todas as modificaes na transao fazem parte permanente do banco de dados. Um COMMIT tambm libera recursos, como bloqueios, usados pela transao. ROLLBACK Se ocorrer um erro em uma transao ou se o usurio decidir cancel-la, reverta a transao. Uma instruo ROLLBACK desfaz todas as modificaes feitas na transao retornando os dados ao estado anterior ao incio da transao. Um ROLLBACK tambm libera recursos usados pela transao.

Observao
Em conexes habilitadas para oferecer suporte a vrios conjuntos de resultados ativos (MARS), uma transao explcita iniciada por uma funo de API no pode ser confirmada enquanto houver solicitaes pendentes para execuo. Qualquer tentativa de confirmao

desse tipo de transao enquanto houver operaes pendentes sendo executadas resultar em um erro.

Especificando os limites da transao


Voc pode identificar quando as transaes Mecanismo de Banco de Dados so iniciadas e finalizadas com instrues Transact-SQL ou funes e mtodos de API. Instrues Transact-SQL Use as instrues BEGIN TRANSACTION, COMMIT TRANSACTION, COMMIT WORK, ROLLBACK TRANSACTION, ROLLBACK WORK e SET IMPLICIT_TRANSACTIONS para delinear transaes. Elas so usadas principalmente em aplicativos DB-Library e em scripts Transact-SQL, como os scripts executados usando o utilitrio de prompt de comando osql. Funes e mtodos de API As APIs de banco de dados como ODBC, OLE DB, ADO e o namespace do SQLClient do .NET Framework contm funes ou mtodos usados para delinear transaes. Elas so os mecanismos principais usados para controlar transaes em um aplicativo Mecanismo de Banco de Dados. Cada transao deve ser gerenciada por apenas um desses mtodos. Usar ambos os mtodos na mesma transao pode levar a resultados indefinidos. Por exemplo, voc no deve iniciar uma transao usando as funes de API ODBC e, depois, usar a instruo COMMIT do Transact-SQL para concluir a transao. Isso no notificaria o driver ODBC SQL Server de que a transao est confirmada. Nesse caso, use a funo SQLEndTran de ODBC para finalizar a transao.

Erros durante o processamento de transaes


Se um erro impedir a concluso bem-sucedida de uma transao, o SQL Server reverter automaticamente a transao e liberar todos os recursos usados por ela. Se a conexo de rede do cliente com uma instncia do Mecanismo de Banco de Dados for interrompida, quaisquer transaes pendentes para a conexo sero revertidas quando a rede notificar a instncia sobre a interrupo. Se o aplicativo cliente falhar ou se o computador cliente for desligado ou reiniciado, isso tambm interromper a conexo e a instncia do Mecanismo de Banco de Dados reverter quaisquer conexes pendentes quando a rede notificar a interrupo. Se o cliente fizer logoff do aplicativo, quaisquer transaes pendentes sero revertidas. Se ocorrer um erro de instruo de tempo de execuo (como uma violao de restrio) em um lote, o comportamento padro no Mecanismo de Banco de Dados ser reverter somente a instruo que gerou o erro. Voc pode alterar esse comportamento usando a instruo SET XACT_ABORT. Depois que SET XACT_ABORT ON for executada, qualquer erro de instruo em tempo de execuo far com que a transao atual seja revertida. Os erros de compilao, como erros de sintaxe, no so afetados por SET XACT_ABORT. Para obter mais informaes, consulte SET XACT_ABORT (Transact-SQL). Quando ocorrerem erros, a ao corretiva (COMMIT ou ROLLBACK) dever ser includa em um cdigo de aplicativo. Uma ferramenta eficiente para processar erros, inclusive aqueles em transaes, a construo TRY...CATCH Transact-SQL. Para obter mais informaes

com exemplos que incluem transaes, consulte Usando TRY...CATCH na Transact-SQL e TRY...CATCH (Transact-SQL).

Transaes explcitas
SQL Server 2008 R2 Uma transao explcita aquela para a qual voc define o incio e trmino da transao explicitamente. Os aplicativos DB-Library e scripts Transact-SQL usam as instrues BEGIN TRANSACTION, COMMIT TRANSACTION, COMMIT WORK, ROLLBACK TRANSACTION ou ROLLBACK WORK Transact-SQL para definir transaes explcitas. BEGIN TRANSACTION Marca o ponto inicial de uma transao explcita para uma conexo. COMMIT TRANSACTION ou COMMIT WORK Usadas para encerrar uma transao com xito se nenhum erro for encontrado. Todas as modificaes de dados realizadas na transao tornaram-se uma parte permanente do banco de dados. Os recursos mantidos pela transao so liberados. ROLLBACK TRANSACTION ou ROLLBACK WORK Usado para apagar uma transao na qual so encontrados erros. Todos os dados modificados pela transao retornam ao estado em que estavam no incio da transao. Os recursos mantidos pela transao so liberados. Voc tambm pode usar transaes explcitas no OLE DB. Chame o mtodo ITransactionLocal::StartTransaction para iniciar uma transao explcita. Chame o mtodoITransaction::Commit ou ITransaction::Abort com fRetaining definido como FALSE para terminar a transao, sem iniciar outra transao automaticamente. No ADO, use o mtodo BeginTrans em um objeto Connection para iniciar uma transao explcita. Para terminar a transao, chame os mtodos CommitTran ouRollbackTrans do objeto Connection. No provedor gerenciado ADO.NET SqlClient, use o mtodo BeginTransaction em um objeto SqlConnection para iniciar uma transao explcita. Para terminar a transao, chame os mtodos Commit() ou Rollback() no objeto SqlTransaction.

A API de ODBC no oferece suporte para transaes explcitas, apenas para autocommit e transaes implcitas. O modo de transao explcito permanece apenas no perodo de durao da transao. Quando a transao terminar, a conexo volta ao modo de transao em que estava antes de a transao explcita ser iniciada, implcito ou modo de confirmao automtica.

Observao
Em uma sesso com vrios conjuntos de resultados ativos (MARS), uma transao explcita iniciada com a instruo Transact-SQL BEGIN TRANSACTION se torna uma transao no escopo do lote. Se a transao com escopo de lote no for confirmada ou revertida quando o lote for concludo, o SQL Server reverter automaticamente a transao. Para obter mais informaes, consulte Controlando transaes (Mecanismo de Banco de Dados) e Instrues de transao (Transact-SQL).

Transaes de confirmao automtica


SQL Server 2008 R2 O modo de confirmao automtica o modo padro de gerenciamento de transaes do Mecanismo de banco de dados do SQL Server. Toda instruo Transact-SQL confirmada ou revertida quando concluda. Se uma instruo for concluda com sucesso, ser confirmada; se encontrar qualquer erro, ser revertida. Uma conexo para uma instncia do Mecanismo de Banco de Dados opera em modo de confirmao automtica sempre que esse modo padro no for substitudo por transaes explcitas ou implcitas. O modo de confirmao automtica tambm o modo padro para ADO, OLE DB, ODBC e DB-Library. Uma conexo a uma instncia do Mecanismo de Banco de Dados opera em modo de confirmao automtica at que uma instruo BEGIN TRANSACTION inicie uma transao explcita, ou que uma transao implcita seja definida como ativada. Quando a transao explcita confirmada ou revertida, ou quando o modo de transao implcito desativado, a conexo retorna ao modo de confirmao automtica.

Quando ON, SET IMPLICIT_TRANSACTIONS define a conexo como modo de transao implcita. Quando OFF, ele retorna a conexo para o modo de transao de confirmao automtica.

Erros de compilao e de tempo de execuo


No modo de confirmao automtica, s vezes parece que uma instncia do Mecanismo de Banco de Dados reverteu um lote inteiro, em vez de apenas uma instruo SQL. Isto acontece se o erro encontrado for um erro de compilao, no um erro em tempo de execuo. Um erro de compilao impede o Mecanismo de Banco de Dados de criar um plano de execuo, assim nada no lote executado. Embora parea que todas as instrues antes daquela que gerou o erro tenham sido revertidas, o erro impediu que tudo no lote fosse executado. No exemplo a seguir, nenhuma das instrues INSERT no terceiro lote foram executadas por causa de um erro de compilao. Parece que as primeiras duas instrues INSERT foram revertidas, mas elas nunca foram executadas. USE AdventureWorks2008R2; GO CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3)); GO INSERT INTO TestBatch VALUES (1, 'aaa'); INSERT INTO TestBatch VALUES (2, 'bbb'); INSERT INTO TestBatch VALUSE (3, 'ccc'); -- Syntax error. GO SELECT * FROM TestBatch; -- Returns no rows. GO No exemplo a seguir, a terceira instruo INSERT gera um erro de duplicao de chave primria em tempo de execuo. As primeiras duas instrues INSERT tm xito e so confirmadas; portanto, elas permanecem depois do erro em tempo de execuo. USE AdventureWorks2008R2; GO CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3)); GO INSERT INTO TestBatch VALUES (1, 'aaa'); INSERT INTO TestBatch VALUES (2, 'bbb'); INSERT INTO TestBatch VALUES (1, 'ccc'); -- Duplicate key error. GO SELECT * FROM TestBatch; -- Returns rows 1 and 2. GO O Mecanismo de Banco de Dados usa resoluo de nome adiada, na qual os nomes de objetos no so resolvidos at o tempo de execuo. No exemplo a seguir, as primeiras duas instrues INSERT so executadas e confirmadas, e essas duas linhas permanecem na tabela TestBatch, depois que a terceira instruo INSERT gera um erro em tempo de execuo, referindo-se a uma tabela que no existe. USE AdventureWorks2008R2; GO

CREATE GO INSERT INSERT INSERT GO SELECT GO

TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3)); INTO TestBatch VALUES (1, 'aaa'); INTO TestBatch VALUES (2, 'bbb'); INTO TestBch VALUES (3, 'ccc'); -- Table name error. * FROM TestBatch; -- Returns rows 1 and 2.

Transaes implcitas
SQL Server 2008 R2 Quando uma conexo operar em modo de transao implcita, a instncia do Mecanismo de banco de dados do SQL Server iniciar automaticamente uma nova transao depois que a transao atual for confirmada ou revertida. Voc no faz nada para determinar o incio de uma transao; apenas confirma ou reverte cada uma das transaes. O modo de transao implcita gera uma cadeia contnua de transaes. Aps a configurao do modo de transao implcita em uma conexo, a instncia do Mecanismo de Banco de Dados iniciar automaticamente a transao ao executar pela primeira vez cada uma destas instrues: ALTER TABLE CREATE DELETE DROP FETCH GRANT INSERT OPEN REVOKE SELECT TRUNCATE TABLE UPDATE

A transao permanecer em vigor at que voc emita uma instruo COMMIT ou ROLLBACK. Aps a confirmao ou reverso da primeira transao, a instncia do Mecanismo de Banco de Dados iniciar automaticamente uma nova transao da prxima vez que qualquer instruo for executada pela conexo. A instncia continuar a gerar a cadeia de transaes implcitas at que modo de transao implcita seja desativado. O modo de transao implcita definido tanto pelo uso da instruo SET do Transact-SQL como por meio de funes e mtodos API de banco de dados.

Observao
Em uma sesso MARS (Mltiplos Conjuntos de Resultados Ativos), uma transao implcita Transact-SQL torna-se uma transao com escopo de lote. Se a transao com escopo de lote no for confirmada ou revertida quando o lote se completar, o SQL Server reverter automaticamente a transao. Para obter mais informaes, consulteControlando transaes (Mecanismo de Banco de Dados) e Instrues de transao (Transact-SQL).

Transaes distribudas (Mecanismo de Banco de Dados)


SQL Server 2008 R2 Transaes distribudas abrangem dois ou mais servidores conhecidos como gerenciadores de recursos. O gerenciamento da transao deve ser coordenado entre os gerenciadores de recursos por um componente de servidor chamado de gerenciador de transaes. Cada instncia do Mecanismo de banco de dados do SQL Server pode operar como um gerenciador de recursos em transaes distribudas coordenadas por gerenciadores de transaes, como o MS DTC (Coordenador de Transaes Distribudas da Microsoft), ou

outros gerenciadores de transaes que do suporte especificao XA do Open Group para processamento de transaes distribudas. Para obter mais informaes, consulte a documentao do MS DTC. Uma transao em uma instncia nica do Mecanismo de Banco de Dados que abrange dois ou mais bancos de dados , de fato, uma transao distribuda. A instncia gerencia a transao distribuda internamente. Para o usurio, ela opera como uma transao local. No aplicativo, uma transao distribuda gerenciada da mesma forma como uma transao local. No final da transao, o aplicativo solicita que a transao seja confirmada ou revertida. Uma confirmao distribuda deve ser gerenciada de forma diferenciada pelo gerenciador de transaes para minimizar o risco de que uma falha de rede possa resultar em alguns gerenciadores de recurso que confirmam com xito enquanto outros revertem a transao. Isso obtido pelo gerenciamento do processo de confirmao em duas fases (a fase de preparao e a fase de confirmao), o que conhecido como um protocolo 2PC. Fase de preparo Quando o gerenciador de transaes recebe uma solicitao de confirmao, ele envia um comando de preparao a todos os gerenciadores de recursos envolvidos na transao. Cada gerenciador executa todas as aes necessrias para tornar a transao durvel, e todos os buffers que mantm imagens de log da transao so liberados no disco. medida que cada gerenciador de recursos conclui a fase de preparao, ele retorna informaes de xito ou de falha ao gerenciador de transaes. Fase de confirmao Se o gerenciador de transaes receber preparos bem-sucedidos de todos os gerenciadores de recursos, ele enviar comandos de confirmao a cada gerenciador de recursos. Em seguida, os gerenciadores de recursos podem concluir a confirmao. Se todos os gerenciadores de recursos relatarem uma confirmao bem-sucedida, o gerenciador de transaes enviar uma notificao de xito ao aplicativo. Se um gerenciador de recursos informar uma falha na preparao, o gerenciador de transaes enviar um comando de reverso a cada gerenciador de recursos e indicar a falha da confirmao ao aplicativo. Os aplicativos Mecanismo de Banco de Dados podem gerenciar transaes distribudas por meio de Transact-SQL ou da API do banco de dados.

Tpicos de transaes avanadas


SQL Server 2008 R2

O gerenciamento incorreto de transaes leva em geral a problemas de conteno e de desempenho em sistemas com muitos usurios. Conforme aumenta o nmero de usurios em um sistema, importante ter aplicativos que utilizem as transaes de maneira eficaz. O Mecanismo de banco de dados do SQL Server tambm d suporte a aninhamento de transaes, pontos de salvamento de transao e transaes associadas, que oferecem aos programadores outras opes para gravar transaes eficazes.

Tpico
Aninhando transaes

Descrio
Explica como aninhar transaes em procedimentos armazenados que podem ser chamados de sesses que podem ou no ter uma transao ativa. Os pontos de salvamento oferecem um mecanismo de reverso de partes de uma transao. Duas sesses podem ser associadas, compartilhando uma transao comum e um conjunto de bloqueios. A escolha de um nvel de isolamento define como a sesso atual isolada de atualizaes executadas por outras sesses. Discute os comportamentos associados reverso de uma transao de um procedimento armazenado ou gatilho. Determinadas instrues no podem ser executadas em uma transao ativa.

Pontos de salvamento de transao Usando sesses associadas

Ajustando nveis de isolamento da transao

Reverses e confirmaes em procedimentos armazenados e disparadores Instrues Transact-SQL permitidas em transaes

Codificando transaes eficientes Discute a recomendao de codificar transaes que executam e escalam corretamente.

http://msdn.microsoft.com/pt-br/library/ms180799(v=sql.105).aspx

Vous aimerez peut-être aussi