Buscar

Bancos de Dados Distribuídos

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 60 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 60 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 60 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

Éverton Alves de Oliveira 
 
 
 
 
 
 
 
 
 
Banco de Dados Distribuído no Desenvolvimento 
de Aplicações Comerciais 
 
 
 
 
 
 
 
 
 
 
 
 
 
Londrina 
2006
 
 I 
 
Éverton Alves de Oliveira
 
 
 
 
 
 
 
 
Banco de Dados Distribuído no Desenvolvimento 
de Aplicações Comerciais 
 
 
 
 
 
 
 
Monografia apresentada ao Curso de Pós-
Graduação em Engenharia de Software e 
Banco de Dados da Universidade Estadual de 
Londrina, como requisito parcial à obtenção 
do título de Especialista. 
 
Orientador: Prof. Ms. Daniel dos Santos Kaster 
 
 
 
 
 
 
 
Londrina 
2006 
 
 II 
Éverton Alves de Oliveira 
 
 
 
Banco de Dados Distribuído no Desenvolvimento 
de Aplicações Comerciais 
 
 
 
 
Monografia apresentada ao Curso de Pós-
Graduação em Engenharia de Software e Banco 
de Dados da Universidade Estadual de Londrina, 
como requisito parcial à obtenção do título de 
Especialista. 
 
 
 
 
 
 
COMISSÃO EXAMINADORA 
 
 
______________________________________________ 
Prof. Ms. Daniel dos Santos Kaster 
Universidade Estadual de Londrina 
 
______________________________________________ 
Prof. Ms. Rodolfo Miranda de Barros 
Universidade Federal do Rio de Janeiro 
 
______________________________________________ 
Prof. Ms. Fábio Cezar Martins 
Universidade Estadual de Londrina 
 
 
 
 
Londrina, ____ de____________ de 2007
 
 III 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
DEDICATÓRIA 
 
Dedicado à minha família que me apoiou e a 
amigos que me incentivaram e contribuíram 
para tornar possível mais esta etapa de 
aprendizado em minha trajetória.
 
 IV 
OLIVEIRA, Éverton A.: Banco de Dados Distribuído no Desenvolvimento de 
Aplicações Comerciais. 2006. Monografia (Especialização em Engenharia de Software e 
Banco de Dados) - Universidade Estadual de Londrina. 
 
 
 
 
RESUMO 
 
 
A tecnologia de Banco de Dados Distribuído une as tecnologias de redes de comunicação e 
banco de dados, dando origem a um poderoso sistema distribuído que tem como principais 
finalidades proporcionar maior segurança e disponibilidade dos dados e tornar possível a 
integração de dados entre empresas geograficamente distantes e que utilizam diferentes 
estruturas de armazenamento de dados. No capítulo introdutório deste trabalho são 
apresentados de forma sintetizada os conceitos que constituem as bases para a compreensão 
desta tecnologia. Os capítulos subseqüentes irão aprofundar os conceitos de fragmentação e 
replicação de dados, apresentar estratégias de fragmentação e abordar os desafios da 
tecnologia no que se refere a transações e consultas distribuídas. Por fim, é apresentado um 
estudo de caso que demonstra a implementação de um sistema de banco de dados 
distribuído aplicando os conceitos estudados. 
 
 
 
 
 
 
 
 
 
Palavras-chave: Banco de dados, fragmentação, replicação, distribuição, site. 
 
 V 
OLIVEIRA, Éverton A.: Distributed Database in Development of Commercial 
Applications. 2006. Monografia (Especialização em Engenharia de Software e Banco de 
Dados) - Universidade Estadual de Londrina. 
 
 
 
 
ABSTRACT 
 
 
 
The technology of Distributed Database unites the technologies of communication 
networks and databases, creating a powerful distributed system which its main purpose is to 
provide more safety and readiness of the data and turn possible the integration of data 
among companies geographically distant which use different structures of data storage. In 
the introduction chapter of this article, the concepts are presented in a synthesized way that 
constitutes the bases for the understanding of this technology. The next chapters will 
deepen the fragmentation concepts and response of data, present fragmentation strategies 
and approach the challenges of the technology in what refers to transactions and distributed 
queries. Finally, it is presented a study case that demonstrates the implementation of a 
system of distributed database applying the studied concepts. 
 
 
 
 
 
 
 
 
 
Keywords: Database, fragmentation, replication, distribution, site.
 
 VI 
SUMÁRIO 
 
1. INTRODUÇÃO ............................................................................................................1 
1.1 OBJETIVOS...............................................................................................................2 
1.1.1 Objetivo geral .................................................................................................2 
1.1.2 Objetivos específicos ......................................................................................2 
1.2 JUSTIFICATIVA .........................................................................................................2 
1.3 PRESSUPOSTOS........................................................................................................2 
2. SISTEMAS DE BANCO DE DADOS DISTRIBUÍDOS ..........................................4 
2.1 PROMESSAS DE SBDDS...........................................................................................5 
2.1.1 Independência de dados .................................................................................7 
2.1.2 Transparência de rede....................................................................................8 
2.1.3 Transparência de replicação..........................................................................8 
2.1.4 Transparência de fragmentação.....................................................................8 
2.1.5 Quem deve proporcionar transparência? ......................................................9 
2.1.6 Confiabilidade em transações distribuídas ....................................................9 
2.2 FATORES DE COMPLICAÇÃO...................................................................................11 
2.2.1 Processamento distribuído de consultas ......................................................11 
2.2.2 Controle distribuído da concorrência ..........................................................11 
2.2.3 Gerenciamento distribuído de impasses.......................................................12 
2.2.4 Bancos de dados heterogêneos.....................................................................12 
3. PROJETO DE BANCO DE DADOS DISTRIBUÍDO............................................13 
3.1 RAZÕES PARA A FRAGMENTAÇÃO..........................................................................13 
3.2 GRAU DE FRAGMENTAÇÃO....................................................................................14 
3.3 ALTERNATIVAS DE FRAGMENTAÇÃO.....................................................................15 
3.3.1 Fragmentação horizontal .............................................................................15 
3.3.2 Fragmentação vertical .................................................................................16 
3.4 REGRAS DE FRAGMENTAÇÃO.................................................................................17 
3.5 ALOCAÇÃO............................................................................................................18 
4. PROCESSAMENTO DE CONSULTAS DISTRIBUÍDAS....................................20 
4.1 TRANSFORMAÇÃO DE CONSULTA...........................................................................22 
4.2 LOCALIZAÇÃO DE DADOS DISTRIBUÍDOS................................................................25 
5. TRANSAÇÕES DISTRIBUÍDAS.............................................................................27 
5.1 PROPRIEDADES DE TRANSAÇÕES............................................................................28 
5.2 CONTROLE DE TRANSAÇÕES DISTRIBUÍDAS...........................................................29 
5.3 CONTROLE DISTRIBUÍDO DA CONCORRÊNCIA.........................................................30 
5.3.1 Algoritmos baseados em bloqueios ..............................................................31 
5.3.2 Algoritmos baseados em timbre de hora......................................................32 
5.3.3 Gerenciamento de impasses .........................................................................33 
5.3.4 Algoritmos otimistas para controle de concorrência...................................35 
6. CONFIABILIDADE DE SGBDS DISTRIBUÍDOS................................................36 
 
 VII 
6.1 PROTOCOLOS DE EFETIVAÇÃO...............................................................................38 
6.1.1 Efetivação em duas fases..............................................................................38 
6.1.2 Efetivação em três fases ...............................................................................39 
7. ESTUDO DE CASO...................................................................................................42 
7.1 CONCEITOS BÁSICOS..............................................................................................43 
7.2 CONFIGURANDO SERVIDORES................................................................................44 
7.3 CRIANDO O BANCO DE DADOS................................................................................44 
7.4 CRIANDO PUBLICAÇÕES.........................................................................................45 
7.5 CONFIGURANDO ASSINATURAS..............................................................................46 
8. CONCLUSÃO.............................................................................................................48 
9. REFERÊNCIAS BIBLIOGRÁFICAS .....................................................................49 
 
 VIII 
LISTA DE ABREVIATURAS 
 
SBDD Sistema de Banco de Dados Distribuído 
SGBD Sistema Gerenciador de Bancos de Dados 
SQL Structured Query Language 
ACID Atomicidade, consistência, isolamento e durabilidade 
2PC two-phase commit 
3PC three-phase commit 
 
 
 IX 
LISTA DE FIGURAS 
 
Figura 1.1: Modelagem do banco de dados da Instituição financeira...................................17 
Figura 4.1: Modelo de fragmentação do banco dados..........................................................34 
Figura 4.2: Estratégia 1 de processamento de consulta.........................................................35 
Figura 4.3: Estratégia 2 de processamento de consulta.........................................................35 
Figura 7.1: Banco de dados fragmentado e replicado...........................................................52
 
 X 
LISTA DE TABELAS 
 
Tabela 3.1: Fragmentação horizontal da relação CLIENTE.................................................26 
Tabela 3.2: Fragmentação horizontal da relação CONTA....................................................27 
Tabela 3.3: Fragmentação vertical da relação CONTA........................................................28 
Tabela 3.4: Comparação entre alternativas de replicação.....................................................30 
Tabela 7.1: Dicionário de dados do banco de dados Instituição Financeira.........................56 
 
 1 
1. Introdução 
 
 
O maior objetivo de um sistema bancos de dados é manter a integridade dos dados e 
não centralizá-los. Os Sistemas de Bancos de Dados Distribuídos (SBDDs) são a união de 
duas tecnologias que podem ser consideradas de propósitos opostos dentro da computação: 
o sistema de bancos dados, que visa promover a integração dos dados operacionais de um 
empreendimento e proporcionar acesso centralizado, e as redes de comunicação, que 
promove um modo de trabalho que se opõem a todos os esforços de centralização. 
Um banco de dados distribuído constitui de um conjunto de bancos de dados 
logicamente inter-relacionados, distribuídos em diversos servidores através de uma rede de 
comunicação. Cada servidor armazena uma parte do banco de dados e é desejável que uma 
determinada partição dos dados esteja armazenada em mais de um local. Uma vez que cada 
servidor não opera sobre o banco de dados inteiro, mas apenas sobre parte dele, obtém-se 
maior performance na manutenção dos dados. Quando uma consulta ao banco de dados 
necessita de dados que estão presentes em diversos sites, é possível distribuir a consulta de 
modo que cada site processe uma parte dela, fazendo uso de processamento paralelo, o que 
também contribui para o ganho de performance. E ainda, o fato de uma partição de dados 
estar replicada em mais de um site, proporciona maior disponibilidade dos dados no 
sistema, pois ainda que ocorra uma falha em um dos sites, os dados armazenados por ele 
podem ser encontrados em outro local. 
A tecnologia de Banco de Dados Distribuídos não é popularmente utilizada por ser 
de difícil implementação. Todas as dificuldades enfrentadas em um sistema de banco de 
dados centralizado são potencializadas em um contexto distribuído, pois como se trata de 
um sistema distribuído através de uma rede, existem os problemas relacionados à 
comunicação e ao tráfego da rede. Outro agravante é o fato de existirem cópias de uma 
determinda porção de dados em diversos locais, o que proporciona maior dificuldade na 
manutenção da consistência entre todas as réplicas, pois uma única transação pode estar 
sendo executada em diversos sites e atualizando várias réplicas de um mesmo fragmento de 
dados. 
 
 2 
1.1 Objetivos 
1.1.1 Objetivo geral 
O objetivo deste trabalho é introduzir os conceitos básicos para a compreensão da 
tecnologia de bancos de dados distribuídos, bem como apresentar um caso de sua utilização 
e a aplicação dos conceitos apresentados. 
1.1.2 Objetivos específicos 
• Relacionar as propostas da tecnologia de banco de dados distribuído; 
• Definir os conceitos básicos de fragmentação e replicação de dados; 
• Apresentar os conceitos e a complexidade de transações e consultas no contexto 
distribuído; 
• Apresentar um estudo de caso de implementação da tecnologia de banco de 
dados distribuído utilizando o Microsoft® SQL Server™ 2000. 
 
1.2 Justificativa 
A tecnologia de bancos de dados distribuídos é uma solução utilizada tipicamente 
por grandes corporações, nas quais a total segurança e disponibilidade dos seus dados são 
fatores críticos. O conhecimento desta tecnologia pode oferecer ao profissional de 
computação a possibilidade de desenvolver sistemas comerciais voltados para empresas 
constituídas de diversas unidades filiais e/ou setores, distanciados geograficamente, e que 
visam integração de seus dados. 
 
1.3 Pressupostos 
Considera-se o prévio conhecimento das tecnologias de bancos de dados e redes de 
computadores no contexto de desenvolvimento de sistemas computacionais. 
 
 3 
Esta monografia está organizada da seguinte forma: o capítulo 2 apresenta 
resumidamente os conceitos básicos, as propostas e os desafios a serem enfrentado pela 
tecnologia de Banco de Dados Distribuídos. O capítulo 3 aprofunda os conceitos de 
fragmentação e replicação de dados bem como as técnicas existentes. O capítulo 4 trata do 
processamento distribuído de consultas, seguido do capítulo 5 que aborda as características 
e dificuldades das transações distribuídas. O capítulo 6 descreve os protocolos de 
efetivação de transações distribuídas e por fim, o capítulo 7 demonstra utilizando o SGDB 
Microsoft® SQL Server™ 2000 um estudo de caso de utilização desta tecnologia, 
empregando os conceitos apresentados. 
 
 4 
2. Sistemas de Banco de Dados Distribuídos 
 
O termo processamento distribuído talvez seja o termo mais excessivamente 
utilizado em informática nos últimos anos para se referir a sistemas tão diversos quanto 
sistemas de multiprocessadores, processamento de dados distribuídos e redes de 
computadores. Será considerada uma definição de processamento distribuído de um modo 
que leva a compreensão do que é um sistema de banco de dados distribuído. A definição 
funcional usada para um sistema de computação distribuída estabelece que ele consiste em 
diversos elementos autônomos de processamentoque estão interconectados por uma rede 
de computadores que cooperam entre si na execução de suas tarefas [Özsu, M.; Valduriez, 
2001]. 
Mas o que pode ser distribuído em um sistema de computação distribuída? Um dos 
itens que pode ser distribuído é a lógica de processamento. De fato, a definição de um 
sistema de computação distribuída dada anteriormente pressupõe implicitamente que a 
lógica de processamento ou os elementos de processamento são distribuídos. Outra 
distribuição possível é feita de acordo com a função. Várias funções de um sistema de 
computador poderiam ser delegadas a diversas peças de hardware ou software. Um terceiro 
modo de distribuição possível é de acordo com os dados. Os dados usados por vários 
aplicativos podem ser distribuídos em diversos locais (sites) de processamento. Por fim, o 
controle pode ser distribuído. O controle da execução de várias tarefas poderia ser 
distribuído, em lugar de ser executado por um único sistema de computador. Do ponto de 
vista de banco de dados distribuídos, esses modos de distribuição são todos necessários e 
importantes [Özsu, M.; Valduriez, 2001]. 
Outra pergunta importante a ser feita é: por que distribuir? Todavia, pode-se afirmar 
que a motivação fundamental por trás do processamento distribuído é ser capaz de dividir 
os problemas computacionais em fragmentos menores atribuindo-os a grupos de software 
distintos, que funcionem em computadores diferentes e produzam um sistema que atue 
sobre vários elementos de processamento, mas que possam colaborar de forma eficaz para a 
execução de uma tarefa comum. 
 
 5 
Essa abordagem apresenta duas vantagens fundamentais sob um ponto de vista de 
economia. Primeiro, a computação distribuída proporciona um método econômico para se 
conseguir maior poder de computação, empregando-se vários elementos de processamento 
de maneira ótima. A segunda razão econômica é que a dissolução dos problemas em grupos 
menores atuando de forma mais ou menos autônoma talvez torne possível disciplinar o 
custo de desenvolvimento de software [Özsu, M.; Valduriez, 2001]. 
Os sistemas de banco de dados distribuídos também devem ser vistos dentro dessa 
estrutura e tratados como ferramentas que podem tornar o processamento distribuído mais 
fácil e eficiente e sem dúvida ajudar na tarefa de desenvolver software distribuído. 
Pode-se definir um banco de dados distribuído como uma coleção de vários bancos 
de dados logicamente inter-relacionados, distribuídos por uma rede de computadores, e é 
gerenciado por um sistema de software chamado sistema gerenciador de bancos de dados 
distribuídos (SGBDD) que tem o objetivo de tornar a distribuição transparente para o 
usuário. O conceito de transparência neste contexto se refere à separação entre a semântica 
de nível mais alto de um sistema e questões de implementação de nível mais baixo. Em 
outras palavras, um sistema transparente deve ser capaz de ocultar do usuário os detalhes de 
implementação [Özsu, M.; Valduriez, 2001]. 
 
2.1 Promessas de SBDDs 
Para iniciar a compreensão dos conceitos que envolvem a tecnologia de sistemas de 
bancos de dados distribuídos e suas propostas, será utilizado um pequeno exemplo. Uma 
instituição financeira possui agências nas cidades A, B e C, ela necessita manter um banco 
de dados de seus clientes, suas contas correntes e das movimentações financeiras realizadas 
diariamente. Para isso, utiliza um banco de dados formado pelas relações CLIENTE, 
CONTA e MOVIMENTO, inter-relacionadas conforme a figura abaixo: 
 
 6 
 
Figura 1.1: Modelagem do banco de dados da Instituição Financeira 
 
Se todos estes dados estivessem armazenados em um SGBD centralizado e fosse 
necessário realizar uma consulta que mostrasse o nome e saldo da conta corrente de todos 
os clientes cujas contas correntes sofreram movimentações no dia 06/01/2006, estes dados 
poderiam ser obtidos através da seguinte consulta SQL: 
 
 SELECT DISTINCT CLIENTE.NOME, CONTA.SALDO 
 FROM CLIENTE, CONTA, MOVIMENTO 
 WHERE MOVIMENTO.DATA = '06/01/2006' 
 AND MOVIMENTO.AGENCIA = CONTA.AGENCIA 
 AND MOVIMENTO.CONTA = CONTA.NUMERO_CONTA 
 AND CLIENTE.CODIGO_CLIENTE = CONTA.CODIGO_CLIE NTE 
 
Porém, data a natureza distribuída dos negócios da instituição financeira, é 
preferível, sob essas circunstâncias, que os dados referentes às contas correntes da agência 
localizada na cidade A estejam armazenadas na cidade A, os dados referentes às contas 
correntes da agência localizada na cidade B estejam armazenadas na cidade B e assim por 
diante. Desse modo, cada uma das relações deve ser particionada e cada uma das partições 
armazenadas em um local diferente. Isso é conhecido como fragmentação. Além disso, 
talvez seja preferível duplicar alguns desses dados em outros locais por razões de 
desempenho e confiabilidade, utilizando assim o recurso conhecido como replicação. O 
resultado é um banco de dados distribuído que é fragmentado e replicado. O acesso 
totalmente transparente significa que os usuários ainda podem formular a consulta da 
 
 7 
maneira especificada anteriormente, sem qualquer preocupação com a fragmentação, a 
localização ou a replicação dos dados, e deixar a cargo do sistema a resolução dessas 
questões [Silberschatz, A.; Korth, H.; Sudarshan, S., 1999]. 
Para um sistema lidar de maneira adequada com esse tipo de consulta sobre um 
banco de dados distribuído, fragmentado e replicado, ele precisa ser capaz de lidar com 
vários tipos diferentes de transparências. 
2.1.1 Independência de dados 
A independência de dados se refere à imunidade de aplicativos do usuário a 
mudanças na definição na organização de dados, e vice-versa. É uma forma fundamental de 
transparência que procuramos dentro de um SGDB, é também o único importante dentro do 
contexto do SGDB centralizado [Özsu, M.; Valduriez, 2001]. 
A definição de dados pode ocorrer em dois níveis. Em um nível a estrutura lógica 
dos dados é especificada, conhecida como definição do esquema, e no outro nível a 
estrutura física dos dados é definida, referido como a descrição dos dados físicos. Portanto, 
são considerados dois tipos de independência de dados: independência de dados lógica e 
independência de dados física. 
A independência de dados lógica se refere à imunidade de aplicativos do usuário a 
mudanças na estrutura lógica do banco de dados. Em geral, se um aplicativo do usuário 
opera sobre um subconjunto dos atributos de uma relação, ela não deve ser afetada mais 
tarde quando novos atributos forem acrescentados à mesma relação [Özsu, M.; Valduriez, 
2001]. 
A independência de dados física lida com a ocultação dos detalhes da estrutura de 
armazenamento em relação aos aplicativos do usuário. Quando um aplicativo do usuário é 
escrito, ele não deve se preocupar com os detalhes da organização física dos dados. Os 
dados poderiam estar organizados em tipos de discos diferentes, partes deles poderiam estar 
organizados de maneiras diferentes, ou poderiam até mesmo estar distribuídos em 
hierarquias de memória distintas. O aplicativo não deve se envolver com estas questões 
porque, conceitualmente, não há nenhuma diferença nas operações executadas sobre os 
dados [Özsu, M.; Valduriez, 2001]. 
 
 8 
2.1.2 Transparência de rede 
Em sistemas de bancos de dados centralizados, o único recurso disponível que 
precisa ser isolado do usuário é o dado. Contudo, em um ambiente de gerenciamento de 
banco de dados distribuído a rede é um segundo recurso que precisa ser administrado quase 
da mesma maneira. É desejável que o usuário esteja protegido contra os detalhes 
operacionais da rede e, se possível, ocultar até mesmo a existência de uma rede, ter meios 
uniformes pelos quais os serviços sejam acessados e exigir que o usuário não tenha que 
especificar onde os dados estão localizados. Esse tipo de transparência é referido como 
transparência de rede ou transparência de distribuição[Özsu, M.; Valduriez, 2001]. 
2.1.3 Transparência de replicação 
Em geral, por razões de desempenho, confiabilidade e disponibilidade, é desejável 
poder distribuir os dados de forma replicada pelas máquinas de uma rede. Tal replicação 
ajuda ao desempenho, pois, requisitos do usuário distintos e conflitantes podem ser 
acomodados com maior facilidade. Por exemplo, os dados comumente acessados por um 
usuário podem ser localizados mais próximos dele, assim como de outro usuário com os 
mesmos requisitos de acesso. Além disso, se uma máquina falhar, uma cópia dos dados 
ainda estará disponível na rede. É claro que esta é uma descrição muito simplificada da 
situação. Na verdade, a decisão de replicar ou não os dados e de quantas cópias existirão 
dependerá em um grau considerável dos aplicativos do usuário, pois a replicação causa 
problemas na atualização do banco de dados [Özsu, M.; Valduriez, 2001]. 
A questão relacionada com a transparência que precisa ser examinada neste ponto é 
se os usuários devem estar cientes da existência de cópias, ou se o sistema deve tratar o 
gerenciamento de cópias enquanto o usuário deve agir como se houvesse uma única cópia 
dos dados. Obviamente que é preferível não se envolver com a manipulação de cópias e 
com a obrigação de especificar se uma certa ação pode e/ou deve ser executada sobre várias 
cópias. 
2.1.4 Transparência de fragmentação 
É desejável dividir cada relação de um banco de dados em fragmentos menores, e 
tratar cada fragmento como um objeto de banco de dados separado (isto é, outra relação). 
 
 9 
Isso é feito normalmente por motivos de desempenho, disponibilidade e confiabilidade. 
Além disso, a fragmentação pode reduzir os efeitos negativos da replicação, pois cada 
réplica não é a relação completa, mas apenas um subconjunto dessa relação, desse modo, é 
exigido menos espaço, e menos itens de dados precisam ser administrados. 
Há dois tipos gerais de alternativas de fragmentação. Em um caso, chamado de 
fragmentação horizontal, uma relação é particionada em um conjunto de sub-relações, cada 
uma das quais tem um subconjunto das tuplas (linhas) da relação original. A segunda 
alternativa é a fragmentação vertical, na qual cada sub-relação é definida sobre um 
subconjunto dos atributos (colunas) da relação original [Özsu, M.; Valduriez, 2001]. 
A questão fundamental de se lidar com a transparência de fragmentação está 
relacionada com o processamento de consultas, pois existe o problema de manipular 
consultas do usuário que foram especificadas sobre relações inteiras, mas que agora têm de 
ser executadas em sub-relações. 
2.1.5 Quem deve proporcionar transparência? 
É muito importante perceber que níveis razoáveis de transparência dependem de 
vários componentes dentro do ambiente de gerenciamento de dados. A transparência de 
rede pode ser tratada facilmente pelo sistema operacional distribuído como parte de suas 
responsabilidades de oferecer transparência de replicação e de fragmentação. O SGBD deve 
ser responsável por oferecer um nível elevado de independência de dados, juntamente com 
a transparência de replicação e fragmentação. Por fim, a interface do usuário pode admitir 
um nível mais alto de transparência, não apenas em termos de um método de acesso 
uniforme aos recursos de dados dentro de uma linguagem, mas também em termos de 
construções de estrutura que permite ao usuário lidar com objetos em seu ambiente, em vez 
de se concentrar em detalhes de descrição do banco de dados [Özsu, M.; Valduriez, 2001]. 
2.1.6 Confiabilidade em transações distribuídas 
Os SGBDs distribuídos são planejados para melhorar a confiabilidade, pois têm 
componentes replicados e, portanto, eliminam pontos únicos de falha. A falha de um único 
site ou falha de um link de comunicação que torne um ou mais sites inacessíveis não são 
suficientes para deixar inativo o sistema inteiro. No caso de um banco de dados distribuído, 
 
 10 
isso significa que alguns dados podem estar inacessíveis, mas, com cuidado apropriado, é 
possível que os usuários tenham permissão para acessar outras partes do banco de dados 
distribuído [Silberschatz, A.; Korth, H.; Sudarshan, S., 1999]. 
Uma transação é uma unidade básica de computação consistente e confiável, 
formada por uma seqüência de operações de bancos de dados executadas como uma ação 
atômica [Özsu, M.; Valduriez, 2001]. Isso significa dizer que esta seqüência de várias 
operações é executada como se fosse uma única operação, e se parte desta operação não 
puder ser executada, nada será executado, permanecendo o banco de dados em seu último 
estado de consistência. Ela tem o objetivo de garantir que o banco de dados deixe um 
estado de consistência somente para entrar em outro estado de consistência, mesmo quando 
várias destas transações são executadas de forma concorrente, e até mesmo quando ocorrem 
falhas (atomicidade de falha). 
Examinando uma transação baseada no exemplo da instituição financeira discutida 
anteriormente, considera-se que um aplicativo aumente o limite de crédito em 5% em todas 
as contas que possuem saldo superior a dois mil reais. É desejável encapsular esta operação 
dentro dos limites de uma transação. Caso ocorra uma falha durante a execução deste 
programa, o SGBD deverá ser capaz de determinar, ao ocorrer a recuperação, onde o 
programa foi interrompido e de continuar com sua operação ou começar tudo de novo. Por 
outro lado, caso não ocorram falhas, e outro usuário executar uma consulta para calcular a 
média dos limites de crédito das contas correntes enquanto a ação original de atualização 
estiver em andamento, o resultado calculado estará incorreto. Neste caso o sistema deve ser 
capaz de sincronizar a execução concorrente desses dois programas. 
A transação anterior será executada nas cidades A, B e C. Com suporte total para 
transações distribuídas, os aplicativos dos usuários devem acessar uma única imagem 
lógica do banco de dados e confiar no SGBD distribuído para assegurar que suas 
solicitações serão executadas corretamente, independente do que acontecer no sistema. Isto 
significa que os aplicativos do usuário não precisarão se preocupar com a coordenação de 
seus acessos a banco de dados locais individuais, nem terão de se preocupar com a 
possibilidade de falhas de sites ou links de comunicação durante a execução de suas 
transações. 
 
 
 11 
2.2 Fatores de complicação 
Os problemas encontrados em sistemas de bancos de dados impõem uma 
complexidade adicional em um ambiente distribuído, pois, os dados podem ser replicados 
em um ambiente distribuído. Não é essencial que todo site na rede contenha uma cópia do 
banco de dados, só é essencial que existe mais de um local em que o banco de dados esteja 
presente. Conseqüentemente, o sistema de banco de dados distribuído é responsável por 
escolher uma das cópias dos dados solicitados para acesso em caso de recuperação, e 
assegurar que o efeito de uma atualização se refletirá em todas as cópias existentes desse 
item de dado [Özsu, M.; Valduriez, 2001]. 
Outro agravante encontrado em um ambiente distribuído é em caso de falhas em 
alguns sites ou links de comunicação enquanto uma atualização estiver em andamento. O 
sistema deverá assegurar que os efeitos se refletirão nos dados residentes nos sites 
defeituosos, tão logo o sistema possa se recuperar da falha. 
Como cada site não pode ter informações instantâneas sobre as ações que estão 
ocorrendo nos outros sites no momento, a sincronização de transações em vários sites é 
consideravelmente mais difícil que no caso de um sistema centralizado, caracterizando mais 
um ponto crítico em sistemas de bancos de dados distribuídos. 
2.2.1 Processamento distribuído de consultas 
Para um SBDD o problema do processamento de consultas está em como decidir 
sobre uma estratégia para a execução de cada consulta através da rede da maneira mais 
econômica, considerando a distribuiçãodos dados, os custos de comunicação e a falta de 
informações suficientes disponíveis no local. 
2.2.2 Controle distribuído da concorrência 
No controle da concorrência em um contexto distribuído é necessário não apenas se 
preocupar com a integridade de um único banco de dados, como ocorre em um sistema 
centralizado, mas também com a consistência de várias cópias do banco de dados. Para 
isso, duas classes gerais de controle de concorrência são consideradas, o controle pessimista 
e o controle otimista [Özsu, M.; Valduriez, 2001]. 
 
 12 
O primeiro, sincroniza a execução de solicitações do usuário antes de iniciar a 
execução, e o segundo, executa as solicitações e depois verifica se a execução 
comprometeu a consistência do banco de dados. Duas primitivas básicas que podem ser 
usadas com ambas as abordagens são o bloqueio, que se baseia na exclusão mútua de 
acesso a itens de dados, e o uso de timbre de hora, no qual as transações são executadas em 
alguma ordem. Existem variações desses esquemas, bem como algoritmos híbridos que 
tentam combinar os dois mecanismos básicos [Özsu, M.; Valduriez, 2001]. 
2.2.3 Gerenciamento distribuído de impasses 
O problema de impasses em SBDDs tem natureza muito semelhante ao encontrado 
em sistemas operacionais. A competição entre usuários pelo acesso a um conjunto de dados 
pode resultar em um impasse, se o mecanismo de sincronização se basear em bloqueios. 
2.2.4 Bancos de dados heterogêneos 
Normalmente, bancos de dados distribuídos heterogêneos surgem quando há a 
necessidade de integrar SGBDs já existentes autônomos e centralizados. A heterogeneidade 
pode ocorrer de várias formas nos sistemas distribuídos, variando desde a heterogeneidade 
de hardware e diferenças em protocolos de interligação de redes até variações em 
gerenciadores de dados, como linguagens de consulta e protocolos de gerenciamento de 
transações [Özsu, M.; Valduriez, 2001]. 
 
 13 
3. Projeto de banco de dados distribuído 
 
O projeto de sistema de computadores distribuídos inclui decisões sobre a 
disposição dos dados e programas pelos sites de uma rede de computadores, como também 
o possível projeto da própria rede. No caso de SGBDs distribuídos, a distribuição dos 
aplicativos inclui dois itens: a distribuição do software de SGBD distribuído e a 
distribuição dos programas aplicativos que funcionam nele. Neste caso, considera-se que 
existe uma cópia do software do SGBD distribuído em cada site e que a localização dos 
programas não é relevante. Além disso, considera-se que a rede já foi projetada ou que será 
projetada posteriormente, de acordo com as decisões relativas ao banco de dados 
distribuído. Portanto, o que deve ser considerado primordialmente em projeto de banco de 
dados distribuído é localização dos dados [Özsu, M.; Valduriez, 2001]. 
 
3.1 Razões para a fragmentação 
Sob um ponto de vista de distribuição de dados, não há nenhuma razão real para a 
fragmentar dados. Afinal, em sistemas de arquivos distribuídos a distribuição é realizada 
sobre arquivos inteiros. 
Com relação à fragmentação, a questão mais importante é a unidade apropriada de 
distribuição. Uma relação não é uma unidade adequada, por várias razões. Primeiro, em 
geral as visões de aplicativos são subconjuntos de relações. Portando, o caráter local de 
acessos de aplicativos não é definido sobre relações inteiras, mas sim sobre seus 
subconjuntos. 
Segundo, sendo a relação inteira a unidade de distribuição e os aplicativos que têm 
visões definidas sobre uma dada relação residem em sites diferentes, podem ser seguidas 
duas alternativas. Ou a relação não é replicada e é armazenada em um único site, o que 
resultaria em um volume desnecessariamente alto de acessos remotos aos dados. Ou então 
ela é replicada em todos ou alguns sites onde residem os aplicativos, o que geraria 
problemas na execução de atualizações. 
 
 14 
Por fim, a decomposição de uma relação em fragmentos, sendo cada um deles 
tratado como uma unidade, permite que várias transações sejam executadas de forma 
concorrente. Além disso, a fragmentações de relações em geral resulta na execução paralela 
de uma única consulta, dividindo-a em conjunto de subconsultas que operam sobre 
fragmentos. 
Além disso, é necessário também mencionar as desvantagens da fragmentação. Se 
os aplicativos têm requisitos conflitantes que impedem a decomposição das relações em 
fragmentos mutuamente exclusivos, esses aplicativos cujas visões são definidas sobre mais 
de um fragmento podem sofrer degradação de desempenho. O segundo problema está 
relacionado com o controle semântico de dados semânticos, especificamente com 
verificação de integridade. Como resultado da fragmentação, os atributos que participam de 
uma dependência podem ser decompostos em diferentes fragmentos, os quais poderiam ser 
alocados em sites diferentes. Nesse caso, até mesmo a tarefa mais simples de verificação de 
dependência resultaria em uma busca por dados em diversos sites [Özsu, M.; Valduriez, 
2001]. 
 
3.2 Grau de fragmentação 
O grau de fragmentação a que um banco de dados deve ser submetido representa 
uma decisão importante que afeta o desempenho do processamento de consultas. O grau de 
fragmentação vai de um extremo de nenhuma fragmentação a outro extremo, que seria 
fragmentação até o nível de tuplas individuais (no caso de fragmentação horizontal) ou até 
o nível de atributos individuais (no caso de fragmentação vertical). 
Considerando os efeitos adversos de unidades de fragmentação muito grandes ou 
muito pequenas, conforme analizado anteriormente, é necessário encontrar um nível 
adequado de fragmentação que mantenha um compromisso com os dois extremos. Tal nível 
só pode ser definido em relação aos aplicativos que atuarão sobre o banco de dados [Özsu, 
M.; Valduriez, 2001]. 
 
 15 
3.3 Alternativas de fragmentação 
As instâncias de relações são essencialmente tabelas, a assim a questão é encontrar 
modos alternativos de dividir uma tabela em tabelas menores. Existem duas alternativas 
para isso: dividir a tabela horizontalmente ou verticalmente. 
3.3.1 Fragmentação horizontal 
A fragmentação horizontal particiona uma relação em suas tuplas. Portanto, cada 
fragmento tem um subconjunto das tuplas da relação. Um fragmento pode ser obtido como 
uma seleção sobre a relação global, ou seja, é usado um predicado para construir o 
fragmento. Para ilustrar a utilização desta modalidade de fragmentação será utilizado o 
exemplo da instituição financeira estudado anteriormente, considerando que a instituição 
financeira possui agências nas cidades de São Paulo, Curitiba e Porto Alegre: 
Exemplo 1: Deseja-se que os dados da relação CLIENTE estejam particionados de 
modo que cada fragmento possua os dados da cidade correspondente. A tabela 3.1 
apresenta essa fragmentação: 
CLIENTE 
codigo_cliente nome fisica_juridica cpf_cnpj cidade 
1 Pedro da Silva fisica 5693215487 Curitiba 
2 Francisco de Almeida fisica 87452102136 São Paulo 
3 Maria Aparecia da Silva fisica 96583215874 São Paulo 
4 Luiz Carlos Barbosa fisica 8589698421 Curitiba 
5 Roberto César Xavier fisica 20320152147 Porto Alegre 
 
 
 
 
 
 
 
Tabela 3.1: Fragmentação horizontal da relação CLIENTE 
CLIENTE1 
codigo_cliente nome ... cidade 
1 Pedro da Silva Curitiba 
4 Luiz Carlos Barbosa Curitiba 
 CLIENTE2 
codigo_cliente nome ... cidade 
2 Francisco de Almeida São Paulo 
3 Maria Aparecia da Silva São Paulo 
 CLIENTE3 
codigo_cliente nome ... cidade 
5 Roberto César Xavier Porto Alegre 
 
 
 16 
Exemplo 2: Deseja-se que as contas correntes com saldo superior a R$ 10.000,00 
residam na cidade de São Paulo, as contas correntes com saldo superior a R$ 5.000,00 até 
R$ 10.000,00 residem em Curitiba, e as contas corrente com saldo até R$ 5.000,00 residam 
em Porto Alegre. A tabela 3.2 mostra essa situação: 
CONTA 
agencia numero_conta codigo_cliente data_abertura limite_creditosaldo data_encerra
mento 
1 93521 1 18/03/2005 500,00 1.000,00 
2 74258 2 05/08/2001 1.200,00 14.000,00 
2 23685 3 01/05/2005 750,00 9.000,00 
1 63695 4 19/06/2000 2.000,00 2.750,00 
3 98547 5 20/09/2002 900,00 11.580,00 
 
 
 
 
 
 
 
 
 
 
 
 
Tabela 3.2: Fragmentação horizontal da relação CONTA 
 
3.3.2 Fragmentação vertical 
A fragmentação vertical de uma relação produz fragmentos que contém um 
subconjunto dos atributos da relação, bem como sua chave primária. O objetivo da 
fragmentação vertical é particionar uma relação em um conjunto de relações menores, de 
tal modo que muitos dos aplicativos do usuário possam atuar apenas sobre um fragmento, 
diminuindo a quantidade de acessos a páginas [Navathe et al., 1984]. Também é possível 
identificar as sub-relações mais “ativas” e inseri-las em um subsistema de memória mais 
rápido, nos casos em que as hierarquias de memórias são administradas [Eisner e 
Severance, 1976]. 
CONTA1 
agencia numero_conta codigo_cliente ... limite_credito saldo 
2 74258 2 1.200,00 14.000,00 
3 98547 5 900,00 11.580,00 
 
CONTA2 
agencia numero_conta codigo_cliente ... limite_credito saldo 
2 23685 3 750,00 9.000,00 
 
CONTA3 
agencia numero_conta codigo_cliente ... limite_credito saldo 
1 93521 1 500,00 1.000,00 
1 63695 4 2.000,00 2.750,00 
 
 
 17 
Exemplo: A relação CONTA é particionada de modo que os atributos cadastrais 
sejam separados do saldo e limite de crédito. Desta forma os dados referentes a abertura e 
encerramento de contas podem ser administrados por um determinado setor e os dados 
financeiros podem estar sendo manipulados por outro setor da organização, separados 
geograficamente. A tabela 3.3 demonstra esse tipo de fragmentação: 
 
 
 
 
 
 
 
 
 
Tabela 3.3: Fragmentação vertical da relação CONTA 
 
3.4 Regras de fragmentação 
As regras a seguir em conjunto irão assegurar que o banco de dados não sofrerá 
nenhuma mudança semântica durante a fragmentação. 
Completeza. Se uma instância da relação R é decomposta em fragmentos, cada item 
de dado que pode ser encontrada em R também pode ser encontrada em um ou mais de seus 
fragmentos. Esta propriedade garante que os dados de uma relação global serão mapeados 
em fragmentos sem perdas [Grant, 1984]. No caso de fragmentação horizontal, o ítem de 
dado se refere a tuplas enquanto que na fragmentação vertical, se refere a um atributo da 
relação R [Özsu, M.; Valduriez, 2001]. 
Reconstrução. Se uma relação R é decomposta em fragmentos, deve ser possível 
definir um operador relacional que aplicado sobre os fragmentos retorne a relação original. 
CONTA1 
agencia numero_conta limite_credito saldo 
1 93521 500,00 1.000,00 
2 74258 1.200,00 14.000,00 
2 23685 750,00 9.000,00 
1 63695 2.000,00 2.750,00 
3 98547 900,00 11.580,00 
 
CONTA2 
agencia numero_conta codigo_cliente data_abertura data_encerramento 
1 93521 1 18/03/2005 
2 74258 2 05/08/2001 
2 23685 3 01/05/2005 
1 63695 4 19/06/2000 
3 98547 5 20/09/2002 
 
 
 18 
Este operador será diferente para cada forma de fragmentação, porém, é importante que ele 
possa ser identificado [Özsu, M.; Valduriez, 2001]. 
Disjunção. Se uma relação R é decomposta horizontalmente em fragmentos, e o 
item de dados está em Rj, ele não está em qualquer outro fragmento diferente de Rj. Se a 
relação R é decomposta verticalmente, os atributos de sua chave primária normalmente se 
repetem em todos os seus fragmentos. Assim, no caso de particionamento vertical, a 
disjunção só é definida sobre os atributos que não fazem parte da chave primária de uma 
relação [Özsu, M.; Valduriez, 2001]. 
 
3.5 Alocação 
O problema da alocação de recursos através dos nós de uma rede de computadores 
envolve encontrar a distribuição “ótima” do conjunto de fragmentos entre o conjunto de 
sites disponíveis. O caráter ótimo pode ser definido com relação às medidas Custo mínimo 
e Desempenho. 
A função de custo consiste no custo do armazenamento, consulta e atualização em 
todos os sites onde um determinado fragmento possa estar armazenado e também no custo 
da comunicação de dados. 
Com relação ao desempenho, a estratégia de alocação é projetada para minimizar o 
tempo de resposta e maximizar o throughput (vazão) do sistema em cada site. Em outras 
palavras, deve-se procurar um esquema de alocação que responda às consultas do usuário 
em tempo mínimo e mantém mínimo o custo do processamento. 
Supondo-se que o banco de dados seja fragmentado de forma apropriada, é 
necessário decidir sobre a alocação dos fragmentos aos vários sites da rede. As razões para 
a replicação são a confiabilidade e a eficiência de consultas somente leitura. Se houver 
várias cópias de um item de dados, haverá uma chance de que alguma cópia dos dados 
esteja acessível em algum lugar, mesmo quando ocorrerem falhas do sistema. Além disso, 
consulta somente leitura que acessam os mesmos itens de dados poderão ser executadas em 
paralelo, pois existirão cópias em vários sites. Por outro lado, a execução de consultas de 
atualização causa problemas, porque o sistema tem de garantir que todas as cópias dos 
 
 19 
dados serão atualizadas de forma adequada. Portanto, a decisão sobre replicação é um 
compromisso que depende da proporção entre consultas somente de leitura e consultas de 
atualização. Essa decisão afeta quase todos os algoritmos e funções de controle de SGBDs 
distribuídos [Özsu, M.; Valduriez, 2001]. 
Um banco de dados não replicado (em geral chamado de banco de dados 
particionado) contém fragmentos alocados a sites, e só existe uma única cópia de qualquer 
fragmento na rede. Em caso de replicação, o banco de dados existe por inteiro em cada site 
(banco de dados totalmente replicado) ou os fragmentos estão distribuídos pelos sites 
(banco de dados parcialmente replicado). A tabela 3.4 compara essas três alternativas de 
replicação em relação a diversas funções dos SGBDs distribuídos. 
 
 Replicação total Replicação parcial Particionamento 
Processamento de 
consultas 
Fácil 
Gerenciamento de 
diretórios 
Fácil ou não existente 
Controle de 
concorrência 
Moderado Difícil Fácil 
Confiabilidade Muito alta Alta Baixa 
Realidade Aplicação possível Realista Aplicação possível 
 
Tabela 3.4: Comparação entre alternativas de replicação 
 
Mesmo grau de dificuldade 
Mesmo grau de dificuldade 
 
 20 
4. Processamento de consultas distribuídas 
 
Ao ocultar os detalhes de baixo nível a respeito da organização física dos dados, as 
linguagens de bancos de dados relacionais (SQL) permitem a expressão de consultas 
complexas de modo conciso e simples. Em particular, para construir a resposta à consulta, o 
usuário não especifica exatamente o procedimento a ser seguido, ficando esta tarefa a cargo 
de um módulo do SGBD chamado processador de consultas, que terá o trabalho de realizar 
a otimização da consulta, pois ele é capaz de explorar uma grande quantidade de 
informações úteis a respeito do banco de dados [Özsu, M.; Valduriez, 2001]. 
A principal função de um processador de consultas relacionais é transformar uma 
consulta de alto nível em uma consulta equivalente de nível mais baixo, que implementa a 
estratégia de execução para a consulta. A transformação deve alcançar tanto a correção 
quanto a eficiência. Pelo fato de muitas estratégias de execução serem transformações 
corretas da mesma consulta de alto nível, aquela que otimiza (minimiza) o consumo de 
recursos deve ser a escolhida. Tendo em vista que, em termos computacionais, o problema 
não pode ser manipulado com um grande número de relações [Ibaraki e Kameda, 1984], em 
geral é reduzido a escolha de uma solução próxima da solução ótima. 
O problema do processamento de consultas em um ambiente distribuído é muito 
mais difícil que em um ambiente centralizado, porque um número maior de parâmetros 
afeta o desempenho de consultas distribuídas. Em particular, as relações envolvidas emuma consulta distribuída podem ser fragmentadas e/ou replicadas, induzindo assim os 
custos de sobrecarga de comunicação. Além disso, se forem acessados muitos sites, o 
tempo de resposta da consulta poderá se tornar muito alto. O papel de um processador de 
consultas distribuídas é mapear uma consulta de alto nível sobre um banco de dados 
distribuído em uma seqüência de operações de bancos de dados sobre fragmentos da 
relação, escolhendo os melhores sites para processar dados e, possivelmente, o modo como 
os dados devem ser transformados [Özsu, M.; Valduriez, 2001]. 
O grande desafio do processamento de consultas em um banco de dados distribuído 
está em elaborar a melhor estratégia para obter o resultado esperado, considerando que: 
 
 21 
• As relações envolvidas na consulta podem não estar presentes no site originário 
da consulta; 
• As relações envolvidas na consulta podem estar fragmentadas em vários sites; 
• Os fragmentos de uma relação envolvida na consulta podem estar replicados em 
vários sites; 
• Algum site onde residem os fragmentos de uma relação pode estar inoperante 
em dado momento. 
Nestas condições, algumas perguntas devem ser respondidas com o objetivo de 
obter a melhor estratégia de execução: 
• Quais fragmentos de uma relação estão envolvidos na consulta? 
• Onde está localizada a réplica de um fragmento envolvido de modo que o custo 
de obtenção de resposta seja o menor possível? 
• O site considerado ideal para obtenção de um fragmento envolvido está 
operante? Caso não esteja, qual site é a melhor alternativa? 
É evidente que a execução de uma consulta, por mais simples que seja, assume um 
grau de complexidade muito maior em um ambiente distribuído, se comparado a um 
ambiente centralizado. 
Em um sistema de banco de dados distribuído, o custo total a ser minimizado inclui 
os custos de CPU, E/S e comunicação. Os dois primeiros são os únicos fatores 
considerados pelos SGBDs centralizados. O componente de custo de comunicação talvez 
seja o fator mais importante considerado pelos bancos de dados distribuídos, portanto, o 
objetivo da otimização de consultas distribuídas se reduz ao problema de minimizar o custo 
de comunicação de forma geral, a expensas de processamento local, ainda que os ambientes 
modernos de processamento distribuído utilizam redes de comunicação muito rápidas, cuja 
largura de banda é comparada a largura de banda de discos. A vantagem é que a otimização 
local pode ser feita de forma independente, com o uso dos métodos conhecidos para 
sistemas centralizados. O custo de comunicação é o tempo necessário para a troca de dados 
entre os sites que participam da execução da consulta. Esse custo é incidente no 
 
 22 
processamento de mensagens (formatação/desformatação) e na transmissão dos dados pela 
rede de comunicação [Özsu, M.; Valduriez, 2001]. 
 
4.1 Transformação de consulta 
Ao executar uma consulta extremamente simples como: “obter todas as tuplas da 
relação CONTA”, seu processamento não é trivial em um contexto distribuído, uma vez 
que a relação pode estar fragmentada, replicada ou de ambas as formas. Se a relação 
CONTA for replicada, é necessário escolher de qual réplica obter o resultado. Se nenhuma 
replica for fragmentada, basta escolher a replica cujo custo de transmissão seja menor. 
Entretanto, se uma réplica for fragmentada, a escolha não será fácil, pois será necessário 
efetuar diversas junções e uniões para reconstrução da relação CONTA. Nesse caso, o 
número de estratégias possíveis para uma consulta, aparentemente trivial, pode ser grande 
[Silberschatz, A.; Korth, H.; Sudarshan, S., 1999]. 
Desenvolvendo o exemplo da instituição financeira utilizado, são apresentadas a 
seguir duas estratégias de execução em um ambiente distribuído para a consulta: obter o 
código e o nome do cliente, o saldo da conta corrente e o valor total das movimentações de 
todas as contas correntes com saldo superior a R$ 5.000,00 e que realizaram 
movimentações no período de 01/01/2006 a 31/01/2006. Será considerado que o banco de 
dados é distribuído através dos sites residentes nas cidades de São Paulo, Curitiba e Porto 
Alegre e que o site residente em Curitiba é originário da consulta. Conforme ilustrado na 
figura 4.1, as relações CONTA e CLIENTE estão fragmentadas de modo que cada site 
concentre os dados das cidades correspondentes, enquanto que a relação MOVIMENTO 
está totalmente replicada em cada um dos sites existentes. 
 
 
 
 
 
 
 
 
 
 
 23 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 4.1: Modelo de fragmentação do banco dados 
 
A consulta apresentada poderia ser expressa através da linguagem SQL da seguinte 
forma: 
 
 SELECT CLIENTE.CODIGO_CLIENTE, CLIENTE.NOME, CONT A.SALDO, SUM(MOVIMENTO.VALOR) 
 FROM CLIENTE, CONTA, MOVIMENTO 
 WHERE CLIENTE.CODIGO_CLIENTE = CONTA.CODIGO_CLIE NTE 
 AND CONTA.AGENCIA = MOVIMENTO.AGENCIA 
 AND CONTA.NUMERO_CONTA = MOVIMENTO.NUMERO_CONTA 
 AND CONTA.SALDO > 5000 
 AND MOVIMENTO.DATA BETWEEN '01/01/2006' AND '3 1/01/2006' 
GROUP BY CLIENTE.CODIGO_CLIENTE, CLIENTE.NOME, CONT A.SALDO 
 
A primeira estratégia explora o fato de que as relações CONTA E CLIENTE são 
fragmentadas da mesma forma, a fim de obter um subconjunto resultante do processamento 
local em cada site e transferir este subconjunto para o site de origem da consulta (vide 
figura 4.2). 
 
 
 
 Site1 (São Paulo) 
 
CLIENTE1 
CONTA1 
MOVIMENTO 
 Site2 (Curitiba) 
 
CLIENTE2 
CONTA2 
MOVIMENTO 
 Site3 (Porto Alegre) 
 
CLIENTE3 
CONTA3 
MOVIMENTO 
 
 24 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 4.2: Estratégia 1 de processamento de consulta 
 
A segunda estratégia centraliza os dados necessários no site de origem da consulta 
antes de realizar o processamento, conforme representado na figura 4.3. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 4.3: Estratégia 2 de processamento de consulta 
Site1 (São Paulo) 
 
R1 = Processamento 
local 
Site2 (Curitiba) 
 
R2 = Processamento 
local 
R = R1 U R2 U R3 
Site3 (Porto Alegre) 
 
R3 = Processamento 
local 
Site1 (São Paulo) 
 
CLIENTE1 
CONTA1 
 
Site2 (Curitiba) 
 
CLIENTE = CLIENTE1 U CLIENTE2 U CLIENTE3 
CONTA = CONTA1 U CONTA2 U CONTA3 
MOVIMENTO 
 
R = Processamento local 
Site3 (Porto Alegre) 
 
CLIENTE3 
CONTA3 
 
 
 25 
 
Evidentemente a primeira estratégia se mostra mais eficiente, pois explora a 
capacidade de processamento distribuído do sistema e reduz o tráfego de rede ao 
transportar para o site de origem da consulta apenas os dados resultantes da consulta 
realizada localmente, enquanto que na segunda estratégia, todos os dados das relações 
CLIENTE e CONTA são concentrados no site dois, para só então realizar o processamento 
sobre uma maior massa de dados. 
Dentre as diversas técnicas utilizadas para otimização de consultas distribuídas, a 
apresentada anteriormente caracteriza-se pelo uso de semijunções na qual tem a principal 
finalidade de reduzir o tamanho da relação operando de uma junção. 
 
4.2 Localização de dados distribuídos 
Na execução de uma consulta sobre um banco de dados distribuído existe uma fase 
da preparação da consulta responsável por resolver o problema da localização dos dados, 
que constitui em transformar uma consulta expressa sobre relações globais em um consulta 
sobre fragmentos físicos. A localização utiliza informações armazenadas no esquema de 
fragmentos. 
A fragmentação é definida por meio de regras de fragmentação, que podem ser 
expressas como consultas relacionais. Uma relação global pode ser reconstruída pela 
aplicação das regras de reconstrução e pela derivação de um programa de álgebra relacional 
cujos operandos são os fragmentos. Isso se denomina programa de localização. Uma forma 
ingênua de localizar uma consulta distribuída é gerar uma consulta em que cada relação 
global é substituída por seu programa de localização. 
Exemplo: A função de fragmentação horizontaldistribui a relação CONTA com 
base em predicados de seleção da seguinte forma: 
 
CONTA1 = Contas com saldo menor que R$ 5.000,00 
CONTA2 = Contas com saldo de R$ 5.000,00 a R$ 10.000,00 
CONTA3 = Contas com saldo superior a R$ 10.000,00 
 
 26 
 
O programa de localização para a relação CONTA fragmentada horizontalmente é a 
união dos fragmentos: 
CONTA = CONTA1 U CONTA2 U CONTA3 
Assim, a forma genérica de qualquer consulta especificada sobre CONTA é obtida 
substituindo-a por (CONTA1 U CONTA2 U CONTA3). 
As seleções sobre os fragmentos que têm uma qualificação que contradiz a 
qualificação da regra de fragmentação geram relações vazias. Estas seleções devem ser 
ignoradas gerando uma consulta reduzida. 
Exemplo: A consulta para obter as contas-correntes com saldo inferior a R$ 
10.000,00 poderia ser expressa através do seguinte comando SQL: 
 
SELECT * 
FROM CONTA 
WHERE SALDO < 10000,00 
 
É fácil detectar que o predicado de seleção (SALDO < 10000,00) contradiz o 
predicado de CONTA3, produzindo assim uma relação vazia. A consulta reduzida é 
simplesmente aplicada sobre a união de CONTA1 e CONTA2. 
 
 27 
5. Transações distribuídas 
 
Até o momento, a primitiva básica de acesso considerada era uma consulta. No 
entanto, deve ser considerado o que pode acontecer se, por exemplo, duas consultas tentam 
atualizar o mesmo item de dados, ou se ocorre uma falha do sistema durante a execução de 
uma consulta. No caso de consulta apenas de recuperação, nenhuma dessas condições é um 
problema. Porém, no caso de consultas de atualização, essas condições podem ter efeitos 
desastrosos sobre o banco de dados. Por exemplo, não é correto apenas reiniciar a execução 
de uma transação após a recuperação de uma falha do sistema, pois alguns valores de itens 
de dados já podem ter sido atualizados antes da falha e não devem ser atualizados 
novamente quando a consulta for reinicializada. Com isso, o banco de dados conteria dados 
incorretos [Özsu, M.; Valduriez, 2001]. 
O conceito de transação é usado dentro do domínio de banco de dados como uma 
unidade básica de computação consistente e confiável. Um banco de dados está em estado 
consistente se ele obedece a todas as restrições de consistência (integridade) definidas sobre 
ele. Uma transação toma um banco de dados, executa uma ação sobre ele e gera uma nova 
versão do banco de dados, provocando uma transição de estado. As mudanças de estados 
ocorrem devido a modificações, inserções e eliminações (atualizações). Considerando que o 
banco de dados pode estar (e em geral está) temporariamente inconsistente durante a 
execução de uma transação, o importante é que o banco de dados esteja consistente quando 
a transação terminar. A consistência da transação se refere às ações de transações 
concorrentes [Özsu, M.; Valduriez, 2001]. 
Uma transação sempre termina, mesmo quando há falhas. Se a transação pode 
completar sua tarefa com sucesso, então a transação se consolida. Por outro lado, se a 
transação pára sem completar sua tarefa, ela aborta. Quando uma transação é abortada, sua 
execução é interrompida e todas as suas ações já executadas são desfeitas, devolvendo-se o 
banco de dados a seu estado anterior ao início da transação. A consolidação assinala ao 
SGBD que os efeitos da transação devem agora estar refletidos no banco de dados, 
tornando-o assim visível para outras transações que possam acessar o mesmo item de 
dados. O ponto em que uma transação é consolidada é um “ponto sem retorno”, em que 
 
 28 
seus resultados estão permanentemente armazenados no banco de dados e não podem ser 
desfeitos. 
 
5.1 Propriedades de transações 
Os aspectos de consistência e confiabilidade das transações se devem a quatro 
propriedades: (1) atomicidade, (2) consistência, (3) isolamento e (4) durabilidade. Juntas, 
em geral elas são referidas como as propriedades ACID das transações [Date, C. J., 2004]. 
A atomicidade se refere ao fato de que a transação é tratada como uma unidade de 
operação. Assim, ou todas as ações da transação são concluídas, ou nenhuma delas se 
completa. A atomicidade exige que, se a execução de uma transação for interrompida por 
qualquer tipo de falha, o SGBD será responsável pela determinação do que fazer com a 
transação após a recuperação da falha. Ela pode ser encerrada completando-se as ações 
restantes ou pode ser encerrada desfazendo-se todas as ações que já foram executadas. 
A consistência de uma transação é simplesmente sua correção. Em outras palavras, 
uma transação é um programa correto que mapeia um estado consistente do banco de dados 
em outro. Verificar se as transações são consistentes é o objetivo do controle de dados 
semânticos, por outro lado, assegurar a consistência da transação é o objetivo dos 
mecanismos de controle da concorrência. 
O isolamento é a propriedade das transações que exige que cada transação veja um 
banco de dados consistente em todos os momentos. Em outras palavras, uma transação em 
execução não pode revelar seus resultados a outras transações concorrentes antes de se 
consolidar. A consistência entre as transações é necessária pois se duas transações 
concorrentes acessam um item de dados que está sendo atualizado por uma delas, não é 
possível garantir que a segunda lerá o valor correto. 
O termo durabilidade se refere à propriedade das transações que assegura que, uma 
vez que a transação se consolida, seus resultados se tornam permanentes e não podem ser 
apagados do banco de dados. Por conseguinte, o SGBD assegura que os resultados de uma 
transação permanecerão após a ocorrência de uma falha do sistema. 
 
 29 
 
5.2 Controle de transações distribuídas 
Existem basicamente dois tipos de transações que devem ser consideradas. As 
transações locais, que são aquelas que mantêm acesso e atualizam somente a base de dados 
local; e as transações globais, que são aquelas que mantêm acesso e atualizam diversas 
bases de dados locais. A garantia das propriedades ACID nas transações globais é bem 
mais complicada que nas transações locais, já que diversos sites podem participar de sua 
execução. Uma falha em um desses sites ou uma falha de comunicação entre sites pode 
resultar em erros no processamento [Silberschatz, A.; Korth, H.; Sudarshan, S., 1999]. 
Cada site possui seu próprio gerenciador local de transação, cuja função é garantir 
as propriedades ACID das transações executadas localmente. Os diversos gerenciadores de 
transações cooperam para executar as transações globais. Para entender como esses 
gerenciadores podem ser implementados, pode-se definir um modelo abstrato de um 
sistema de transações. Cada site contém dois subsistemas: 
O gerenciador de transações administra a execução daquelas transações que 
mantêm acesso aos dados armazenados no site local. Cada uma dessas transações pode ser 
uma transação local (que se processa somente naquele site) ou parte de uma transações 
global (que se processa em diversos sites). A estrutura do gerenciador de transações é 
similar em vários aspectos à estrutura usada nos sistemas centralizados. Cada gerenciador 
de transações é responsável pela manutenção de um log para propósito de recuperação e 
participação em um esquema de controle de concorrência adequado para coordenação da 
execução de transações concorrentes em um mesmo site [Silberschatz, A.; Korth, H.; 
Sudarshan, S., 1999]. 
O coordenador de transações coordena a execução de várias transações (tanto local 
quanto global) iniciadas naquele site. Um subsistema de coordenação de transações é 
responsável por iniciar a execução da transação, quebrar uma transação em um número 
determinado de subtransações de distribuí-las pelo sites apropriados para execução. 
Também é responsável por coordenar o término das transações, que podem resultar em 
 
 30 
efetivação em todos os sites ou em interrupção em todos os sites [Silberschatz, A.; Korth, 
H.; Sudarshan, S., 1999].5.3 Controle distribuído da concorrência 
O mecanismo de controle distribuído da concorrência de um SGBD distribuído 
assegura que a consistência do banco de dados seja mantida em um ambiente distribuído 
multiusuário. Se as transações são consistentes internamente, a maneira mais simples de 
alcançar esse objetivo é executar cada transação sozinha, uma depois da outra. Obviamente 
essa alternativa não pode ser implementada em nenhum sistema na prática, pois ela 
minimiza o throughput (vazão) do sistema. O nível de concorrência (ou seja, o número de 
transações concorrentes) talvez seja o parâmetro mais importante em sistemas distribuídos 
[Balter et al., 1982]. Por essa razão, o mecanismo de controle de concorrência tenta 
encontrar um equilíbrio adequado entre a manutenção da consistência do banco de dados e 
a manutenção de um nível elevado de concorrência [Özsu, M.; Valduriez, 2001]. Nesta 
seção serão descritos os algoritmos utilizados no controle de concorrência em Sistemas de 
Bancos de Dados Distribuídos e no capítulo seguinte será avaliado o controle de 
concorrência em um ambiente distribuído sujeito a falhas. 
No controle distribuído da concorrência são consideradas duas classes mais 
importantes de algoritmos: os algoritmos baseados em bloqueios e os algoritmos baseados 
em ordenação de timbres de hora. Tanto as classes de bloqueio quanto as de ordenação de 
timbres de hora tratam daquilo que se denomina algoritmos pessimistas. Qualquer 
algoritmo baseado em bloqueio pode resultar em impasses, exigindo métodos especiais de 
gerenciamento. Algoritmos pessimistas consideram que muitas transações entrarão em 
conflito entre si e, portanto, sincronizam a execução concorrente de transação mais cedo em 
seu ciclo de execução [Özsu, M.; Valduriez, 2001]. 
Existem ainda algoritmos otimistas, que consideram que não haverá um número 
muito grande de transações que entrarão em conflito entre si, e atrasam a sincronização das 
transações até seu término. 
 
 31 
5.3.1 Algoritmos baseados em bloqueios 
O controle de concorrência baseado em bloqueios consiste em um mecanismo para 
criar um ambiente de execução de diversas transações que disputam os mesmos itens de 
dados estabelecendo uma ordem de execução para as operações de cada transação de modo 
que cada transação obtenha o mais prontamente possível o acesso de que necessitam. Por 
exemplo, a transação X é constituída das operações (x1, x2, x3) e a transação Y pelas 
operações (y1, y2, y3). Se cada transação fosse executada separadamente, as operações 
seriam executadas na seqüencia em que aparecem (x1, x2, x3, y1, y2, y3), ou seja, primeiro as 
operações da transação X, depois as operações da transação Y. Isso faria com que a 
transação Y tivesse que aguardar o término da transação X para poder iniciar a sua 
execução, mesmo que não existam operações conflitantes entre as transações. Se após 
executar a operação x2 a operação y1 puder ser executada sem gerar inconsistências, a 
transação Y poderia iniciar antes do término da transação X, aumentando a concorrência. 
Então, a execução das operações poderia ser redefinida como (x1, x2, y1, x3, y2, y3). O 
algoritmo baseado em bloqueio deverá garantir que y1 não seja executada antes que x2 
libere o item de dados que y1 necessita [Özsu, M.; Valduriez, 2001]. 
A idéia principal do controle de concorrência baseado em bloqueios é assegurar que 
os dados compartilhados por operações conflitantes sejam acessados por uma única 
operação de cada vez. Isso é conseguido pela associação de um “bloqueio” a cada unidade 
de bloqueio. Esse bloqueio é definido por uma transação antes de ser acessado e é 
redefinido no final de seu uso. Uma unidade de bloqueio não poderá ser acessada por uma 
operação se já estiver bloqueada por outra. Portanto, uma solicitação de bloqueio por uma 
transação só será concedida se o bloqueio associado não estiver sendo mantido por outra 
transação [Özsu, M.; Valduriez, 2001]. 
O SGBD distribuído não apenas gerencia os bloqueios, mas também trata das 
responsabilidades de gerenciamento de bloqueios no interesse das transações. Em outras 
palavras, os usuários não têm de especificar quando os dados devem ser bloqueados; o 
SGBD distribuído se encarrega disso toda vez que a transação emite uma operação de 
leitura ou de gravação. 
 
 32 
Dos mecanismos de bloqueio o bloqueio em duas fases (2PL – two-phase locking) é 
o mais amplamente utilizado no gerenciamento da concorrência em bancos de dados 
distribuídos. A regra de bloqueio em duas fases estabelece simplesmente que nenhuma 
transação deve solicitar um bloqueio após liberar um de seus bloqueios. Como uma 
alternativa, uma transação não deve liberar um bloqueio até ter certeza de que não solicitará 
outro bloqueio. Os algoritmos de 2PL executam transações em duas fases. Cada transação 
tem uma fase de crescimento, na qual ela obtém bloqueios de que necessita e acessa itens 
de dados, e uma fase de contração, durante a qual ela libera os bloqueios obtidos. O 
gerenciador de bloqueio libera bloqueios logo que o acesso ao item de dados é concluído. 
Isso permite que outras transações que esperam pelo acesso prossigam e bloqueiem, 
aumentando assim o grau de concorrência. No entanto, é difícil de implementar essa ação, 
pois o gerenciador de bloqueios tem de saber que a transação obteve todos os seus 
bloqueios e não precisara bloquear outro item de dados. O gerenciador de bloqueio também 
precisa saber que a transação não necessita mais de acesso ao item de dados em questão, de 
forma que o bloqueio possa ser liberado. Finalmente, se a transação abortar depois de 
liberar um bloqueio, ela poderá fazer com que também sejam abortadas outras transações 
que talvez tenham acessado o item de dados desbloqueado. Isso é conhecido como abortar 
em cascata [Özsu, M.; Valduriez, 2001]. 
Devido a essas dificuldades, a maioria dos escalonadores de 2PL implementa aquilo 
que se denomina bloqueio de duas fases estrito, que libera todos os bloqueios juntos 
quando a transação termina (efetivada ou abortada). 
5.3.2 Algoritmos baseados em timbre de hora 
Diferentes dos algoritmos baseados em bloqueios, os algoritmos de controle da 
concorrência baseados em timbre de hora não tentam estabelecer uma ordem de execução 
para as operações conflitantes das transações que concorrem pelo mesmo item de dados 
através da exclusão mútua. 
Um timbre de hora é um identificador simples que serve para identificar cada 
transação de forma exclusiva e para permitir a ordenação. Há várias maneiras de atribuir 
timbres de hora. Um método é usar um contador global (no âmbito do sistema) 
monotonamente crescente. Entretanto, a manutenção de contadores globais é um problema 
 
 33 
em sistemas distribuídos. Então, é preferível que cada site atribua timbre de hora de forma 
autônoma, com base em seu contador local. Para manter a unicidade, cada site acrescenta 
seu próprio identificador ao valor do contador. Assim, o timbre de hora é uma tupla de dois 
elementos da forma <valor do contador, identificador do site>. 
Com essa informação, é simples ordenar a execução das operações de transações de 
acordo com seus timbres de hora. Ao executar duas operações conflitantes, pertencentes a 
transações diferentes, será executada primeiro aquela que possuir o menor timbre de hora, 
ou seja, a mais antiga, e em seguida será executada a mais nova. 
Um escalonador que impõe a regra de timbre de hora verifica cada nova operação, 
comparando-a com operações conflitantes que já tenham sido escalonadas. Se a nova 
operação pertencer a uma transação mais nova que todas as transações conflitantes que já 
foram escalonadas, a operação será aceita; do contrário, ela será rejeitada, fazendo toda a 
transação reiniciar com um novo timbre de hora [Özsu, M.; Valduriez, 2001]. 
5.3.3 Gerenciamento de impasses 
De modo informal, uma situação de impasse é um conjunto de solicitações quejamais poderão ser concedidas pelo mecanismo de controle da concorrência. Um impasse 
pode ocorrer porque as transações esperam uma pela outra [Özsu, M.; Valduriez, 2001]. 
Por exemplo, duas transações T1 e T2 mantêm bloqueios de gravação sobre as 
entidades x e y respectivamente. Em determinado momento da execução da transação T1, 
ela solicita uma operação de acesso à entidade y, bloqueada pela transação T2. No entanto, 
se durante esse período de espera T2 solicitar um bloqueio sobre x, haverá um impasse. Isso 
ocorre porque T1 estará bloqueada esperando T2 liberar seu bloqueio sobre y, enquanto T2 
estará esperando T1 liberar seu bloqueio sobre x. 
Um impasse é um fenômeno permanente. Se houver um impasse em um sistema, ele 
não terminará a menos que ocorra uma intervenção externa. Essa interferência pode vir do 
usuário, do operador do sistema ou do sistema de software (o sistema operacional o SGBD 
distribuído). 
 
 34 
Uma situação de impasse torna-se mais complicada em sistemas distribuídos, pois 
duas transações que participam de uma condição de impasse podem estar em execução em 
sites diferentes. Neste caso, é chamada situação de impasse global. 
Há três métodos conhecidos para tratamento de impasses: prevenção, anulação e 
ainda detecção e resolução. 
Os métodos de prevenção de impasses garantem que os impasses não podem 
ocorrer. Portanto, o gerenciador de transações verifica uma transação quando ela é 
inicializada pela primeira vez e não permite que ela prossiga se houver a possibilidade de 
um impasse. Para isso, é necessário que todos os itens de dados que serão acessados por 
uma transação sejam declarados previamente. O gerenciador de transações permitirá que a 
transação prossiga somente se todos os itens de dados aos quais ela terá acesso estiverem 
disponíveis. 
O método de tratamento de impasses baseado em anulação de impasses irá evitar a 
ocorrência do impasse abortando uma das transações. Se uma solicitação de bloqueio de 
uma transação T1 for negada, o gerenciador de bloqueio não forçará automaticamente T1 a 
esperar. Em vez disso, ele aplicará um teste de prevenção à transação solicitante e à 
transação que mantém atualmente o bloqueio (T2, por exemplo). Se aprovada no teste, T1 
terá permissão para esperar por T2, caso contrário, uma ou outra transação será abortada. 
Exemplos desta abordagem são os algoritmos WAIT-DIE e WOUND-WAIT [Rosenkrantz 
et al., 1978]. O algoritmo WAIT-DIE verifica se T1 é mais antiga que T2, caso seja, T1 
poderá esperar por T2, caso contrário (se T1 for mais nova que T2), então T1 será abortada e 
reinicializada. O algoritmo WOUND-WAIT verifica se T1 é mais nova que T2, caso seja, T1 
poderá esperar por T2, caso contrário (se T1 for mais antiga que T2), então T2 será abortada 
e o bloqueio concedido a T1 [Özsu, M.; Valduriez, 2001]. 
Existe ainda o método de tratamento de impasses baseado na detecção e resolução 
de impasses. A detecção é feita estudando-se a possibilidade de formação de ciclos de 
espera entre as transações. Em geral, a resolução de impasse é feita pela seleção de uma ou 
mais transações vítimas que serão apropriadas antecipadamente e abortadas para romper 
um possível ciclo de dependência entre as transações. 
 
 35 
5.3.4 Algoritmos otimistas para controle de concorrência 
Os algoritmos de controle de concorrência vistos anteriormente são considerados 
pessimistas, pois pressupõem que os conflitos entre as transações são bastante freqüentes e 
não permitem que uma transação acesse um item de dados de houver uma transação 
conflitante que tenha acesso a esse item de dados. Desse modo, a execução de qualquer 
operação de uma transação segue a seqüência de fases: validação, leitura, computação, 
gravação. Em geral, essa seqüência é válida para uma transação de atualização, e também 
para cada uma de suas operações [Özsu, M.; Valduriez, 2001]. 
Por outro lado, os algoritmos otimistas, atrasam a fase de validação até um pouco 
antes da fase de gravação. Assim, uma operação submetida a um escalonador otimista 
nunca é atrasada. As operações de leitura, computação e gravação de cada transação são 
processadas livremente, sem atualizar o banco de dados real. A fase de validação consiste 
em verificar se essas atualizações manteriam a consistência do banco de dados. Se a 
resposta for afirmativa, as mudanças se serão gravadas no banco de dados real. Caso 
contrário, a transação será abortada e terá de ser reinicializada [Özsu, M.; Valduriez, 2001]. 
 
 
 36 
6. Confiabilidade de SGBDs distribuídos 
 
Um sistema de gerenciamento de bancos de dados distribuído confiável é aquele 
que pode continuar a processar solicitações do usuário, mesmo quando o sistema subjacente 
não é confiável. Em outras palavras, até mesmo quando componentes do ambiente de 
computação distribuída falham, um SGBD distribuído confiável deve ser capaz de 
continuar a executar solicitações do usuário sem violar a consistência do banco de dados 
[Özsu, M.; Valduriez, 2001]. 
Para um sistema distribuído ser robusto ele precisa detectar falhas, reconfigurar o 
sistema para que ele possa continuar funcionando e recuperar a situação original durante o 
retorno de uma ligação ou de um processador [Silberschatz, A.; Korth, H.; Sudarshan, S., 
1999]. 
O projeto de um sistema confiável que possa se recuperar de falhas requer a 
identificação dos tipos de falhas com que o sistema tem de lidar. Um gerenciador de 
recuperação de banco de dados tem de lidar com quatro tipos de falhas: falhas de transação, 
falhas de sites, falhas de mídia e falhas de linha de comunicação [Özsu, M.; Valduriez, 
2001]. 
As falhas diferentes são tratadas de modos diferentes. Perda de mensagens são 
retransmitidas. Retransmissão repetida de uma mensagem, sem mensagem de 
reconhecimento, é normalmente sintoma de perda de comunicação. Em geral, a rede tenta 
encontrar rotas alternativas para uma mensagem. Falhas nessas tentativas sugerem 
particionamento da rede [Silberschatz, A.; Korth, H.; Sudarshan, S., 1999]. 
Entretanto, geralmente não é possível ter certeza se houve falha na comunicação 
entre sites ou se houve particionamento da rede. O sistema detecta a falha, mas não 
consegue identificar o tipo. Por exemplo, caso o site S1 não consiga se comunicar com o 
site S2. Pode ser que S2 esteja com problemas. Entretanto, pode ser que a ligação entre S1 e 
S2 não esteja funcionando, particionando a rede. 
Caso o site S1 tenha identificado uma falha, ele iniciará um procedimento para 
reconfiguração do sistema e, então, prosseguirá no modo de operação normal. 
 
 37 
• Se há dados replicados no site que não está funcionando, o catálogo deverá ser 
atualizado para que as consultas não solicitem acesso à cópia desse site. 
• Se no site com problemas houver transações ativas no momento da falha, essas 
transações deverão ser abortadas. É preferível abortar essas transações 
rapidamente, já que elas poderão manter bloqueios em dados em sites ainda 
ativos. 
• Se o site que não está funcionando é um servidor de algum subsistema, deverá 
ser feita uma eleição para determinar o novo servidor. Alguns exemplos de 
servidores centrais são os servidores de nomes, coordenador de concorrência ou 
detector de deadlock global. 
Já que, em geral, não é possível distinguir entre falhas de rede e falhas de sites, 
qualquer esquema de reconfiguração precisa ser projetado de modo a trabalhar 
corretamente caso haja o particionamento da rede. Em particular, a seguinte situação 
precisa ser evitada: 
• Dois ou mais servidores são eleitos em partições distintas. 
• Mais de uma partição atualiza e replica itens de dados. 
A reintegração de um site ou da comunicação entre pares dentro de um sistema 
também exige cuidados. Quando um site volta a integrar a rede, é preciso que um 
procedimento seja executado para atualização das tabelas do sistema, de modo a refletir as 
alterações sofridas enquanto ele

Continue navegando