Buscar

WEBAULA 2 - banco de dados

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Web Aula 1
Título: Recuperação e atomicidade de Transações1 
	Recuperação e Atomicidade de transações
Conforme já estamos estudando, um banco de dados controla todas as ações feitas em seus dados como uma transação de banco de dados. Acontece que estas transações podem ter problemas em seu processamento e como é que o SGBD vai garantir que as transações já realizadas não sejam perdidas em caso de problemas. Explicar o que acontece e como sair desta situação é o objetivo desta web-aula.
Um sistema de computação, é uma solução baseada em sistemas aplicativos, sistemas operacionais, sistemas gerenciador de banco de dados e por computadores que são dispositivos elétricos e mecânicos, ou simplesmente eletro-mecânico. E como qualquer outro dispositivo com estas características está sujeito a falhas.
As causas destas falhas podem ser:
Energia elétrica;
Hardware;
Software;
Peopleware;
Sabotagem;
E sempre que acontece uma situação destas, dados podem ser perdidos e uma das principais funções de um banco de dados é garantir a recuperação causada por uma falha e restaurar a consistência e integridade do banco de dados.
Como sabemos, uma transação pode ser constituída por uma ou várias operações lógicas, podendo envolver uma ou mais tabelas e também um ou mais registros.
	Atomicidade
A transação é a menor unidade ou operação física em um banco de dados, podendo ter todas as suas operações concluídas ou desfeitas, nunca apenas parte dela completada, isto garante o ‘tudo ou nada’, também conhecido como atomicidade de transação.
Então o nome atomicidade remete ao conceito de algo indivisível.
Podemos ter várias transações ocorrendo simultaneamente no mesmo banco de dados, por isso ele suporta muitos acessos.
	Classificação de falhas
As falhas podem ser classificadas em duas modalidades:
Falhas com perdas de informação.
Falhas sem perda de informação.
Para que o sistema possa propor algoritmos que assegurem a consistência, integridade e atomicidade após cada falha, precisaram primeiro identificar os tipos de falhas possíveis e dividir o procedimento de recuperação em duas partes.
Ações a serem tomadas durante o processamento normal da transação com o objetivo de assegurar que tenhamos informações suficientes para a recuperação em caso de falha.
Ações a serem tomadas após a falha para assegurar a consistência do banco de dados e a atomicidade da transação.
 
1© Roberto Yukio Nishimura – UNOPAR 2009.
	Tipos de armazenamentos 
Podemos classificar os diversos tipos de armazenamento pela sua velocidade de acesso, capacidade de armazenamento e resistência a falhas.
Armazenamento volátil são a nossa memória principal e a memória cachê, são locais onde os dados não sobrevive a uma falha, o seu acesso é extremamente rápido e direto a qualquer item de dado. Proporcionalmente ao tamanho do banco de dados, são geralmente muito pequenos e comportam pequenas partes ou porções do banco de dados na memória principal.
Armazenamento não volátil são os nossos discos e fitas magnéticas, são locais onde os dados podem ou não sobreviver a uma falha, o acesso tem uma variação no tempo muito grande, pois as diferenças de velocidades entre um disco e uma fita magnética são extremamente grandes.
O disco é utilizado para armazenamento on-line e a fita magnética para armazenamento de backup (históricos dos dados ou reserva).
A variação no tempo de acesso é porque os meios não voláteis são eletro-mecânico e com diferentes tecnologias de funcionamento e acesso.
 Assim como os meios voláteis são muitas vezes mas rápido que os meios não voláteis, os meios não voláteis possuem uma capacidade de armazenamento muitas vezes maior que os meios voláteis.
Os meios voláteis de armazenamento estão na casa das dezenas de GigaBytes e os meios de armazenamento não voláteis começam na casa das centenas de GigaBytes, muito comum as dezenas de TeraBytes e nas grandes empresas e bancos, já entrando na casa das dezenas de PetaBytes.
Armazenamento estável é um aperfeiçoamento do armazenamento não volátil, é a utilização das tecnologias mais atuais e modernas nos quesitos de rapidez e segurança da informação.
Podemos considerar os discos que utilizam a tecnologia RAID, cd-rom / dvd-rom, discos óticos, discos a laser e mais recentemente os discos sólidos SSD (solid state disk).
Existem grandes equipamentos de armazenamento de dados, denominados Storages que trabalham em arquiteturas SAN (storage área network), NAS (network-attached storage) e DAS (direct-attached storage).
	Tipos de falhas
Podemos classificar em 4 tipos de falhas
Erros lógicos – a transação não pode mais continuar com sua execução normal devido a alguma condição interna, como uma entrada com erro, dado não encontrado, overflow ou limite de reservas excedido. Para esta situação, provavelmente está faltando o tratamento adequado das exceções dentro do programa, ou seja, é necessário rever a programação.
Erros do sistema – o sistema entrou num estado indesejável (ex. travamento mútuo ‘deadlock’) e, como resultado, a transação não pode continuar sua execução normal no momento. A transação, no entanto pode ser reexecutada mais tarde sem nenhum problema. Nestes casos, analise o problema cuidadosamente e verifique as características do seu SGBD, pode ser necessária uma nova configuração ou parametrização no seu banco de dados ou em casos extremos até mesmo a troca do seu SGBD.
Queda do sistema – as disfunções do hardware causam a perda do conteúdo do armazenamento volátil, mas o conteúdo do armazenamento não volátil não é afetado, permanecendo intacto. É típico de problemas com o sistema operacional, geralmente é necessário uma correção no sistema operacional através de ‘patches de correção’ ou ‘fixes’, os próprios fornecedores dos sistemas operacionais distribuem estas atualizações para os seus clientes.
Falha no disco – um bloco do disco perde seu conteúdo como resultado de uma falha durante uma transferência de dados ou de uma quebra da cabeça de leitura/gravação. É um problema de hardware, vai necessitar da intervenção de um técnico que cuide do seu servidor e só depois então buscar o seu último backup e iniciar os procedimentos de recuperação.
	Hierarquia de armazenamento 
As operações de entrada e saída são feitas em unidades de blocos.
Os blocos residentes no disco são chamados de blocos físicos, enquanto os blocos residentes temporariamente na memória principal são chamados blocos de buffers.
Os movimentos de blocos entre o disco e a memória principal são iniciados pelas duas operações seguintes:
Input (X) – transfere para a memória o bloco físico no qual reside um item de dados principal X.
Output (X) – transfere para o disco o bloco de buffer no qual reside X e substitui o bloco físico apropriado.
As transações interagem com o sistema de banco de dados transferindo dados de variáveis de programa para o banco de dados e, do banco de dados para as variáveis do programa. Esta transferência de dados é realizada usando as duas operações seguintes:
Read (X, Xi) – atribui o valor de X para a variável local Xi.
- Se o bloco no qual X reside não está na memória principal, então emite um input (X).
- Atribui para Xi o valor de X no bloco de buffer.
Write (X, Xi) – atribui o valor da variável local Xi para o item de dados X no bloco de buffer.
- Se o bloco no qual X reside não está na memória principal, então emite um input (X).
- Atribui o valor de Xi para X no bloco de buffer para X.
A operação output (X) não precisa tomar efeito imediatamente depois que write (X, Xi), pois outros registros podem estar atualizando também. Mas se o sistema cair, depois da operação write (X, Xi) e antes de output (X), o novo valor de X nunca será escrito no disco e portanto estará perdido.
	Modelo de transação
Se estiver consistente quando uma transação iniciou, o banco de dados precisa ser consistente quando a transação terminar com sucesso.
Entretanto, durante a execução de uma transação, pode ser necessário temporariamente permitiresta inconsistência. Essa inconsistência temporária ainda que necessária, pode levar a dificuldades se ocorrer uma falha.
Vamos tomar como exemplo a seguinte transação T.
T : read (A, a1)  a1 := a1 – 50; write (A, a1)
     read (B, b1) b1 := b1 + 50; write (B, b1)
	Consistência e Atomicidade
Cada transação precisa ser um programa que preserve a consistência do banco de dados.
Todas as operações associadas a uma transação precisam ser executadas até o final, ou nenhuma deve ser executada.
Uma transação nem sempre pode completar sua execução com sucesso, quando isto acontece dizemos que ela foi abortada.
A fim de garantir a atomicidade, uma transação abortada não pode ter efeito no estado do banco de dados.
Assim o banco de dados precisa ser restaurado ao estado anterior ao início da transação que foi abortada. Este procedimento de desfazer o que foi iniciado recebe o nome de rollback.
Uma transação completada com sucesso é chamada de compromissada ou comitada (commited).
	Estado de transação 
Uma transação possui o seguinte modelo abstrato:
Ativo – o estado inicial.
Parcialmente compromissado – depois que a última instrução foi executada.
Falhado – depois da descoberta de que uma execução normal não pode mais prosseguir.
Abortado – depois que a transação foi desfeita e o banco de dados foi restaurado ao seu estado anterior ao início da transação.
Compromissado – depois de a transação ser completada com sucesso.
  
 
Uma transação entra no estado falhado depois de ser determinado que a transação não pode mais prosseguir com sua execução normal, então ela precisa ser desfeita, a transação entra no estado abortado, nesse ponto o sistema tem duas opções:
Reiniciar a transação – uma transação reiniciada é considerada uma nova transação. Apenas quando houve um erro de hardware ou software operacional (não de lógica).
Matar a transação – ocorre quando o erro foi de lógica interna, necessitando rever a programação do programa.
Considerando uma transação simples T, com as contas A e B com valor inicial de R$ 1.000,00 e R$ 2.000,00 respectivamente, retirar R$ 50,00 da conta A e creditar R$ 50,00 na conta B, tudo dentro de uma única transação.
Supondo que o problema ocorra depois do output (A) e antes do output (B), o que pode acontecer?
Reexecutar T – isso resultará na conta A com R$ 900,00 em vez de R$ 950,00.
Não Reexecutar T- isso resultará na conta B com 2.000,00 .
Ambas as situações o banco está inconsistente.
	Recuperação baseada em Log
A fim de garantir a atomicidade, o sistema de banco de dados, armazena um espelho da transação que será realizada, descrevendo as modificações envolvidas.
Este modelo é chamado de log do banco de dados.
Temos duas técnicas de gravar os logs.
	Modificação adiada do banco
A técnica de adiar a modificação assegura a atomicidade da transação gravando todas as modificações do banco de dados no log, mas adiando a execução de todas as operações write de uma transação ate que a transação seja parcialmente compromissada.
Quando uma transação torna-se parcialmente compromissada, a informação no log associada à transação é usada na execução de gravações adiadas. Se houver algum problema antes que a transação seja executada, ou abortada, então a informação no log é ignorada.
	Modificação imediata do banco
A técnica da atualização imediata permite a gravação de modificações no banco de dados enquanto a transação está ainda no estado ativo, são chamadas modificações descompromissadas (uncommitted).
Se houver algum problema com a transação, a operação undo deve desfazer as modificações baseadas nas informações contidas no arquivo de log.
Para esta técnica funcionar, antes da operação output (X) ser executada, o log deve estar gravado.
Quando a transação torna-se parcialmente compromissada, o registro de commit é escrito no log.
Espero que tenham gostado desta web-aula, aguardo vocês no nosso blog.
Web Aula 2
Título: Controle de Concorrência 
	Controle de concorrência 
Um SGBD trabalha individualmente com uma transação muito bem, mas o grande desafio para a sua consagração no mercado é sem dúvida a sua capacidade de tratar diversas transações simultaneamente.
Hoje em dia é muito comum e fácil o acesso a computadores com vários processadores ou então com processadores com vários núcleos, a esta característica chamamos de multiprocessador.
Existe também o multiprocessamento, que é a capacidade do sistema operacional executar mais de um programa ao mesmo tempo.
Isto pode ocorrer com um computador com um único processador, neste caso o processador acaba realizando o processamento em paralelo de diversos programas ao simultaneamente.
Se colocarmos mais processadores, ele vai distribuir as tarefas passando rotinas de processamento para cada processador, de modo independente.
E se apenas um programa estiver sendo executado, apenas um processador é utilizado, os demais ficam ociosos.
Mas existem sistemas operacionais mais inteligentes, que aproveitam a capacidade de multiprocessadores dos computadores e realizam uma melhor distribuição de carga de processamento.
Se apenas um programa estiver executando no servidor, o sistema operacional divide as tarefas deste programa entre os diversos processadores do servidor, otimizando assim a carga sobre um único processador e distribuindo entre os vários processadores, acelerando em muito a conclusão do processo.
Este tipo de sistema operacional é conhecido como multiprocessamento simétrico ou SMP, onde é realizado o balanceamento de carga.
O SGBD trabalha em conjunto com o sistema operacional para retirar a melhor performance possível na execução de transações concorrentes, garantindo inclusive a efetiva consistência de todas as transações envolvidas.
Um bom SGBD deve suportar e transacionar desde poucas transações ao mesmo tempo até dezenas e centenas de transações simultaneamente.
A sua capacidade de resolver os problemas que possam ocorrer durante as transações e a integridade que o mesmo garante, fazem com que o SGBD seja confiável.
	Escalonamento (schedules) 
Quando diversas transações são executadas concorrentemente, a consistência do banco de dados pode ser destruída apesar de cada transação individual estar correta.
Podemos afirmar que o escalonamento representa a ordem cronológica da execução de cada instrução no banco de dados.
Uma transação de um programa deve sair de um estado consistente e levar o banco de dados para outro estado consistente também.
Surge então o conceito de seriabilidade, ou seja, o escalonamento das execuções.
	Escalonamento serial
Um escalonamento serial consiste de uma seqüência de instruções de várias transações na qual as instruções pertencentes a uma única transação aparecem juntas naquele escalonamento.
Vamos exemplificar com duas transações T0 e T1.
 
Primeira possibilidade
 
Segunda possibilidade
 
Terceira possibilidade
 
Podemos concluir que apesar dos resultados finais de A e B serem diferentes dependendo do escalonamento escolhido, existe uma consistência preservada no final.
	Escalonamento não serial
Um escalonamento não serial consiste de uma seqüência de instruções de várias transações intercaladas entre si, o que pode provocar temporariamente um estado inconsistente.
Veja o exemplo:
Podemos concluir que o escalonamento não serial pode comprometer a consistência do banco de dados e causar transtornos enormes.
Por uma questão óbvia o escalonamento não serial não é permitido nos SGBDs comerciais mais famosos.
Então chegamos a uma tabela de comparação do escalonamento de conflito serializável.
	Protocolo baseado em bloqueios 
Um modo de assegurar a seriabilidade é requerer que o acesso aos itens de dados seja feito de uma maneira mutuamente exclusiva, isto é, enquanto uma transação faz o acesso a um item de dado, nenhuma outra transação pode modificar aquele item.
O método mais fácil de garantir isto, é fazer com que uma transação ao acessar um dado, mantenha um bloqueioneste dado até o término da sua transação.
	Formas de bloqueio 
Bloqueio partilhado – se uma transação T obteve um bloqueio (lock) no modo partilhado (representado por P) no item de dado A, então T pode ler este item A mas não pode gravar A.
Bloqueio exclusivo – se uma transação T obteve um bloqueio (lock) no modo exclusivo (representado por X) no item de dado A, então T pode ler este item A e somente T poderá gravar A.
Bloqueio de duas fases – nesta forma de bloqueio, o protocolo divide-se em:
Fase de crescimento – uma transação pode obter bloqueios, mas não pode liberar nenhum dos bloqueios feitos.
Fase de encolhimento – uma transação libera um dos bloqueios, mas não pode obter nenhum outro bloqueio até concluir a transação atual.
Inicialmente, uma transação está na fase de crescimento, obtendo quanto bloqueios forem necessários para a sua transação. Uma vez que libere um bloqueio, a transação entrará na fase de encolhimento e não pode mais bloquear nenhum outro dado, até que a transação atual termine. Só então ela poderá começar outra transação com novos bloqueios.
Bloqueio baseado em grafos – nesta técnica, o modelo mais simples requer que tenhamos o conhecimento anterior da ordem na qual os itens do banco de dados serão utilizados, a única instrução permitida é o lock-x (modo exclusivo).
Os bloqueios são realizados utilizando a árvore de acesso aos dados. Muitos dados desnecessários são bloqueados e pode comprometer outras transações.
É um protocolo livre de deadlock porém bloqueia muitos dados desnecessários para a transação.
Bloqueio baseado em marcador de tempo – o método mais comum para fazer isso é utilizar o esquema de ordenação por marcadores de tempo, criando duas variáveis w-timestamp(A) e r-timestamp (A).
Estas variáveis contêm o marcador de tempo lógico do sistema para identificar nas transações quem chegou primeiro e quem chegou depois no dado.
Os marcadores de tempo são atualizados toda vez que uma instrução read ou write for executada.
Espero que tenham gostado desta web-aula, aguardo vocês no nosso blog.

Outros materiais