Baixe o app para aproveitar ainda mais
Prévia do material em texto
IMPLEMENTAÇÃO DE BANCO DE DADOS Aula 9- Transações IMPLEMENTAÇÃO DE BANCO DE DADOS Conteúdo Programático desta aula Transações TRANSAÇÕES IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS TRANSAÇÕES Uma transação é uma unidade de execução de programa que acessa e, possivelmente, atualiza vários itens de dados. Uma transação, geralmente, é o resultado da execução de um programa de usuário escrito em uma linguagem de manipulação de dados, e é delimitada da forma: begin transaction ......... end transacion. A transação consiste de todas as operações ali executadas, entre o começo e o final da transação. Durante a execução de uma transação o banco de dados pode passar por estados de inconsistência por vários motivos como: Queda de energia, Falha física, Etc.. TRANSAÇÕES IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS TRANSAÇÃO INÍCIO DA TRANSAÇÃO FIM DA TRANSAÇÃO EXECUÇÃO DA TRANSAÇÃO BANCO DE DADOS EM ESTADO CONSISTENTE BANCO DE DADOS TEMPORARIAMENTE EM ESTADO INCONSISTENTE T1 T2 IMPLEMENTAÇÃO DE BANCO DE DADOS TRANSAÇÃO COMANDO UPDATE TABELA TODA TRANSAÇÃO TERMINA INSUCESSO (ROLLBACK) SUCESSO (COMMIT) IMAGEM ANTIGA NOVA IMAGEM IMPLEMENTAÇÃO DE BANCO DE DADOS 5 EXEMPLOS DE TRANSAÇÃO BEGIN_TRANSACTION UPDATE EMP SET SAL = SAL * 1.1 WHERE CODEPT = 10 COMMIT BEGIN_TRANSACTION UPDATE CONTA SET SALDO = SALDO - 200 WHERE NRCC = 1000 UPDATE CONTA SET SALDO = SALDO + 200 WHERE NRCC = 1002 COMMIT BEGIN_TRANSACTION UPDATE EMP SET SAL = SAL * 1.1 WHERE CODEPT = 10 ROLLBACK IMPLEMENTAÇÃO DE BANCO DE DADOS PROPRIEDADES DAS TRANSAÇÕES - ATOMICIDADE - CONSISTÊNCIA - ISOLAMENTO -DURABILIDADE A C I D IMPLEMENTAÇÃO DE BANCO DE DADOS ATOMICIDADE PROPRIEDADE DO TUDO OU NADA NRCC NOME CPF SALDO 1000 J SILVA 123 500,00 1001 A BARROS 143 500,00 1002 J SILVA 123 200,00 1003 S SALES 223 500,00 UPDATE CONTA SET SALDO = SALDO - 200 WHERE NRCC = 1000 300,00 400,00 UPDATE CONTA SET SALDO = SALDO + 200 WHERE NRCC = 1002 200,00 BEGIN_TRANSACTION COMMIT IMPLEMENTAÇÃO DE BANCO DE DADOS GRAUS DE CONSISTENCIA GRAU 3 - OUTRAS TRANSAÇÕES NÃO MODIFICAM QUALQUER DADOS DE T ANTES DE T TERMINAR GRAU 2 - T NÃO LE DADOS MODIFICADOS POR OUTRA TRANSAÇÃO GRAU 1 - T NÃO FAZ COMMIT DE DADOS ESCRITOS ANTES DO FIM DA TRANSAÇÃO GRAU 0 - T NÃO SOBRE-ESCREVE DADOS MODIFICADOS POR OUTRAS TRANSAÇÕES IMPLEMENTAÇÃO DE BANCO DE DADOS ISOLAMENTO UPDATE EMP... EMP Imagem ao inicio do select Nova Imagem SELECT * FROM EMP IMPLEMENTAÇÃO DE BANCO DE DADOS 10 CONSISTÊNCIA/ISOLAMENTO NRCC NOME CPF SALDO 1000 J SILVA 123 500,00 1001 A BARROS 143 500,00 1002 J SILVA 123 200,00 1003 S SALES 223 500,00 AGENCIA R$ 300,00 ------------------ COMPENSAÇÃO 500,00 200,00 500,00 200,00 300,00 R$ 200,00 300,00 IMPLEMENTAÇÃO DE BANCO DE DADOS DURABILIDADE UPDATE EMP... EMP SELECT * FROM EMP Imagem Antiga COMMIT MECANISMO DE RECUPERAÇÃO IMPLEMENTAÇÃO DE BANCO DE DADOS 12 ESTADOS DA TRANSAÇÃO IMPLEMENTAÇÃO DE BANCO DE DADOS Execução concorrente Sejam T1 e T2 duas transações que transferem fundos de uma conta para outra. O saldo inicial de A é 100 e de B 200 A transação T1 transfere 50 reais da conta A para a conta B. A transação T2 transfere 10 por cento do saldo da conta A para a conta B. IMPLEMENTAÇÃO DE BANCO DE DADOS Execução concorrente T1: read(A); A := A – 50; write(A); read(B); B := B + 50; write(B); T2: read(A); temp := A * 0,1; A := A – temp; write(A); read(B); B := B + temp; write(B); IMPLEMENTAÇÃO DE BANCO DE DADOS Execução em seqüência T1 T2 T1 T2 read(A); A := A – 50; write(A); read(B); B := B + 50; write(B); read(A); temp := A * 0,1; A := A – temp; write(A); read(B); B := B + temp; write(B); read(A); A := A – 50; write(A); read(B); B := B + 50; write(B); read(A); temp := A * 0,1; A := A – temp; write(A); read(B); B := B + temp; write(B); Escalas de execução em seqüência: observe que o estado do BD é sempre consistente. IMPLEMENTAÇÃO DE BANCO DE DADOS Execução concorrente ... T1 T2 read(A); A := A – 50; write(A); read(B); B := B + temp; write(B); read(B); B := B + 50; write(B); read(A); temp := A * 0,1; A := A – temp; write(A); Correta T1 T2 read(A); A := A – 50; write(A); read(B); B := B + 50; write(B); read(A); temp := A * 0,1; A := A – temp; write(A); read(B); B := B + temp; write(B); Incorreta IMPLEMENTAÇÃO DE BANCO DE DADOS Serialização O sistema de banco de dados deve controlar a execução concorrente de transações para assegurar que o estado do banco de dados permaneça consistente. A consistência do banco de dados, sob execução concorrente, pode ser assegurada por meio da garantia que qualquer escala executada tenha o mesmo efeito de outra que tivesse sido executada sem qualquer concorrência. Isto é, uma escala de execução deve, de alguma forma, ser equivalente a uma escala seqüencial. IMPLEMENTAÇÃO DE BANCO DE DADOS Controle de Concorrência IMPLEMENTAÇÃO DE BANCO DE DADOS Protocolos com Base em Bloqueio (Métodos Pessimistas) Uma das formas de garantir que apenas escalonamentos serializáveis sejam produzidos é obrigar que o acesso aos itens de dados seja feito de maneira mutuamente exclusiva: Enquanto uma transação acessa um item de dados, nenhuma outra transação pode modificá-lo. Para implementar isso pode-se usar o método de bloqueio (lock). IMPLEMENTAÇÃO DE BANCO DE DADOS Bloqueios Bloqueio compartilhado: Se uma transação Ti obteve um bloqueio compartilhado (denotado por S) sobre o item de dado Q, então Ti pode ler, mas não escrever em Q. Bloqueio exclusivo: Se uma transação Ti obteve um bloqueio exclusivo (denotado por X) do item de dado Q, então Ti pode tanto ler como escrever em Q. Toda transação precisa solicitar o bloqueio apropriado antes de executar qualquer operação sobre Q. IMPLEMENTAÇÃO DE BANCO DE DADOS Bloqueios T1: lock-X(B); read(B); B := B – 50; write(B); unlock(B); lock-X(A); read(A); A := A + 50; write(A); unlock(A); T2: lock-S(A); read(A); unlock(A); lock-S(B); read(B); display (A + B); unlock(B); Se A = 100 e B = 200, o valor mostrado em T2 = 300. IMPLEMENTAÇÃO DE BANCO DE DADOS Ordenamento Timestamp (Método Otimista) Garante seriabilidade: Envolve o uso de timestamp para ordenar a execução das transações de forma que o escalonamento formado seja equivalente ao escalonamento serial. Timestamp: identificador único criado pelo SGBD para identificar uma transação. São associados na ordem em que as transações são submetidas ao sistema. TS(T) = timestamp da transação T No escalonamento as transações tomam a ordem de seus timestamps IMPLEMENTAÇÃO DE BANCO DE DADOS Algoritmo Básico Associa dois timestamps a cada item X: Read_TS(x): o timestamp de leitura de X é o maior entre todos os timestamps de transações que leram X com sucesso; Write_TS(x): o timestamp de escrita de X é o maior entre todos os timestamps de transações que escreveram X com sucesso; Esses timestamps são atualizados sempre que uma instrução read(x) ou write(x) é executada. Assegura que as operações de leitura e escrita sejam executadas por ordem de timestamp. IMPLEMENTAÇÃO DE BANCO DE DADOS Algoritmo Básico Situação 1: a transação T requer uma operação de leitura. Se TS(T) < Write_TS(x), então T quer ler o valor de x que já foi sobrescrito por uma transação mais nova. Assim, a operação read é rejeitada e T é desfeita. Se TS(T) >= Write_TS(x), a transação que requer o dado é mais nova que a últimaque o escreveu. Assim, a operação read é executada e o Read_TS(x) recebe o maior valor entre o atual e o TS(T). IMPLEMENTAÇÃO DE BANCO DE DADOS Algoritmo Básico Situação 2: A transação T requer uma operação de escrita Se TS(T) < Read_TS(x), a transação é mais velha que a última transação que leu, ou seja, o valor de X que T está produzindo seria necessário antes. A operação de write é rejeitada e T é desfeita. 2. Se TS(T) < Write_TS(x) então T está tentando escrever um valor obsoleto em X. Logo, essa operação é rejeitada e T é desfeita. 3. De outro modo, a operação write é executada e o Write_TS(x) é atualizado como TS(T). IMPLEMENTAÇÃO DE BANCO DE DADOS Esquema de Multiversão Os esquemas de controle de concorrência por bloqueio ou por timestamp garantem a serialização atrasando a operação ou abortando a transação responsável por tal operação. Essas dificuldades podem ser evitadas se o sistema providenciar cópias de cada item de dado. Em um sistema de banco de dados multiversão, cada operação write(Q) cria uma nova versão de Q. Quando é emitida uma operação read(Q), o sistema seleciona uma das versões de Q para ser lida. O esquema de controle de concorrência precisa garantir que a seleção da versão lida seja tal que assegure a serialização. IMPLEMENTAÇÃO DE BANCO DE DADOS Controle de Transação no ORACLE IMPLEMENTAÇÃO DE BANCO DE DADOS PREPARAR O AMBIENTE e e IMPLEMENTAÇÃO DE BANCO DE DADOS PREPARAR O AMBIENTE IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS Subconsulta em DML IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS Acesso ao Dicionario de Dados IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS Próxima Aula Aprender a respeito de otimizações TRANSAÇÕES IMPLEMENTAÇÃO DE BANCO DE DADOS IMPLEMENTAÇÃO DE BANCO DE DADOS
Compartilhar