Síntese
Transação
Vários processos existentes no mundo real devem ser mapeados e implementados em sistemas de informação, tais sistemas devem refletir as ações do mundo real em um sistema off-line ou on-line. Atualmente podemos efetuar compra e venda pela internet, ter acesso a vários tipos de prestação de serviço através de um telefone ou dispositivo móvel. Todas essas vantagens do mundo moderno são possíveis pelo uso de um Banco de Dados. Cada ação executada em um banco de dados tem o nome de transação, muitos são os conceitos encontrados mas a maioria deles nos remete a um mesmo entendimento.
Para DATE, “Transação é uma unidade lógica de trabalho, envolvendo diversas operações de bancos dados.”
“...uma transação é uma sequência de operações num sistema de gerência de banco de dados que são tratadas como um bloco único e indivisível (atômico) durante uma recuperação de falhas e também prover isolamento entre acessos concorrentes na mesma massa de dados.” Wikipedia.
Podemos considerar que uma transação é qualquer operação de escrita em uma tabela em um banco de dados. Quando executamos uma instrução UPDATE estamos executando uma transação, da mesma forma quando executamos um DELETE ou um INSERT. Esse trio de comandos efetivamente altera o conteúdo dos dados dentro de uma tabela.
O controle de transações nos possibilita definir regras de negócio para o funcionamento das Bases de Dados. Na verdade, devemos controlar múltiplas transações, torná-las consistentes e dependentes entre si, mas devemos fazer isso de forma segura tendo como objetivo primeiro a preservação dos dados e a integridade Base de Dados.
Propriedades ACID
As propriedades ACID, são atributos que toda transação precisa ter para que não existam problemas durante a execução. ACID é uma sigla que significa Atomicidade, Consistência, Isolamento e Durabilidade. A seguir apresentaremos o conceito de cada um deles:
Atomicidade: Uma transação é uma unidade indivisível de alteração da base de dados: ou ela é executada por completo, ou então nada é executado;
Consistência: as transações devem preservar a consistência do banco de dados, ou seja, transforma um estado consistente do banco de dados em outro estado consistente, sem necessariamente preservar o estado de consistência em todos os pontos intermediários;
Isolamento: Outras transações não devem “ver” alterações parcialmente realizadas por uma transação, até seu encerramento com sucesso;
Durabilidade: uma vez comprometida uma transação, suas atualizações sobrevivem no banco de dados mesmo que haja uma queda subsequente do sistema.
Tipos de Transações
Transações Implícitas - São transações que ocorrem automaticamente quando enviamos os comandos INSERT,UPDATE e DELETE para o BD. Essas transações são chamadas de implícitas pois não precisamos indicar o início através de um comando BEGIN TRANSACTION ou um térmico através do comando COMMIT ou ROLLBACK.
Transações Explícitas – Utilizam-se do conceito formal de transações. Nas transações explícitas devemos informar o início o o fim da transação, devemos utilizar o comando BEGIN TRANSACTION para indicar o seu início e os comandos COMMIT ou ROLLBACK para indicar o fim da transação.
COMMIT – quando a transação foi finalizada com sucesso.
ROLLBACK - quando a transação foi finalizada com falha ou abortada.
Transações Automáticas - é o modo padrão de gerenciamento de transações da maioria dos SGBD’s. Uma instrução Transact-SQL é confirmada ou revertida quando concluída. Se uma instrução for concluída com sucesso, será confirmada; se ocorrer uma falha, será revertida. Esse mecanismo de atua em modo de confirmação automática sempre que esse modo padrão não for substituído por transações explícitas ou implícitas.
Administrando Falhas
Reconstrução (recovery)
Em algum momento no tempo, todo sistema computacional apresentará uma falha.
O SGBD deve incorporar mecanismos de proteção e recuperação em caso de falhas
Tipos de falhas
– Uma transação que está executando alterações sobre a base de dados termina de forma anormal
– Causas:
– O SGBD encerra sua execução enquanto há transações de alteração em execução
– Causas:
– Parte ou toda a base de dados está inacessível ou incorreta (falha no meio de armazenamento, falha na controladora,programas fazem alterações incorretas,…)
Recuperação de erro de transação
Deve ser executada pelo SGBD quando uma transação que estava sendo executada é cancelada (explicita- ou implicitamente):
– Programa que executava a transação foi descontinuado (divide-byzero, etc…)
Recuperação:
– Os efeitos da transação em execução devem ser desfeitos (“undo”)
– Somente esses efeitos são atingidos pela reconstrução
– Consequências.
Recuperação de falhas no meio de armazenamento
A base de dados está danificada. Deve ser usada uma cópia de segurança. A partir dela, todas operações sobre a área afetada devem ser refeitas. A cópia de segurança pode ser de diferentes tipos:
– Total
– Parcial
– Incremental
– “On-line”
COMANDO |
FUNÇÃO |
ALTER GROUP |
Inclui ou exclui usuários em um grupo. |
ALTER TABLE |
Altera a definição da tabela. |
ALTER USER |
Altera a conta de um usuário do banco de dados. |
BEGIN |
Inicia um bloco de transação. |
COMMIT |
Efetiva a transação corrente. |
CREATE CONSTRAINT TRIGGER |
Define um novo gatilho de restrição. |
CREATE DATABASE |
Cria um banco de dados novo. |
CREATE FUNCTION |
Define uma nova função. |
CREATE GROUP |
Define um novo grupo de usuários. |
CREATE INDEX |
Define um índice novo. |
CREATE RULE |
Define uma nova regra. |
CREATE SEQUENCE |
Define um novo gerador de seqüência. |
CREATE TABLE |
Define uma nova tabela. |
CREATE TABLE AS |
Cria uma nova tabela a partir do resultado de uma consulta. |
CREATE TRIGGER |
Define um novo gatilho. |
CREATE TYPE |
Define um novo tipo de dado. |
CREATE USER |
Define uma nova conta de usuário do banco de dados. |
CREATE VIEW |
Define uma nova visão. |
DELETE |
Exclui linhas de uma tabela. |
DROP DATABASE |
Remove um banco de dados. |
DROP FUNCTION |
Remove uma função definida pelo usuário. |
DROP GROUP |
Remove um grupo de usuários. |
DROP INDEX |
Remove um índice. |
DROP OPERATOR |
Remove um operador definido pelo usuário. |
DROP RULE |
Remove uma regra. |
DROP SEQUENCE |
Remove uma seqüência. |
DROP TABLE |
Remove uma tabela. |
DROP TRIGGER |
Remove um gatilho. |
DROP TYPE |
Remove um tipo de dado definido pelo usuário. |
DROP USER |
Remove uma conta de usuário do banco de dados. |
DROP VIEW |
Remove uma visão. |
END |
Efetiva a transação corrente. |
GRANT |
Define privilégios de acesso. |
INSERT |
Cria novas linhas na tabela. |
LOCK |
Bloqueia explicitamente uma tabela. |
REINDEX |
Reconstrói índices corrompidos. |
REVOKE |
Revoga privilégios de acesso. |
ROLLBACK |
Aborta a transação corrente. |
SELECT |
Retorna linhas de uma tabela ou de uma visão. |
SELECT INTO |
Cria uma nova tabela a partir do resultado de uma consulta. |
SET |
Muda um parâmetro de tempo de execução. |
SET CONSTRAINTS |
Especifica o modo de restrição da transação corrente. |
SET SESSION AUTHORIZATION |
Define o identificador do usuário da sessão e o identificador do usuário corrente, da sessão corrente. |
SHOW |
Mostra o valor de um parâmetro de tempo de execução. |
UPDATE |
Atualiza linhas de uma tabela. |