Instituto Federal de Educação, Ciência e Tecnologia de...

28
©Prof. Lineu Mialaret Aula 25 - 1 Banco de Dados I Banco de Dados I BD I Prof. Lineu Mialaret Aula 25: Controle Transacional em BD Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - IFSP Campus de Caraguatatuba Tecnólogo em Análise e Desenvolvimento de Sistemas 1 0 Semestre de 2013

Transcript of Instituto Federal de Educação, Ciência e Tecnologia de...

©Prof. Lineu Mialaret Aula 25 - 1 Banco de Dados I

Banco de Dados I – BD I

Prof. Lineu Mialaret

Aula 25: Controle Transacional em BD

Instituto Federal de Educação, Ciência e

Tecnologia de São Paulo - IFSP Campus de Caraguatatuba

Tecnólogo em Análise e Desenvolvimento de Sistemas

10 Semestre de 2013

©Prof. Lineu Mialaret Aula 25 - 2 Banco de Dados I

Introdução (1)

©Prof. Lineu Mialaret Aula 25 - 3 Banco de Dados I

Introdução (2)

Uma transação é um programa em execução (sequência de instruções), o qual forma uma unidade lógica de processamento no banco de dados.

Uma transação inclui uma ou mais operações de acesso ao banco de dados

Englobam operações de inserção, exclusão, alteração ou recuperação.

©Prof. Lineu Mialaret Aula 25 - 4 Banco de Dados I

Introdução (3)

©Prof. Lineu Mialaret Aula 25 - 5 Banco de Dados I

Introdução (4)

©Prof. Lineu Mialaret Aula 25 - 6 Banco de Dados I

Propriedades ACID (1)

Do ponto de vista dos Sistemas Gerenciadores de

Bancos de Dados (SGBD), ACID são propriedades

fundamentais nos processos transacionais, pois

garantem a consistência da base de dados.

Propriedades ACID:

Atomicidade;

Consistência;

Isolamento; e

Durabilidade.

©Prof. Lineu Mialaret Aula 25 - 7 Banco de Dados I

Propriedades ACID (2)

Atomicidade

A propriedade de atomicidade garante que as

transações sejam atômicas (indivisíveis).

A transação será executada totalmente ou não será

executada.

Se durante a transação qualquer ação que constitui uma

unidade de trabalho falhar, a transação inteira deve ser

desfeita (rollback).

Quando todas as ações são efetuadas com sucesso, a

transação pode ser efetivada e persistida em banco

(commit).

©Prof. Lineu Mialaret Aula 25 - 8 Banco de Dados I

Propriedades ACID (3)

Consistência

A propriedade de consistência garante que o banco de

dados passará de uma forma consistente para outra

forma também consistente.

Uma fotografia do banco (snapshot) é tirada e esse é

seu estado, depois de uma transação é retirada uma

nova foto, se a 1ª estava consistente a 2ª também

deverá estar.

Todas as regras e restrições 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 transação possa ser

completada com sucesso.

©Prof. Lineu Mialaret Aula 25 - 9 Banco de Dados I

Propriedades ACID (4)

Isolamento

A propriedade de isolamento garante que a transação

não será interferida por nenhuma outra transação

concorrente.

Caso sejam executadas duas transações juntas

referentes ao mesmo dado, uma transação será

executada e todos os dados da tabela são alocados

para aquela transação e a outra somente será

executada após o término da 1ª.

Cada transação funciona completamente à parte de

outras estações. Todas as operações são parte de uma

transação única. O principio é que nenhuma outra

transação, operando no mesmo sistema, possa interferir

no funcionamento da transação corrente(é um mecanismo

de controle).

Outras transações não podem visualizar os resultados

parciais das operações de uma transação em andamento

©Prof. Lineu Mialaret Aula 25 - 10 Banco de Dados I

Propriedades ACID (5)

Durabilidade

A propriedade de durabilidade garante que o que foi

salvo (persistido), não será mais perdido.

A responsabilidade fica sobre o subsistema de

restauração do SGBD.

Significa que os resultados de uma transação são

permanentes e podem ser desfeitos somente por uma

transação subsequente.

Por exemplo, todos os dados e status relativos a uma

transação devem ser armazenados num repositório

permanente, não sendo passíveis de falha por uma falha

de hardware.

©Prof. Lineu Mialaret Aula 25 - 11 Banco de Dados I

Porque a Restauração é Necessária

O subsistema de restauração de transações do SGBD

é o responsável pela atomicidade.

Ele deverá garantir que:

Todas as operações na transação foram completadas

com sucesso e seu efeito será gravado

permanentemente no banco de dados; ou

A transação não terá nenhum efei­to sobre o banco de

dados ou sobre quaisquer outras transações.

©Prof. Lineu Mialaret Aula 25 - 12 Banco de Dados I

Suporte a Transações no MySQL

No SGBD MySQL o tipo de tabela que dá suporte a

transações é o InnoDB.

Por default o MySQL cria tabelas do tipo MYISA, logo,

caso se queira ativar o suporte a transações, será

necessário realizar a conversão dos tipos da tabela, do

tipo padrão para o InnoDb e/ou criá-las e especificar o

tipo desejado.

©Prof. Lineu Mialaret Aula 25 - 13 Banco de Dados I

Tabelas InnoDB

Dotam o MySQL com um mecanismo de

armazenamento seguro com transações (compatível

com ACID) com commit, rollback, e recuperação em

caso de falhas.

InnoDB é o primeiro gerenciador de armazenamento

no MySQL que suportam restrições do tipo FOREIGN

KEY.

Foi desenvolvido para obter o máximo de

performance ao processar grande volume de dados.

©Prof. Lineu Mialaret Aula 25 - 14 Banco de Dados I

Criação e Alteração de Tabela Innodb

Criação de tabela com tipo Innodb

create table teste (

teste_id int(2), teste_nome varchar(10)

) engine=innodb;

Criação tabela normal(MYISA - default)

create table teste1 (

teste_id int, teste_nome varchar(10)

);

Alteração de MYISA para Innodb

alter table teste1 engine =innodb;

©Prof. Lineu Mialaret Aula 25 - 15 Banco de Dados I

Comandos Transacionais no MySQL

Por padrão, MySQL é executado em modo

autocommit.

Isto significa que assim que se executa uma instrução

que atualiza (modifica) uma tabela, o MySQL armazena

a atualização no disco.

©Prof. Lineu Mialaret Aula 25 - 16 Banco de Dados I

Comandos Transacionais (1)

Caso se utilize de tabelas com segurança a

transação (como InnoDB\ou BDB), pode-se colocar o

MySQL em modo não autocommit com o seguinte

comando:

1 - SET AUTOCOMMIT=0

2 - START TRANSACTION

A diferença entre (1) e (2) é que usando (2) o

AUTOCOMMIT volta a estar habilitado quando se

termina a transação (um comando COMMIT ou um

comando ROLLBACK).

©Prof. Lineu Mialaret Aula 25 - 17 Banco de Dados I

Comandos Transacionais (2)

Com o autocommit desabilitado, pode-se utilizar os

comandos:

COMMIT, para armazenar suas alterações em disco;

ROLLBACK, caso se deseje ignorar as alterações que

foram feitas desde o início da transação.

SAVEPOINT, que cria um ponto de retorno; e

ROLLBACK TO SAVEPOINT, que desfaz as operações

até o ponto de retorno.

©Prof. Lineu Mialaret Aula 25 - 18 Banco de Dados I

Comandos Transacionais (3)

Quando um SAVEPOINT é criado usando um nome já

atribuído a outro SAVEPOINT, o

SAVEPOINT antigo é apagado e o nome

atribuído ao novo SAVEPOINT.

©Prof. Lineu Mialaret Aula 25 - 19 Banco de Dados I

Exemplo 1

START TRANSACTION;

INSERT INTO tb1 (id,nome,email) VALUES (2,'Nome

X','[email protected]');

INSERT INTO tb2 (id,nome,email) VALUES (3,'Nome

Y','[email protected]');

COMMIT;

©Prof. Lineu Mialaret Aula 25 - 20 Banco de Dados I

Exemplo 2

SET AUTOCOMMIT = 0;

SAVEPOINT meu_ponto1;

UPDATE tb_dinheiro SET qtd = qtd­300 WHERE client_id = '10';

SAVEPOINT meu_ponto2;

UPDATE tb_dinheiro SET qtd = qtd+300 WHERE client_id = '15';

SELECT qtd FROM tb_dinheiro WHERE client_id = '10';

SELECT qtd FROM tb_dinheiro WHERE client_id = '15';

ROLLBACK TO SAVEPOINT meu_ponto2;

SELECT qtd FROM tb_dinheiro WHERE client_id = '15';

ROLLBACK TO SAVEPOINT meu_ponto1;

SELECT qtd FROM tb_dinheiro WHERE client_id = '10';

COMMIT;

©Prof. Lineu Mialaret Aula 25 - 21 Banco de Dados I

Nem Tudo Pode ser Desfeito

Há comandos SQL que não podem ser desfeitos com o

ROLLBACK ou com o ROLLBACK TO SAVE POINT,

isso porque causam um COMMIT implicitamente ao

serem declarados.

Deve-se tomar cuidado com o uso

desses comandos dentro de suas transações.

©Prof. Lineu Mialaret Aula 25 - 22 Banco de Dados I

Comandos que Não Podem Ser Desfeitos

• ALTER FUNCTION,

• ALTER PROCEDURE,

• ALTER TABLE,

• CREATE DATABASE,

• CREATE FUNCTION,

• CREATE INDEX,

• CREATE PROCEDURE,

• CREATE TABLE,

• DROP DATABASE,

• DROP FUNCTION,

• DROP INDEX,

• DROP PROCEDURE,

• DROP TABLE,

• LOAD MASTER DATA,

• LOCK TABLES,

• LOAD DATA INFILE,

• RENAME TABLE,

• SET AUTOCOMMIT=1,

• START TRANSACTION,

• TRUNCATE TABLE,

• UNLOCK TABLES.

©Prof. Lineu Mialaret Aula 25 - 23 Banco de Dados I

Set Transaction (1)

SET [GLOBAL | SESSION] TRANSACTION ISOLATION

LEVEL { READ UNCOMMITTED | READ COMMITTED |

REPEATABLE READ | SERIALIZABLE }

O comportamento padrão é definir o nível de isolação

para a próxima (não iniciada) transação. Caso se use a

palavra-chave GLOBAL, a instrução define o nível de

transação padrão globalmente para todas as novas

conexões criadas a partir deste ponto (mas não existe

conexão).

Precisa-se do privilégio SUPER para fazer isto. Usar a

palavra-chave SESSION define o nível de transação

padrão para todas a transações futuras realizadas na

conexão atual.

©Prof. Lineu Mialaret Aula 25 - 24 Banco de Dados I

ISOLATION LEVEL define o nível de isolação da

transação para global, toda a sessão ou a próxima

transação.

SET TRANSACTION ISOLATION LEVEL READ

UNCOMMITTED, para ler dados de quaisquer transações

não-completadas;

SET TRANSACTION ISOLATION LEVEL READ

COMMITTED, para ler dados somente de transações

completas, incluindo comandos internos;

SET TRANSACTION ISOLATION LEVEL REPEATABLE

READ, para ler dados somente de transações completas; e

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE,

para utilizar em conjunto com SELECT…LOCK IN SHARE

MODE

Set Transaction (2)

©Prof. Lineu Mialaret Aula 25 - 25 Banco de Dados I

A diferença real entre o READ COMMITED e o

REPEATABLE READ acontece em transações com

mais de um comando. Caso se envie, por exemplo,

uma série de consultas e atualizações dentro de uma

mesma transação, os dois modos lerão dados de

pontos diferentes:

READ COMMITED atualizará os dados de leitura a cada

comando. Um update em seguida do outro utilizará os

dados atualizados, respeitando a transação no qual eles

se encontram; e

REPEATABLE READ utilizará sempre um único conjunto

de dados inicial. Se você efetuar várias atualizações, as

leituras serão feitas do mesmo conjunto inicial sempre,

relativo ao início da transação. Esse é o modo padrão no

MySQL.

Set Transaction (3)

©Prof. Lineu Mialaret Aula 25 - 26 Banco de Dados I

Exemplo Prático (1)

©Prof. Lineu Mialaret Aula 25 - 27 Banco de Dados I

Exemplo Prático (2)

Set @autocommit = 0;

©Prof. Lineu Mialaret Aula 25 - 28 Banco de Dados I

Exemplo Pratico com Savepoint