Lista de Exercícios 12 Transações

Documentos relacionados
CONCORRÊNCIA. Buscando aumentar os níveis de concorrência redução da espera em detrimento do isolamento, a SQL definiu alguns níveis de isolamento.

GBC043 - Sistemas de Banco de Dados Lab8 : Transações no PostgreSql

BDII SQL TRANSAÇÃO Revisão 2

Controle de Transação

Banco de Dados I 6 Transações e Controle de Concorrência

CONCORRÊNCIA. 1. Introdução. Recursos exclusivos. Não necessita controle. Abundância de recursos compartilhados. Controle necessário mas mínimo

Lock. Administração de Banco de Dados

Oracle Comandos para Processamento de Transações

Processamento de Transações II

Processamento de Transações

revisão Controle de Concorrência com Locks Bancos de Dados I 2015/02

Exercícios Módulo Banco de Dados I (08/07/2006)

Tópicos Avançados de Bases de Dados

SQL CREATE MATERIALIZED VIEW. Processamento Analítico de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. OLAP: Modelagem Multidimensional

Controle de Transações. Banco de Dados André Luiz do Vale Soares

BANCO DE DADOS WEB AULA 12. manipulação de dados atualização e exclusão de registros. professor Luciano Roberto Rocha.

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito)

Processamento de Transações

Processamento de Transações. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

Banco de Dados. Prof. Antonio

Banco de Dados. -Aprendendo conceitos -Usando o SQL Conf para: -Conectar no banco de dados -Criar, alterar, excluir e consultar estruturas de tabelas

BD II (SI 587) Programação SQL. Prof. Josenildo Silva.

Os comandos SQL utilizados nas aulas práticas e mostrados aqui foram feitos num interpretador de comandos: psql

A instância Oracle é composta de :

Formação de DBAs SQL Server 2008

PROCESSAMENTO DE TRANSAÇÕES

EXAME DE 1ª ÉPOCA Semestre de Verão 2004/ Junho 2005 duração: 2h30m

ANÁLISE E PROJETO DE BANCO DE DADOS

Linguagem de pesquisa declarativa para banco de dados relacional; 1ª Versão - Desenvolvida pela IBM no laboratório de pesquisa de San José;

TRANSAÇÕES E CONTROLE DE CONCORRÊNCIA Em resumo: Transações: clientes podem necessitar que um servidor execute uma sequência de requisições de forma a

Universidade Estadual de Mato Grosso do Sul UEMS Curso de Ciência da Computação Disciplina de Algoritmos Paralelos e Distribuídos

BD II (SI 587) Algoritmos de recuperação Avançado e ARIES. Josenildo Silva.

Conexão com Banco de Dados, Inserção, exclusão e atualização de registros

Dicas de Projeto Lógico Relacional

SGBD. Definição. Funções básicas

Modelo Relacional + SQL (DDL) Material elaborado pela Prof. Karin Becker

Administração de Banco de Dados

INTRODUÇÃO AO MYSQL. Eng. Computação

1 a Lista Professor: Claudio Fabiano Motta Toledo Estagiário PAE: Jesimar da Silva Arantes

Controle de transações em SQL

[versão para impressão] Link original: comp=24763 Conhecendo o PL/SQL

A U L A 1 I N T R O D U Ç Ã O A B A N C O D E D A D O S E V I S Ã O G E R A L D O S Q L

Simulação de Caixa Automático

SGBD. Funções Básicas de um SGBD

Tutorial SQL Server 2014 Express

Administração de Banco de Dados

Processamento de Transações

Departamento de Ciências de Computação SCC Instituto de Ciências Matemáticas e de Computação ICMC Universidade de São Paulo USP

Leonardo Gresta Paulino Murta

PORTAS NAND (NE) INTRODUÇÃO TEÓRICA

Gerência de Transações Distribuídas

LISTA DE EXERCÍCIOS TEORIA DE BANCO DE DADOS

COMPONENTES DA BIBLIOTECA ZEOSLIB. Paleta Zeos Access no Lazarus. TZConnection

Programando em SQL. Triggers, Stored Procedures e funções. Profa. Késsia Marchi

Rápida revisão do Modelo Relacional

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Linguagem de Consulta Estruturada SQL- DML

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

Organização e Arquitetura de Computadores I

TRANSAÇÕES. Considerando que estes comandos fazem parte de uma TRANSAÇÃO (veremos como indicar isso):

Gerenciamento de Transações em Banco de Dados

Tabelas. Banco de Dados I MySQL

BCD29008 Banco de dados

MATA60 BANCO DE DADOS Aula 10- Indexação. Prof. Daniela Barreiro Claro

LINGUAGEM SQL. DML - Linguagem de Manipulação de Dados

Bases de Dados. PostgreSQL, MySQL e Php Transações. P. Serendero,

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

Transcrição:

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO SCC0141 - Bancos de Dados e Suas Aplicações Prof. José Fernando Rodrigues Júnior 2º semestre de 2011 Entrega 21/11/2011. Lista de Exercícios 12 Transações Nomes: Para esta lista use o esquema Futebol (Lista-06-Aula-DDL.txt e Lista-06-Aula-DML.txt). 1. Neste exercício, são necessárias duas conexões do mesmo usuário na base de dados, chamadas aqui de SESSÃO 1 e SESSÃO 2. Execute as instruções de i. a x. uma vez usando isolamento REPEATABLE READ, e outra vez usando isolamento READ COMMITTED. Para cada caso, analise e explique o que acontece em cada caso respondendo às perguntas propostas nos itens vi, viii e x. i. Abra uma conexão para SESSÃO 1 (janela1); ii. Abra outra conexão para SESSÃO 2 (janela2); iii. Na SESSÃO 1, inicie uma transação com um dos níveis de isolamento (OBS: inicie a transação executando o comando START TRANSACTION seguido de um comando SET TRANSACTION LEVEL execute os comandos nesta ordem, do contrário o PostgreSQL irá se comportar de maneira imprevisível); SET TRANSACTION ISOLATION LEVEL READ COMMITTED; iv. Na SESSÃO 1, faça a consulta1 abaixo (em SQL) (OBS: cuidado para não executar novamente o comando SET TRANSACTION execute apenas o comando de consulta); FROM JOGADOR J, EQUIPE E WHERE J.idequipe = e.idequipe; v. Na SESSÃO 2, inicie uma transação com um dos níveis de isolamento e faça o update da equipe de um dos jogadores, alterando assim os dados da resposta da consulta1;

UPDATE JOGADOR SET idequipe = 3 WHERE RG = 111111114; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; UPDATE JOGADOR SET idequipe = 1 WHERE RG = 111111114; vi. Repita o passo iv o que aconteceu e por quê? Os dados da sessão 1 não refletem as alterações realizadas na sessão 2. Não houve nenhuma alteração em relação a 1ª consulta. Neste modo de isolamento, no início da transação, um snapshot dos dados do banco é armazenado e será usado como referência até o fim da transação. Os dados da sessão 1 não refletem as alterações realizadas na sessão 2. Não houve nenhuma alteração em relação à 1ª consulta. Isso ocorre porque neste nível de isolamento, apenas os dados das operações commited são lidos. vii. Na SESSÃO 2, execute commit para efetivar a transação; viii. Repita o passo iv o que aconteceu e por quê? Mesmo após o commit na sessão 2, os dados da sessão 1 não refletem o update da sessão 2. Só agora os dados da sessão 1 refletem o update da sessão 2. ix. Na SESSÃO 1, execute commit para efetivar a transação;

x. Repita o passo iv o que aconteceu e por quê? Somente agora, os dados da sessão 1 refletem as alterações da sessão 2. Nenhuma alteração. Consulta1: Faça a junção dos dados de Jogador e Equipe para o jogador cujo RG é 111111111. 2. Para este exercício: a) Usando duas sessões (de maneira semelhante ao exercício 1) e duas transações com nível de isolamento READ COMMITTED, use a tabela Equipe para exemplificar (, e ) a anomalia Phantom Read. Defina um predicado (conjunto de tuplas) para sua consulta na sessão 1; na sessão 2, insira/remova/altere tuplas; na sessão 1, repita a consulta para demonstrar o Phantom Read; WHERE idequipe = 5; WHERE idequipe = 6;

A sessão 1, lê dados diferentes do que havia lido anteriormente. b) Refaça o experimento usando o nível de isolamento adequado para que não ocorra a anomalia Phantom Read. WHERE idequipe = 5; WHERE idequipe = 6;

A sessão 1, lê os mesmos dados que havia lido anteriormente. 3. Usando duas sessões cada uma com sua transação: a) i. Inicie as duas transações com nível de isolamento READ COMMITTED; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; ii. Defina uma tupla para ser atualizada com o comando UPDATE e execute o comando em ambas as transações; UPDATE EQUIPE SET SALDO_GOLS = 2 WHERE IDEQUIPE = 8; iii. O que acontece na transação 2? Porquê? A transação 2 entrou em espera aguardando o desbloqueio da tupla pela transação 1. iv. Faça commit na transação 1; agora o que aconteceu na transação 2? A transação 2 pode prosseguir. b) Repita o exercício a) usando nível de isolamento SERIALIZABLE. i. Inicie as duas transações com nível de isolamento SERIALIZABLE; ii. Defina uma tupla para ser atualizada com o comando UPDATE e execute o comando em ambas as transações; UPDATE EQUIPE SET SALDO_GOLS = 2 WHERE IDEQUIPE = 8; iii. O que acontece na transação 2? A transação 2 entrou em espera aguardando o desbloqueio da tupla pela transação 1. iv. Faça commit na transação 1; agora o que aconteceu na transação 2? A transação 2 reportou erro. ERRO: não pôde serializar acesso devido a uma atualização concorrente

SQL state: 40001 c) Repita o exercício b) usando nível de isolamento SERIALIZABLE, mas executando rollback no passo v. i. Inicie as duas transações com nível de isolamento SERIALIZABLE; ii. Defina uma tupla para ser atualizada com o comando UPDATE e execute o comando em ambas as transações; UPDATE EQUIPE SET SALDO_GOLS = 2 WHERE IDEQUIPE = 8; iii. O que acontece na transação 2? A transação 2 entrou em espera aguardando o desbloqueio da tupla pela transação 1. iv. Faça rollback na transação 1; agora o que aconteceu na transação 2? A transação 2 pode prosseguir. d) Considerando a teoria de serialização de transações (slide 13, aula 21), explique porque o erro é reportado no item iv do exercício b). Como as duas transações concorrem pela atualização do mesmo dado, não existe execução intercalada das duas transações capaz de produzir um resultado condizente com o caso em que elas fossem executadas em sequência. Isto, pois cada um das transações tenta atualizar o mesmo dado, assim, ao final da execução em sequência, uma delas não terá sua atualização efetivada, pois foi sobrescrita pela outra. A execução em paralelo supõe que ambas as transações sejam respeitadas. No caso de uma delas fazer rollback, então entende-se que aquela transação desistiu da atualização do dado.