Buscar

Implementação de Banco 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 117 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 117 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 117 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

Implementação de
Banco de Dados
Distribuídos
Prof. Sidney Nicolau Venturi Filho
Descrição
O processamento de transações em um Banco de Dados Distribuídos e
o seu controle durante a execução concorrente.
Propósito
Entender as técnicas que dão suporte ao funcionamento das transações
e consultas em um Banco de Dados Distribuídos é de importância
fundamental para o profissional de T.I.
Preparação
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
1 of 117 28/04/2024, 18:53
Para os procedimentos propostos neste conteúdo, sugerimos que
instale o PostgreSQL em sua máquina e em uma máquina virtual.
Objetivos
Módulo 1
Controle de transação distribuída
Reconhecer as técnicas utilizadas em transações distribuídas.
Módulo 2
Controle de concorrência em banco de dados
distribuídos
Analisar as técnicas de controle de concorrência.
Módulo 3
Consultas distribuídas
Identificar as formas de otimização de consultas em bancos de
dados distribuídos.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
2 of 117 28/04/2024, 18:53
Módulo 4
SQL em consultas distribuídas
Aplicar comandos utilizando SQL em consultas distribuídas.
Introdução
Os bancos de dados distribuídos trazem novos desafios para
temas que há muito tempo são estudos na área de banco de
dados. O processamento de transações, o controle do acesso
concorrente aos itens de dados o processamento de consultas e
a escrita de comandos SQL necessitam ser ajustados à realidade
da distribuição dos dados.
Este é nosso grande propósito neste conteúdo, analisar como um
banco de dados distribuído pode ser implementado.

Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
3 of 117 28/04/2024, 18:53
1 - Controle de transação distribuída
Ao �nal deste módulo, você será capaz de reconhecer as técnicas utilizadas em transações
distribuídas.
Fundamentos de transação
Neste vídeo, apresentaremos os fundamentos de uma transação de
banco de dados, abodaremos os conceitos de atomicidade, isolamento,
consistência, durabilidade e quais são os tipos de transações em banco
de dados distribuídos.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
4 of 117 28/04/2024, 18:53
O que é uma transação?
Uma transação pode ser conceituada como o conjunto de operações
executadas por um usuário em um banco de dados que é visto pelo
SGBD como uma unidade lógica que precisa manter certas propriedades
para garantir o sucesso sem perda de informações lógicas.
A abertura da uma transação pode ser realizada de forma explícita ou
implícita. Conheça as diferenças a seguir.
Abertura explícita
É realizada pelo
comando BEGIN
TRANSACTION.
Abertura implícita
Ocorre em alguns SGBD,
como por exemplo, o
ORACLE, onde ao se
emitir o primeiro
comando é aberta
automaticamente uma
transação.
O término de uma transação pode ocorrer pelos seguintes motivos:
I
Por uma falha no processamento de um comando: indica que

Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
5 of 117 28/04/2024, 18:53
todas as alterações realizadas pela transação serão desfeitas
automaticamente.
II
Pelo comando COMMIT emitido pelo usuário: indica ao banco
de dados que a transação terminou e faz com que as
alterações realizadas sejam efetivadas nas tabelas.
III
Pelo comando ROLLBACK emitido pelo usuário: indica ao
banco de dados que a transação terminou e faz com que as
alterações realizadas sejam desfeitas nas tabelas.
No conceito de transação, falamos algumas propriedades que devem
ser mantidas. Mas quais são elas? Uma transação deve atender a um
conjunto de propriedades denominada ACID, que quer dizer:
 A
Atomicidade
 C
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
6 of 117 28/04/2024, 18:53
A seguir, apresentaremos cada uma destas propriedades de maneira
detalhada.
Atomicidade
A propriedade da atomicidade implica que uma transação é uma
unidade única, ou seja, se realizam todas as operações ou não se realiza
nenhuma.
A seguir, temos a tabela de contas correntes de um banco. O cliente J.
Silva possui duas contas, 1000 e 1002, e deseja fazer uma transferência
entre elas.
NRCC Nome CPF Saldo
Consistência
 I
Isolamento
 D
Durabilidade
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
7 of 117 28/04/2024, 18:53
1000 J. Silva 123 500,00
1001 A. Barros 143 500,00
1002 J. Silva 123 200,00
1003 S. Sales 223 500,00
Tabela: Conta corrente.
Sidney Nicolau Venturi Filho
Uma transferência pode ser entendida como um débito na conta 1000 e
o posterior crédito na conta 1002. Inicialmente, é comandado o débito,
veja o comando a seguir:
SQL 
A imagem a seguir, exemplifica a operação de débito realizada:
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
8 of 117 28/04/2024, 18:53
Débito na conta 1000.
Em seguida, é comandado o crédito, conforme o código a seguir:
SQL 
Veja na imagem como ficaria a operação de crédito realizada:
Crédito na conta 1002.
Porém, antes que a transação seja efetivada, ocorre um erro no banco,
ou seja, a operação de crédito falha (imagem a seguir).
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
9 of 117 28/04/2024, 18:53
O crédito na conta 1002.
Note que o débito foi realizado, mas o crédito não. Isso ocorre devido ao
fato de que cada operação foi considerada uma transação separada,
alguns SGBD como o SQL SERVER, ao não receberem um comando
explicito de abertura de transação, fazem COMMIT automático de cada
comando.
Esse comportamento, como no caso do exemplo, leva a um erro, pois
como se tratava de uma transferência, não faz sentido realizar apenas
uma das operações. Então, devemos “prender” os dois comandos em
uma única transação, vejamos o código a seguir:
SQL 
Veja, na próxima imagem, a operação realizada:
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
10 of 117 28/04/2024, 18:53
Transferência realizada.
Consistência
Esta propriedade estabelece que a execução de uma transação isolada
(ou seja, sem a execução de outra transação qualquer
concorrentemente) preserva a consistência do banco de dados.
Uma transação deve levar um banco de um estado consistente para
outro estado consistente, igual ou diferente do estado anterior, ainda
que durante sua execução o banco fique inconsistente (imagem a
seguir).
Execução de transação.
Veja um exemplo, considere a tabela de conta corrente ilustrada na
imagem a seguir. Voltemos à situação do cliente que deseja fazer uma
transferência de R$200,00 da conta 1000 para conta 1002.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
11 of 117 28/04/2024, 18:53
transferência de R$200,00 da conta 1000 para conta 1002.
Conta corrente.
Qual é a posição consistente neste caso? A soma do saldo da conta
1000 com a da conta 1002 é de R$700,00. Desta forma, ao final da
transação, a soma dos saldos dever ter este valor:
SQL 
Se a transação termina com COMMIT, a transação é efetivada e a soma
dos saldos é R$700,00. Portanto, temos um novo estado consistente,
pois o saldo de cada uma das contas mudou, como podemos conferir
na imagem a seguir:
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
12 of 117 28/04/2024, 18:53
Transferência realizada.
Entretanto, se a transação termina com ROLLBACK, as operaçõessão
desfeitas e o banco de dados volta ao estado consistente inicial, já que
a soma do saldo continua sendo R$700,00. Observe na imagem.
Transferência cancelada.
Isolamento
A propriedade do isolamento define que as operações de uma transação
não podem ser afetadas pelas operações de outra transação que esteja
sendo executada de forma concorrente.
Para exemplificar, vamos retornar ao exemplo da conta corrente a partir
da tabela a seguir.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
13 of 117 28/04/2024, 18:53
NRCC Nome CPF Saldo
1000 J. Silva 123 500,00
1001 A. Barros 143 500,00
1002 J. Silva 123 200,00
1003 S. Sales 223 500,00
Tabela: Conta corrente.
Sidney Nicolau Venturi Filho
Observe a sequência do exemplo a seguir:
Leitura do saldo
Imagine que o cliente Antônio Barros, conta 1001, vai ao caixa
eletrônico para fazer um saque de R$200,00. Para poder
efetivar o saque, o sistema então lê o saldo de R$500,00.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
14 of 117 28/04/2024, 18:53
T2 bloqueada
Neste mesmo instante, ocorre o débito automático de uma
conta de R$300,00 do cliente, para poder efetivar o pagamento
o sistema quer fazer a leitura do saldo da conta, porém agora a
transação 1 (saque) bloqueou o acesso ao saldo da conta o
que impede a transação 2 (pagamento da conta) de continuar
até que T1 faça COMMIT ou ROLLBACK.
Atualização pelo saque
T1 continua, atualiza o saldo, comanda COMMIT e o saque é
efetivado.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
15 of 117 28/04/2024, 18:53
Leitura do saldo pelo pagamento
Como T1 fez commit, a leitura do saldo por T2 foi liberada e a
transação pode continuar.
Atualização pelo pagamento
T2 agora leu o saldo, após a atualização de T1 (R$300,00), faz
o pagamento da conta, atualiza o saldo e executa o commit.
Resultado
Como resultado, temos que o cliente possuía um saldo inicial
de R$500,00, teve um conta de R$300,00 paga, sacou
R$200,00, portanto, utilizou R$500,00. Ao final, ficou com um
saldo de R$0,00, ou seja, as transações concorrentes
produziram o resultado correto devido ao isolamento das
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
16 of 117 28/04/2024, 18:53
transações.
Durabilidade
Esta propriedade estabelece que depois de a transação ser completada
com sucesso, as mudanças que ela faz no banco de dados persistem,
até mesmo se houver falha no sistema.
Se o usuário que fez a transferência do exemplo acima recebeu uma
informação que ela foi realizada, o SGBD deve garantir que, mesmo se
ocorrer uma falha, como crash de servidor, quando ele for restaurado, a
transferência deve constar ainda nos dados.
Para tal, arquivos de LOG e mecanismos de recuperação são utilizados.
Tipos de transações em banco de dados distribuídos
Uma solicitação de usuário em um banco de dados distribuídos pode
gerar dois tipos de transações:
Transações locais
Definidas como aquelas que acessam apenas dados no próprio banco
local onde se originou.
Transações globais
Definidas como aquelas que afetam mais de um banco local.
Cada um desses tipos exige uma forma de controle diferente.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
17 of 117 28/04/2024, 18:53
Mecanismos de controle de
transações locais
Neste vídeo, apresentaremos formas de reconhecer os mecanismos de
controle de transações locais, também falaremos sobre o
gerenciamento de transação e arquivos de LOG.
Controle de transações em bancos locais
O controle do processamento de uma transação local é praticamente
igual ao de uma transação em um banco centralizado. A imagem a
seguir mostra a arquitetura de um SGBD local:
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
18 of 117 28/04/2024, 18:53
Arquitetura do SGBD.
A partir da imagem apresentada, podemos destacar:
Responsável por:
• Receber o comando.
• Determinar o seu plano de execução.
• Executar a consulta.
• Inserir, remover e modificar as linhas e tabelas da base de
dados.
• Alterar os metadados.
Responsável pela execução da transação e controle da
concorrência.
Responsável por tratar os problemas decorrentes de uma falha
no SGBD.
Gerenciador de transação
As consultas e demais ações no banco de dados são agrupadas em
O otimizador de consulta 
O gerenciador de transação 
O mecanismo de recuperação 
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
19 of 117 28/04/2024, 18:53
As consultas e demais ações no banco de dados são agrupadas em
transações, que, como vimos, devem ser executadas de forma atômica
e durável, ou seja, o efeito de uma transação que foi completada deve
ser preservado mesmo após uma falha do sistema.
Em seu trabalho, o gerenciador de transação cria um identificador para
cada transação (TId) e o armazena em suas tabelas de controle. Além
disso, ele lida com o fato de que várias transações podem estar sendo
executadas de forma concorrente no banco de dados e, eventualmente,
tentarem acessar o mesmo item de dado, podendo gerar graves
problemas na consistência do banco.
Arquivo de LOG
Todo SGBD tem um arquivo de dados onde as informações são
armazenadas. A cada comando SQL submetido, o SGBD abre
implicitamente uma transação, caso esse comando não esteja incluído
dentro de uma transação explicitamente requisitada pelo usuário ao
SGBD. Desta forma, todo comando SQL está implicitamente ou
explicitamente dentro de uma transação.
Quando alguma informação é requisitada por uma transação, uma cópia
dela é criada na memória. Cada operação da transação vai sendo então
gravada no buffer do log existente na memória, como ilustra a tabela a
seguir:
Identificador
Transação
TId
Linha
Anterior
Transação
Linha
Posterior
Transação
Operação
Realização
Transação
T1 0 1 INICIAR
T1 1 4 ESCREVER
T2 0 9 INICIAR
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
20 of 117 28/04/2024, 18:53
T2 0 9 INICIAR
T1 2 5 ESCREVER
T1 4 8 LER
T3 0 7 LER
Tabela: Extrato de entradas do arquivo de LOG.
Sidney Nicolau Venturi Filho
Mecanismos de controle de
transações globais
Neste vídeo, você vai conhecer os mecanismos de controle de
transações em bancos globais.
Controle de transações em bancos globais
Quando falamos de controle de transações globais, a arquitetura
utilizada para o controle deve ser expandida para incluir o controle da
consulta global. Veja a imagem a seguir:
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
21 of 117 28/04/2024, 18:53
Arquitetura de controle de transações globais.
A partir da imagem, podemos observar que surgem então dois novos
módulos:
Responsável por montar o plano de execução da consulta,
quando esta envolve o acesso a mais de um banco local.
Realiza o controle da transação global sendo responsável por:
• Iniciar a execução da transação.
• Dividir a transação em subtransações e distribuí-las aos
bancos de dados locais que as devem executar.
• Coordenar o término da transação global, que pode resultar
Otimizador de consulta global 
Coordenador de transação global 
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
22 of 117 28/04/2024, 18:53
em ser efetivada ou abortada em todos os sites envolvidos.
Uma questão que surge neste ponto é: existe então um SGBDD para
controlar as transações globais?
Na realidade não, as funções associadas ao banco global (imagem
anterior)são realizadas pelo SGBD local que primeiro recebeu a
consulta global e que assume as tarefas de otimização e coordenação
globais. Na implementação da arquitetura, cada SGBD local possui uma
cópia do banco de dados global que engloba o diretório de dados global
(DDG) e o coordenador de transações global.
Diretório de dados global
Contém descrições dos objetos lógicos e físicos e dos
mapeamentos entre estes.
Ao receber uma consulta e identificá-la como uma
transação global, o SGBD local cria seu plano de
execução, atribui um TId, define as subtransações e as
envia aos demais sites para execução.
Durante o processamento da transação global, cada site executa a sua
subtransação usando os mesmos mecanismos de execução de uma
transação global e, ao produzir o resultado, o retorna ao site de origem.
Após todos os sites terem produzido o resultado, o coordenador de
transação global irá definir se os efeitos da transação devem ser
efetivados ou desfeitos (abortados).
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
23 of 117 28/04/2024, 18:53
Protocolos para con�rmação de
transação distribuída
Neste vídeo, apresentaremos formas de identificar os protocolos para
confirmação de transação distribuída, bem como os tipos de protocolos,
a confirmação em duas ases e a confirmação em três fases.
Tipos de protocolos
Para decidir que uma transação dever ser efetivada ou abortada, o
coordenador deve levar em conta se:

Todos os bancos locais tiveram sucesso na execução de suas
subtransações.

O usuário que fez a solicitação não comandou ROLLBACK.

Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
24 of 117 28/04/2024, 18:53
Não ocorreu uma falha em algum ponto do sistema.
Para obter os dados necessários para tomar a sua decisão, o
coordenador de transação pode utilizar um dos seguintes de protocolos
de confirmação (COMMIT):

Confirmação em duas fases.

Confirmação em três fases.
Con�rmação em duas fases
O protocolo de confirmação em duas fases (two phase commit – 2PC) é
muito simples e elegante, garantindo a atomicidade de transações
distribuídas. Ele estende os efeitos das ações locais de confirmação
atômica para transações distribuídas, insistindo que todos os sites
envolvidos na execução de uma transação distribuída concordem em
confirmar a transação antes que seus efeitos se tornem permanentes.
Apresentaremos o funcionamento do protocolo, observe, inicialmente, a
fase 1:
• O coordenador, que corresponde ao SGBD que iniciou a transação,
avisa aos bancos locais sobre a intenção de realizar o commit
enviando uma mensagem “prepare” e registra em seu log o início da
efetivação.
• Se o banco local estiver em condições de fazer o commit, ele anota
no seu log que está “pronto” para commit e envia um voto de
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
25 of 117 28/04/2024, 18:53
commit para o coordenador.
• Se o banco local não estiver em condições, ele registra no seu log
“Abort” e envia um voto para abortar ao coordenador.
Agora, apresentaremos a fase 2:
• Após receber os votos de todos os bancos locais envolvidos na
transação, o coordenador apura o resultado. Se houver pelo menos
um voto “abort”, o coordenador envia a todos os bancos locais a
mensagem para abortar, caso contrário, se todos os votos forem
favoráveis, ele envia uma mensagem commit. E, em ambos os
casos, o coordenador anota em seu log a decisão tomada.
• Os bancos locais, ao receberem a decisão do coordenador, adotam
a ação indicada e fazem as anotações em seu log e após terminar
notifica o coordenador que conclui a operação.
A operação do protocolo 2PC entre um coordenador e um participante
na ausência de falhas está representada na imagem a seguir, na quak os
círculos indicam os estados, os estados terminais são representados
por círculos concêntricos e as linhas tracejadas indicam as mensagens
entre o coordenador e os participantes.
Protocolo de Confirmação em duas fases.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
26 of 117 28/04/2024, 18:53
Quanto ao funcionamento do protocolo, devemos notar que a regra de
confirmação global estabelece que é necessário que todos os
participantes votem pela confirmação, se apenas um votar para abortar
a transação será cancelada. Alguns pontos importantes sobre o
protocolo 2PC que podem ser observados na imagem anterior são:
 O 2PC permite que um participante aborte
unilateralmente uma transação até que tenha
registrado um voto afirmativo.
 Uma vez que um participante vota para confirmar
ou abortar uma transação, ele não pode mudar seu
voto.
 Enquanto um participante está no estado Pronto,
ele pode se mover para abortar a transação ou
confirmá-la, dependendo da natureza da mensagem
do coordenador.
 A decisão de cancelamento é tomada pelo
coordenador de acordo com a regra de confirmação
global.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
27 of 117 28/04/2024, 18:53
Con�rmação em três fases
A confirmação em três fases (three phase commit – 3PC) surgiu como
uma evolução do 2PC para lidar com o fato de que, se o coordenador
falhar antes da confirmação, todos os bancos locais ficarão bloqueados
à espera da recuperação do site de origem, o que diminui o
desempenho.
Para lidar com isso, este protocolo realiza uma primeira fase igual a fase
1 do 2PC, uma segunda fase com novas operações e uma terceira fase
igual à fase 2 do 2PC. Em resumo:
Fase 1
Igual à fase1 do 2PC.
Fase 2
Acrescida pelo 3PC.
Fase 3
global.
 O coordenador e participante entram em
determinados estados em que precisam aguardar
mensagens um do outro. Para garantir que eles
possam sair desses estados e terminar, são usados
temporizadores.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
28 of 117 28/04/2024, 18:53
Igual à fase2 do 2PC.
Podemos notar então que o início e final dos dois protocolos são iguais.
A diferença é a “nova” fase2. Vamos ver em detalhes como ela funciona.
Após o coordenador receber os votos dos bancos locais, final
da fase 1, ele envia uma mensagem “Preparar para Confirmar”
a todos os sites envolvidos na transação.
Os bancos locais ao receberem a mensagem anotam em seu
log preparar para commit e informam ao coordenador que
estão prontos para confirmar.
O coordenador ao receber a mensagem de todos os envolvidos
para a fase 3, essa será igual à fase 2 do 2PC.
Este protocolo, apesar de resolver alguns problemas do 2PC, não foi
implementado na prática devido ao aumento da latência, gerado por
uma maior troca de mensagens entre os sites.
Falta pouco para atingir seus objetivos.
Vamos praticar alguns conceitos?
Questão 1
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
29 of 117 28/04/2024, 18:53
Questão 1
Considere que um usuário emitiu os seguintes comandos:
BEGIN TRANSACTION
UPDATE CONTA SET SALDO = SALDO - 300 WHERE NRCC = 1002;
COMMIT;
BEGIN TRANSACTION
UPDATE CONTA SET SALDO = SALDO + 300 WHERE NRCC = 1001;
COMMIT;
Sabendo-se que o usuário deseja fazer uma transferência entre as
contas, podemos concluir que, quanto às propriedades das
transações, se o segundo UPDATE não for efetivado
Parabéns! A alternativa C está correta.
Embora pareça que a atomicidade foi violada, essa foi uma opção
do usuário ao não envolver os dois comandos em uma única
A todas as propriedades foram atendidas.
B a atomicidade foi violada.
C a consistência foi violada.
D o isolamento foi violado.
E a durabilidade foi violada.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...30 of 117 28/04/2024, 18:53
transação. Mas a consistência dos dados foi violada, já que o valor
total final não corresponde à transferência que se desejava realizar.
Questão 2
Considere o seguinte cenário:
Um site denominado 5 recebeu uma transação que envolvia o
acesso aos sites 2, 3 e 4.Após definir as subtransações, enviou-as
aos sites que deveriam as executar. Após a mensagem “prepare”
enviada pelo coordenador de transação, os sites responderam:
• Site 2 COMMIT;
• Site 3 ABORT;
• Site 4 COMMIT.
Sabendo-se que o sistema utiliza a confirmação em duas fases,
podemos afirmar que:
O coordenador irá enviar a mensagem commit para os sites
Porque:
Na confirmação em duas fases, quando a maioria vota pelo commit,
ele é realizado.
Quantos às afirmativas, selecione a opção correta.
A
As duas afirmações estão corretas e a segunda
justifica a primeira.
B
As duas afirmações estão corretas e a segunda não
justifica a primeira.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
31 of 117 28/04/2024, 18:53
Parabéns! A alternativa E está correta.
A primeira afirmativa está errada porque no protocolo de
confirmação em duas fases basta um site votar pelo abort para a
transação ser abortada. A segunda é falsa porque, apesar de alguns
protocolos de confirmação levarem em conta a maioria, no 2PC
basta um votar abort para que todos tenham que abortar a
transação.
C A primeira afirmação é correta e a segunda falsa.
D A primeira afirmação é falsa e a segunda correta.
E As duas afirmações são falsas.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
32 of 117 28/04/2024, 18:53
2 - Controle de concorrência em banco de dados distribuídos
Ao �nal deste módulo, você será capaz de analisar as técnicas de controle de concorrência.
Transações concorrentes
Neste vídeo, apresentaremos o que são transações correntes e quais
são principais problemas gerados por essas transações.
O que são transações concorrentes?
Observe a seguir, o conteúdo de uma tabela de contas correntes de um
banco.
NRCC Nome CPF Saldo
1000 J. Silva 123 500,00
1001 A. Barros 143 500,00
1002 J. Silva 123 200,00
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
33 of 117 28/04/2024, 18:53
1003 S. Sales 223 500,00
Tabela: Conta corrente.
Sidney Nicolau Venturi Filho
Observe a sequência do exemplo a seguir:
Leitura do saldo
Agora, imagine que o cliente Antônio Barros, conta 1001, vai a
ao caixa eletrônico para fazer um saque de R$200,00. Para
poder efetivar o saque, o sistema lê o saldo de R$500,00.
Leitura do saldo com outra operação simultânea
Neste mesmo instante, ocorre o débito automático de uma
conta de R$300,00 do cliente, para poder efetivar o pagamento
o sistema faz a leitura do saldo da conta, R$500,00 realiza o
pagamento e atualiza o saldo para R$200,00.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
34 of 117 28/04/2024, 18:53
pagamento e atualiza o saldo para R$200,00.
Atualização pelo débito da conta
Em seguida, acontece a atualização do sistema pelo débito da
conta.
Atualização pelo saque
Após atualização, o saque é efetivado e o saldo da conta
atualizado.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
35 of 117 28/04/2024, 18:53
Resultado
Como resultado, temos que o cliente possuía um saldo inicial
de R$500,00, teve um conta de R300,00 paga, sacou R$200,00.
Portanto utilizou R$500,00. Mesmo assim, ficou com um saldo
de R300,00.
Devido ao fato de terem ocorrido duas operações em paralelo em cima
do mesmo conjunto de dados, o que caracteriza o acesso concorrente, a
aplicação de controle da conta corrente não soube lidar corretamente
com a situação.
A anomalia aconteceu afetando o isolamento entre as transações e a
sua consistência. Como se pode lidar com esta situação então? Por
meio dos mecanismos de controle de acesso concorrente do SGBD.
Problemas gerador por transações concorrentes
Quando ocorre acesso concorrente, alguns problemas podem acontecer
pela intercalação inadequada das operações nas transações, como:
• Problema da atualização perdida;
• Problema da atualização temporária ou leitura suja (dirty read);
• Problema da leitura que não pode ser repetida (nonrepeatable read);
• Problema da leitura fantasma (phantom read);
• Problema do resumo incorreto.
Vamos conhecer com mais detalhes esses problemas.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
36 of 117 28/04/2024, 18:53
Vamos conhecer com mais detalhes esses problemas.
Problema da atualização perdida
Este problema ocorre quando duas transações acessam o mesmo
conjunto de dados de forma concorrente e têm suas operações
intercaladas, o que faz com que gerem um resultado incorreto.
Observe, na tabela a seguir, um conjunto de operações realizado por
duas transações (T1 e T2 de forma intercalada). Assumindo que os
valores de X é 90 e de N é 3, vejamos como ocorrem as operações.
Instante Operação A B C X
1
T1 lê X para
A
90 90
2
T1 subtraí
N de A
87 90
3
T2 lê X para
C
87 90 90
4
T2 soma n
a C
87 93 90
5
T1
sobrescreve
X com A
87 92 87
6
T2 lê
sobrescreve
X com C
87 90 92 93
Tabela: Atualização perdida.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
37 of 117 28/04/2024, 18:53
Tabela: Atualização perdida.
Sidney Nicolau Venturi Filho
Ainda sobre a tabela anteriormente apresentada, note que X tinha o
valor inicial de 90, T1 subtrai 3 dele e T2 somou 3. Então, ao final, ele
deveria continuar com 90, mas seu valor final é 93. Isso aconteceu
porque a atualização feita por T1 no instante 5 foi perdida por T2 que
continuou utilizando o valor original de X.
Problema da atualização temporária ou leitura suja (dirty read)
Este problema ocorre quando uma transação atualiza um dado e outra
transação o lê antes que a primeira tenha sido efetivada (commit). Se a
transação da atualização falhar ou for desfeita (rollback), a transação
que leu irá operar com dados incorretos.
Observe, na tabela a seguir, um conjunto de operações realizado por
duas transações (T1 e T2 de forma intercalada). Assumindo que os
valores de X é 90 e de N é 3, como ocorrem as operações?
Instante Operação A B X T1
1
T1 lê X para
A
90 90
Leia
(x,a);
2
T1 subtraí
N de A
87 90
a: = a -
n;
3
T1
sobrescreve
X com A
87 87
Escreva
(a,x)
4
T2 lê X para
B
87 87 87
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
38 of 117 28/04/2024, 18:53
5
T2 soma n
a C
87 90 87
Escreva
(a,x)
6
T2
sobrescreve
X com B
87 90 90
7 T1 Falha 87 90 90 Falha
Tabela: Leitura suja.
Sidney Nicolau Venturi Filho
O que está errado?
Como T1 falhou, a atualização de X para 87 não deveria ter ocorrido.
Portanto, T2 deveria ter utilizado o valor 90 e não 87 e o resultado
deveria ser 93.
Problema da leitura que não pode ser repetida (nonrepeatable read)
Este problema ocorre quando uma transação lê o mesmo dado duas
vezes e o seu valor é alterado por outra transação entre as leituras.
Observe, na tabela a seguir, um conjunto de operações realizado por
duas transações (T1 e T2 de forma intercalada). Assumindo que os
valores de X é 90 e de N é 3, vamos ver como as operações ocorrem.
Instante Operação A C X T1
1
T1 lê X para
A
90 90
Leia (x,
a) ;
2
T1 subtraí
N de A
87 90
a: = a –
n;
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
39 of 117 28/04/2024, 18:53
3
T2 lê X para
C
87 90 90
4
T1
sobrescreve
X com A
87 90 87
Escreva
(a, x)
5T2 lê X para
C
87 87 87
Tabela: Leitura não repetível.
Sidney Nicolau Venturi Filho
Quando T2 fez a primeira leitura de X, obteve o valor 90 no instante 3,
porém, quando fez uma nova leitura, obteve um valor diferente no
instante 5, que foi 87. Isso ocorreu devido ao fato de, no instante 4, T1
ter atualizado o valor de X.
Problema da leitura fantasma (phantom read)
Este problema ocorre quando uma transação, ao ler dados lidos
anteriormente, descobre que o conjunto de linhas retornados é diferente
do anterior, pois, entre as leituras, outra transação inseriu novas linhas
na tabela.
Apesar de parecida com a leitura não repetível, a diferença reside no
fato de os dados anteriormente lidos não terem mudado, apenas foram
acrescentados novos dados.
Considere a seguinte tabela de alunos. apresentada na imagem a seguir:
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
40 of 117 28/04/2024, 18:53
Uma transação T1 deseja listar os alunos do curso 1 e obteria o
seguinte resultado demonstrado na imagem a seguir:
Após a execução deste comando, uma transação T2 insere duas novas
linhas na tabela apresentada na imagem a seguir:
Alterando os dados da tabela que fica com as seguintes linhas,
demonstrada na imagem a seguir:
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
41 of 117 28/04/2024, 18:53
T1 ao repetir a consulta anterior, obterá o seguinte resultado:
Note que apareceu uma nova linha no resultado, a linha 3 que não
existia antes. Esta é a linha fantasma.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
42 of 117 28/04/2024, 18:53
Problema do resumo incorreto
Este problema ocorre quando uma transação está realizando uma
agregação de dados e os valores com os quais ela vai operar são
alterados durante a sumarização.
Observe, na tabela a seguir, um conjunto de operações realizado por
duas transações (T1 e T3 de forma intercalada). Assumindo que os
valores de X e Y são iguais a 90 e o valor de N é 3, vejamos como
ocorrem as operações.
Tabela: Resumo incorreto.
Sidney Nicolau Venturi Filho
O que está errado? Como o valor inicial de X era 90 e foi reduzido para
87 por T1 no instante 4, quando T3 o lê atualiza o somador com este
valor. A seguir faz a leitura de Y que ainda não foi atualizado e, portanto,
acrescenta 90 ao somador totalizando 177. Entretanto, como o valor
final de X é 87 e de Y, 93, o resultado da soma deveria ser 180.
Controle de concorrência
Neste vídeo, apresentaremos formas de identificar os principais
controles de concorrência, particularmente nas execuções serial e

Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
43 of 117 28/04/2024, 18:53
intercalada.
Princípio de funcionamento do controle de concorrência
A ideia básica do controle de concorrência é produzir um resultado
consistente, ou seja, produzir o mesmo resultado que seria obtido se as
transações tivessem sido executadas uma depois da outra.
Então, uma escala de execução de transações sempre será correta se o
seu resultado corresponder ao obtido por uma execução sequencial
delas. Cabe ao SGBD definir o plano de escalonamento, ou seja, a forma
como as transações serão executadas.
Execução serial
Neste tipo de plano, as transações são escalonadas para serem
executadas uma depois da outra. Apresentaremos dois exemplos de
execução serial, veja o primeiro a seguir:
T1 T2
Leia (x,a);
a: = a - 50;
Escreva (a,x);
Leia (y,b);
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
44 of 117 28/04/2024, 18:53
b: = b + 50;
Escreva (b,y);
Leia (x,c);
temp: = a * 0,1;
c: = c - temp;
Escreva (c,x);
Leia (y,d);
d: = d + temp;
Escreva (d,y)
Tabela: Exemplo 01, execução serial.
Sidney Nicolau Venturi Filho
Veja na tabela a seguir o segundo exemplo de execução serial:
T1 T2
Leia(x,c);
temp:= a * 0,1;
c:=c-temp;
Escreva(c,x);
Leia(y,d);
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
45 of 117 28/04/2024, 18:53
Leia(y,d);
d:= d + temp;
Escreva(d,y)
Leia(x,a);
a:=a-50;
Escreva(a,x);
Leia(y,b);
b:=b+50;
Escreva(b,y);
Tabela: Exemplo 02, execução serial.
Sidney Nicolau Venturi Filho
Vamos analisar os dois escalonamentos passo a passo, para tal vamos
considerar os valores de X e Y como sendo 120 e 90, respectivamente.
vejamos na tabela a seguir o escalonamento 01:
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
46 of 117 28/04/2024, 18:53
Tabela: Escalonamento 01.
Sidney Nicolau Venturi Filho
Note que o valor final de X é 63 e de Y é 154. Vamos agora ver o
escalonamento 02:
Tabela: Escalonamento 02.
Sidney Nicolau Venturi Filho
Note que o valor final de X é 58 e de Y é 149, diferentes, portanto, do
valores obtidos ao final do escalonamento 01.
Isso significa que um deles está errado? Não! Os dois estão corretos,
qualquer resultado obtido por uma execução serial de transações
sempre está correto.
Execução intercalada
Quando as operações das transações são executadas de forma
intercalada, a execução intercalada estará correta sempre que o seu
resultado corresponder ao resultado de uma execução sequencial.
Vamos voltar às duas transações do exemplo anterior, veja a tabela a
seguir:
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
47 of 117 28/04/2024, 18:53
T1 T2
Leia (x,a); Leia (x,c);
a: = a-50; temp: = a * 0,1;
Escreva(a,x); c: = c-temp;
Leia (y,b); Escreva (c,x);
b: = b + 50; Leia (y,d);
Escreva(b,y); d: = d + temp;
Escreva (d,y)
Tabela: Transações de exemplo.
Sidney Nicolau Venturi Filho
Para análise dos escalonamentos intercalados, vamos considerar os
valores de X e Y, 120 e 90, respectivamente.
A tabela a seguir mostra o primeiro escalonamento intercalado:
T1 T2
Leia(x,a);
a:=a-50;
Escreva(a,x);
Leia(x,c);
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
48 of 117 28/04/2024, 18:53
temp:= a * 0,1;
c:=c-temp;
Escreva(c,x);
Leia(y,b);
b:=b+50;
Escreva(b,y);
Leia(y,d);
d:= d + temp;
Escreva(d,y)
Tabela: Escalonamento intercalado.
Sidney Nicolau Venturi Filho
Vejamos a seguir o resultado do escalonamento intercalado 01:
Tabela: Escalonamento intercalado 01.
Sidney Nicolau Venturi Filho
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
49 of 117 28/04/2024, 18:53
Note que o valor final de X é 63 e de Y é 154, que corresponde a um dos
resultados obtidos na execução serial. Portanto, este escalonamento
está correto.
Vamos agora ver o escalonamento 02:
T1 T2
Leia(x,a);
a:=a-50;
Leia(x,c);
temp:= a * 0,1;
c:=c-temp;
Escreva(c,x);
Escreva(a,x);
Leia(y,b);
b:=b+50;
Escreva(b,y);
Leia(y,d);
d:= d + temp;
Escreva(d,y)
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
50 of 117 28/04/2024, 18:53
Tabela: Escalonamento intercalado.
Sidney Nicolau Venturi Filho
Vejamos a seguir o resultado do escalonamento intercalado 02:
Tabela: Escalonamento intercalado 02.Sidney Nicolau Venturi Filho
Note que o valor final de X é 70 e o valor de Y é 154, o que não
corresponde a qualquer dos resultados obtidos na execução serial (X 63
e Y 154 ou X 58 e Y 149). O escalonamento, portanto, está errado e não
deve ser utilizado.
O erro ocorre no passo 3, quando T2 lê o valor de X antes dele ser
atualizado por T1 (atualização perdida). As questões que surgem então
são: “como uma execução intercalada pode produzir resultadosinconsistentes, deveria sempre ser utilizado um escalonamento serial?”
Em um mundo perfeito sim, mas no mundo real a execução serial tem o
indesejável efeito de aumentar o tempo de resposta se diversas
transações desejam acessar o mesmo conjunto de dados, já que
somente uma delas será executada de cada vez.
Por este motivo, os SGBDs utilizam escalonamento intercalado, mas
somente aqueles que produzem resultados equivalentes a uma
execução serial.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
51 of 117 28/04/2024, 18:53
execução serial.
Controle de concorrencia nas
transações locais
Neste vídeo, apresentaremos os principais tipos de controles de
concorrência nas transações locais e falaremos sobre o protocolo
baseado em bloqueio (controle pessimista).
Tipos de controle de concorrencia
Como as transações locais apenas acessam dados em seu próprio
banco, o seu controle é em tudo similar ao de bancos centralizados.
Então, para que o isolamento e a consistência sejam de fato possíveis, é
necessário que o SGBD realize o controle de concorrência entre as
transações locais podendo, para isso, utilizar basicamente dois
métodos de controle distintos, que são:
Partem da premissa de que as transações conflitam entre si na
maioria das execuções e estabelecem protocolos para o acesso
exclusivo aos dados pelas operações.
Métodos pessimistas 
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
52 of 117 28/04/2024, 18:53
exclusivo aos dados pelas operações.
Baseiam-se na premissa de que a maioria das transações não
possui operações conflitantes entre si, possibilitando livre
acesso aos valores dos objetos de dados. Ao final da execução
de uma transação – ao receber o comando de commit – fazem a
avaliação da história produzida. Caso o SGBD verifique a
violação do isolamento, a transação é desfeita.
Cada um desses métodos pode ser implementado com a utilização de
diversos protocolos, conforme apresentaremos a seguir, veja as
diferenças:
Métodos de controle
pessimista
• Bloqueio
• Timestamp
• Híbrido
Métodos de controle
otimista
• Timestamp
• Multiversão
Confira esses métodos em formato de gráfico a seguir:
Métodos otimistas 

Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
53 of 117 28/04/2024, 18:53
Tipos de Protocolos de métodos de controle de concorrência.
Desses protocolos, os mais utilizados são:
Bloqueio
Para o controle pessimista.
Timestamp
Para o controle otimista.
Protocolo baseado em bloqueio (controle pessimista)
Este é o tipo de protocolo que mais nos interessa em Bancos de Dados
Distribuídos.
Neste tipo de protocolo, quando uma transação T1 acessa um item de
dado, nenhuma outra pode acessá-lo. Para que isso aconteça, T1 deve
colocar um bloqueio (lock) no item de dado que deseja manipular. Aliás,
toda transação deve obrigatoriamente colocar um bloqueio em um item
de dados antes de o acessar, seja para leitura ou para escrita.
Esta solicitação é feita ao controlador de concorrência. A transação só
poderá executar qualquer operação depois que o controlador de
concorrência conceder (grant) o bloqueio do dado para a transação.
Existem basicamente dois tipos de bloqueio:
Compartilhado (S) 
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
54 of 117 28/04/2024, 18:53
Quando uma transação T1 deseja apenas ler um dado. Este
bloqueio permite que outras transações possam ler o dado, mas
não possam alterá-lo.
Quando uma transação T1 deseja alterar um dado. Este bloqueio
não permite que outras transações possam ler ou alterar o dado
bloqueado.
A tabela a seguir mostra a compatibilidade entre os tipos de bloqueio:
Compartilhado Exclusivo
Compartilhado Compatível Incompatível
Exclusivo Incompatível Incompatível
Tabela: Compatibilidade dos tipos de bloqueio.
Sidney Nicolau Venturi Filho
Podemos ver, na tabela a seguir, que duas transações diferentes podem
colocar um bloqueio compartilhado no mesmo item de dados, já que
apenas irão fazer leitura. Porém, se uma transação colocar um bloqueio
exclusivo, pois deseja escrever, as outras ficarão sem acesso ao item
até que ele seja liberado.
Controle de
Exclusivo (X) 
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
55 of 117 28/04/2024, 18:53
INSTANTE T1 T2
Concorrência
1 Lock-X(b);
2 Grant-X(b,T1)
3 Leia(b);
4 b:=b-50;
5 Escreva(b)
6
Lock-
S(a);
Grant-S(a,T2)
7 Leia(a);
8
Lock-
S(b);
9 Lock-S(a);
10 Grant-S(a,T2)
11 Leia(a);
Tabela: Transações concorrentes.
Sidney Nicolau Venturi Filho
Vamos analisar a execução passo a passo. Veja a tabela a seguir:
Instante Operação Observação
T1 solicita
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
56 of 117 28/04/2024, 18:53
1 bloqueio
exclusivo sobre B
2
T1 ganha acesso
exclusivo sobre B
B bloqueado para outras
transações
3 T1 lê B Para a memória
4 T1 subtrai 50 de B Na memória
5
T1 atualiza B no
banco
Grava a atualização no
disco
6
T2 solicita
bloqueio
compartilhado
sobre A
7
T2 ganha acesso
compartilhado
sobre A
A bloqueado para
transações de escrita e
liberado para bloqueios
de leitura
8 T2 lê A Para a memória
9
T2 solicita
bloqueio
compartilhado
sobre B
Como B tem um bloqueio
exclusivo T2 bloqueia
10
T1 solicita
bloqueio
compartilhado
Como A tem um bloqueio
compartilhado T1
também coloca o
bloqueio e ganha acesso
a A.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
57 of 117 28/04/2024, 18:53
compartilhado
sobre A
a A.
A tem dois bloqueios
compartilhados agora,
um de T1 e um de T2
11 T1 lê A Para a memória
Tabela: Passo a passo.
Sidney Nicolau Venturi Filho
Note que durante a execução:
• No instante 9, T2 bloqueou, pois, apesar de desejar apenas ler, T1
colocou um bloqueio exclusivo.
• No instante 10, T1 pediu um bloqueio compartilhado em A, como
ele é compatível com o bloqueio compartilhado colocado por T2 no
instante 7, T1 pode prosseguir.
Deadlock
O uso de bloqueios pode provocar o Deadlock. Mas, o que vem a ser
isso? Imagine que temos duas transações sendo executadas de forma
concorrente, como mostrado na tabela a seguir:
Instante T1 T2
Controle de
Concorrência
1 Lock-X(b);
2 Grant-X(b,T1)
3 Leia(b);
4 b:=b-50;
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
58 of 117 28/04/2024, 18:53
5 Escreva(b);
6
Lock-
S(a);
7 Grant-S(a,T2)
8 Leia(a);
9
Lock-
S(b);
10 Lock-X(b);
11 Situação de Deadlock
Tabela: Transações concorrentes.
Sidney Nicolau Venturi Filho
Vamos analisar a execução passo a passo, veja a tabela a seguir:
Instante Operação Observação
1
T1 solicita
bloqueio exclusivo
sobre B
2
T1 ganha acesso
exclusivo sobre B
B bloqueado para outras
transações
3 T1 lê B Para a memória
4 T1 subtrai 50 de B Na memória
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
59 of 117 28/04/2024, 18:53
5
T1 atualiza B no
banco
Grava a atualização no
disco
6
T2 solicita
bloqueio
compartilhado
sobre A
7
T2 ganha acesso
compartilhado
sobre A
A bloqueado para
transações de escrita e
liberado para bloqueios
de leitura
8 T2 lê A Para a memória
9
T2 solicita
bloqueio
compartilhado
sobre B
Como B tem um
bloqueio exclusivo T2
bloqueia
10
T1 solicita
bloqueio exclusivo
sobre A
Como B tem um
bloqueio compartilhado
T1 bloqueia
11 DEADLOCK
Nem T1 nem T2 podem
prosseguir
Tabela: Passo a passo.
Sidney Nicolau Venturi Filho
Como resolver o Deadlock? Existem basicamente duasestratégias:
Prevenção
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
60 of 117 28/04/2024, 18:53
Impedir que o deadlock aconteça realizando um controle maior da
concessão de bloqueios.
Detecção
Ao detectar que o deadlock ocorreu, resolver o conflito.
Como realizar a prevenção é muito custosa em termos de
processamento, pois a maioria dos SGBDs utiliza a detecção e ao
identificá-la realizam ROLLBACK do lock colocado por uma das
transações, isso libera a outra pra prosseguir.
Controle de concorrência em
transações globais
Neste vídeo apresentaremos, a partir de uma visão geral do controle de
concorrência de bancos de dados distribuídos, os principais controles
de concorrência nas transações globais. Além disso, vamos falar sobre
o protocolo de bloqueio em duas fases.
Visão geral do controle de concorrência em bancos de dados
distribuídos
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
61 of 117 28/04/2024, 18:53
Em comparação com um banco centralizado, um banco de dados
distribuído apresenta novos desafios para o controle de concorrência,
como:
 Lidar com múltiplas réplicas das tabelas, que exige
que o controle de concorrência mantenha a
consistência do banco global.
 Falha de sites individuais, o que acarreta o
problema de uma transação ser bem-sucedida em
um deles e não poder ser completada em outro.
 Falha dos links de comunicação, que pode tornar
um dos bancos locais inacessíveis.
 Confirmação distribuída, o que exige a adoção do
commit em duas fases ou em três fases.
 Ocorrência de Deadlock distribuído, o que exige a
extensão das técnicas de prevenção e detecção
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
62 of 117 28/04/2024, 18:53
Protocolo de bloqueio em duas fases (two phase lock - 2PL)
No controle de transação distribuída, é utilizada uma variação do
protocolo de bloqueio denominado protocolo de bloqueio em duas
fases, que facilita a obtenção da serialização das transações.
Este protocolo exige que todas as operações de bloqueio, tanto de
leitura como de gravação, sejam efetivadas antes que a primeira
operação de desbloqueio ocorra.
Podemos dividir a execução da transação em duas fases:
Expansão ou
crescimento
Novos bloqueios em
itens podem ser
obtidos, mas nenhum
liberado.
Encolhimento
Os bloqueios existentes
são liberados, mas
nenhum novo pode ser
obtido.
Observe a tabela a seguir, na qual são exibidas duas transações que não
seguem o protocolo de duas fases, porque o operação Lock-X(X) segue
a operação unlock(Y) em T1 e, de maneira semelhante, a operação Lock-
X (Y) segue a operação unlock (X ) em T2 e cuja execução serial produz
os resultados apresentados.
T1 T2
extensão das técnicas de prevenção e detecção
para este ambiente bem mais complexo.

Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
63 of 117 28/04/2024, 18:53
Lock-S(Y) Lock-S(X)
Leia(Y) Leia(X)
Lock-X(X) Unlock(X)
Unlock(Y) Lock-X(Y)
Leia(X) Leia(Y)
X: = X + Y Y: = Y+X
Escreva (X) Escreva (Y)
Unlock (X) Unlock (Y)
Valores Iniciais X = 20 Y = 30
Execução serial T1 e depois T2 X = 50 Y = 80
Execução serial T2 e depois T1 X=70 Y = 50
Tabela: Transações que não seguem o 2PL.
Sidney Nicolau Venturi Filho
Note que, como T1 e T2 não seguem o protocolo de duas fases, elas
podem produzir uma sequência de execução que não produz o resultado
equivalente a um serial, veja na tabela a seguir e considere que X = 50 e
y = 50 (Não serializável):
T1 T2
Lock-S(Y)
Leia(Y)
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
64 of 117 28/04/2024, 18:53
Unlock(Y)
Lock-S(X)
Leia(X)
Unlock(X)
Lock-X(Y)
Leia(Y)
Y:=Y+X
Escreva(Y)
Lock-X(X) Unlock(Y)
Leia(X)
X:=X + Y
Escreva(X)
Unlock(X)
Tabela: Transações que não seguem o 2PL.
Sidney Nicolau Venturi Filho
Para forçar o 2PL, as transações devem ser reescritas como exibido na
tabela a seguir, o que garante a serialização.
T1 T2
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
65 of 117 28/04/2024, 18:53
Lock-S(Y) Lock-S(X)
Leia(Y) Leia(X)
Lock-X(X) Lock-X(Y)
Unlock(Y) Unlock(X)
Leia(X) Leia(Y)
X: = X + Y Y: = Y+X
Escreva (X) Escreva (Y)
Unlock (X) Unlock (Y)
Tabela: Transações que seguem o 2PL.
Sidney Nicolau Venturi Filho
Controle de concorrência distribuído baseado em uma cópia
distinguida de um item de dados
Para lidar com dados replicados, foram propostas extensões das
técnicas utilizadas em bancos centralizados, passando pela designação
de uma das réplicas dos dados como sendo a responsável pelo controle
de concorrência (cópia distinguida).
Esta técnica pode assumir métodos diferentes para a escolha da cópia
distinguida, como:

Site primário

Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
66 of 117 28/04/2024, 18:53

Site primário com site de backup

Cópia primária
Site primário
Um único site é designado para realizar a coordenação para todos os
itens do banco de dados global, ficando responsável, portanto, pelo
controle de todos os bloqueios, recebendo todas as solicitações de
acesso dos outros sites. Neste caso, se todas as transações seguirem o
protocolo de bloqueio em duas fases, a serialização está garantida.
Sua grande vantagem é ser uma extensão simples da técnica
centralizada sendo relativamente simples. Suas desvantagens são:
• Como todas as solicitações de bloqueio são dirigidas a um único
site, ele pode ficar sobrecarregado, causando um gargalo no
sistema.
• Uma falha do site principal paralisa o sistema, pois toda a
informação de bloqueio é mantida nesse site.
Site primário com site de backup
Para enfrentar a segunda desvantagem citada, um segundo site é
designado como backup e mantém cópia das informações de bloqueio,
o que permite que em caso de falha do primário ele assuma.
Técnica de cópia primária
O controle de concorrência é distribuído por vários sites, cada um
controlando um conjunto distinto de itens de dados. Quando um dos
sites de controle falha, todas as transações que estão acessando os
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
67 of 117 28/04/2024, 18:53
sites de controle falha, todas as transações que estão acessando os
dados que ele controla ficam prejudicadas.
Para melhorar a confiabilidade, podem ser utilizados sites de backup.
Controle de concorrência distribuído baseado em votação
Neste tipo de controle de concorrência, a solicitação de bloqueio de um
item de dados é enviada para todos os bancos que possuem uma
réplica. Cada site então realiza o seu controle, podendo conceder ou
negar o bloqueio.
Se a transação que solicitou o bloqueio, o recebe da maioria dos sites,
ela mantém o bloqueio e informa a todos que o obteve. Caso contrário,
se a transação não recebe o bloqueio da maioria dos sites, ela cancela
sua solicitação e informa a todos que não realizará o bloqueio.
Falta pouco para atingir seus objetivos.
Vamos praticar alguns conceitos?
Questão 1
A imagem a seguir mostra o retorno de uma consulta realizada por
um usuário.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
68 of 117 28/04/2024, 18:53
Logo a seguir, dentro da mesma transação, ele repetiu a consulta e
obteve o seguinte resultado:
A respeito dos resultados obtidos, podemos afirmar que ocorreu a
anomalia de transação denominada
A atualização perdida.
B atualização temporária ou leitura suja (dirty read).
C
leitura que não pode ser repetida (nonrepeatable
Implementaçãode Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
69 of 117 28/04/2024, 18:53
Parabéns! A alternativa B está correta.
Os resultados mostram que, entre duas leituras do mesmo item de
dados realizados por uma mesma transação, o seu valor foi
modificado por outra transação, o que caracteriza leitura suja.
Questão 2
A tabela a seguir mostra as operações de duas transações T1 e T2.
Quanto à serialização das duas transações, podemos afirmar que:
C
read).
D leitura fantasma (phantom read).
E resumo incorreto.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
70 of 117 28/04/2024, 18:53
Elas seguem o protocolo de bloqueio em duas fases.
Porque
No protocolo 2PL todos os bloqueios devem ocorrer antes da
primeira liberação.
Quantos às afirmativas, assinale a alternativa correta.
Parabéns! A alternativa D está correta.
A primeira afirmativa é falsa porque, apesar de T1 seguir o
protocolo, T2 não segue, já que ocorre o desbloqueio de X antes do
bloqueio de Y. Já a segunda afirmativa é verdadeira, pois realizar
todos os bloqueios antes do primeiro desbloqueio é a característica
do protocolo de bloqueio em duas fases.
A
As duas afirmações estão corretas e a segunda
justifica a primeira.
B
As duas afirmações estão corretas e a segunda não
justifica a primeira.
C A primeira afirmação é correta e a segunda falsa.
D A primeira afirmação é falsa e a segunda correta.
E As duas afirmações são falsas.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
71 of 117 28/04/2024, 18:53
3 - Consultas distribuídas
Ao �nal deste módulo, você será capaz de identi�car as formas de otimização de consultas
em bancos de dados distribuídos.
Consultas locais
Neste vídeo, falaremos sobre a otimização e execução de comandos
locais e as estratégias para otimização de consultas.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
72 of 117 28/04/2024, 18:53
Otimização e execução de comandos locais
A otimização e execução de uma consulta local é, em sua totalidade,
similar à execução de consultas em um banco de dados centralizado.
Ao receber uma consulta, um SGDB gera um plano de execução para o
seu processamento, seguindo para isso um processo de várias etapas,
confira a seguir:
 Análise sintática
A sintaxe da consulta é verificada e os erros são
apontados.
 Análise semântica ou validação
É checada a existência de tabelas, visões e colunas,
bem como são realizadas verificações de tipos dos
atributos e dados utilizados na consulta.
 Reescrita de consulta
É realizada a reescrita do SQL em uma
representação interna derivada da álgebra
relacional.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
73 of 117 28/04/2024, 18:53
Estratégias para otimização de consultas
Inicialmente, o SGBD executa a otimização heurística de consultas, que
compreende transformar a consulta SQL em uma expressão algébrica.
A partir da expressão algébrica, é realizada a reordenação de suas
operações visando obter uma expressão mais eficiente. Baseando-se na
expressão otimizada, o SGBD pode definir os métodos de acesso e os
algoritmos adequados para a execução da consulta.
Após a otimização heurística, o SGBD irá analisar os metadados e
escolher os algoritmos para acesso físico ao conteúdo dos arquivos.
Neste ponto, ele pode utilizar duas abordagens:
 Otimização da consulta
Por meio s de um conjunto de regras, o SGBD
manipula a sua representação interna e procura a
estratégia de execução considerada mais eficiente.
 Geração de código
De posse do plano otimizado, ocorrem as
chamadas ao processador de execução do SGBD.
Otimização por regras 
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
74 of 117 28/04/2024, 18:53
O otimizador utiliza um conjunto de heurísticas para transformar
a consulta em um plano de acesso. Por exemplo, o otimizador
poderia sempre escolher utilizar um índice que esteja disponível
sobre uma coluna.
O otimizador consulta os metadados sobre as tabelas do banco
de dados para determinar qual o plano mais eficiente, mais
rápido, para execução da consulta.
Ao término da otimização, é gerado o plano de execução, que determina
as operações a serem realizadas, métodos de acesso, algoritmos a ser
utilizados, índices etc.
Métodos de acesso aos dados de tabelas
Estes métodos determinam a forma como as linhas de uma tabela
serão acessadas. Vejamos dois tipos de varreduras:
Comumente chamada de Full Table Scan (Varredura Completa
de Tabela), compreende a leitura sequencial de todas as linhas
de uma tabela.
Geralmente, é a opção feita pelo otimizador quando precisa
selecionar a totalidade das linhas da tabela, não existindo outro
método de acesso adequado ou devido a utilização de alguns
operadores como IS NULL, LIKE, <> etc.
Otimização por custo 
Varreduras sequenciais 
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
75 of 117 28/04/2024, 18:53
A determinação das linhas a serem acessadas é realizada a
partir de um ou mais índices aplicados as colunas da tabela.
Este método é muito eficiente na recuperação de um
subconjunto restrito dos dados.
Operações realizadas em consultas
Além de definir o método de acesso, o plano de execução especifica as
operações a serem realizadas. Veja a seguir:
Ordenação
Operação básica para diversas outras operações físicas, sendo
implementada pela cláusula ORDER BY. Se o conjunto a ser
ordenado não cabe em memória, esta operação pode ser muito
cara. Pode ser utilizada em DISTINCT, UNION, INTERSECTION,
JOIN e outras cláusulas.
Eliminação de duplicatas e agregações
Estas operações são implementadas, em geral, através de uma
ordenação (sorting) para realizar o agrupamento (GROUP BY).
Após a ordenação pelo critério de agregação, o resultado é
varrido e a operação é computada. Também é possível resolver
este tipo de operação através de técnicas de hash.
Varredura indexada 
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
76 of 117 28/04/2024, 18:53
este tipo de operação através de técnicas de hash.
Operações que atuam em mais de uma tabela
Para permitir a integração de dados de mais de uma tabela, o
plano de execução pode utilizar operações de conjunto (união,
interseção e diferença) e junções.
Consultas globais
Neste vídeo, falaremos sobre o processamento de uma consulta global
e apresentaremos o esquema de distribuição, as estratégias de solução,
o cálculo do custo e o processamento de consulta distribuído, usando
semijunção.
Passos para o processamento de consultas globais
O processamento de consultas globais ocorre em vários passos,
vejamos a seguir:
Mapeamento da consulta 
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
77 of 117 28/04/2024, 18:53
A consulta de entrada é analisada sintática e semanticamente,
com base no esquema conceitual global do banco de dados e, a
seguir, transformada em algum tipo de representação algébrica
interna, similar ao que foi visto no processamento do banco
local, sem levar em conta como os dados estão distribuídos.
Da expressão algébrica gerada no mapeamento, o SGBDD
localiza os metadados da distribuição do banco de dados,
determinando quais fragmentos possuem os itens de dados
necessários, bem como verificando se eles estão ou não
replicados e em quais sites residem, mapeando a consulta
distribuída no esquema global para consultas separadas para
cada um dos fragmentos/copias dos itens de dados.
O objetivo deste passo é encontraruma estratégia de execução
que seja a mais eficiente possível, ou seja, de menor custo,
utilizando o tempo como unidade de medida. Para o cálculo do
custo, são levados em conta além dos tempos de CPU e E/S, os
de comunicação, que nos BDD são, inclusive, mais significativos.
Após a análise dos custos, é gerado o plano de execução
distribuído para o banco global.
Localização de dados 
Otimização global da consulta 
Execução distribuída 
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
78 of 117 28/04/2024, 18:53
O SGBD global envia aos diversos bancos locais a parte do plano
que lhes cabe executar. Os bancos locais, então, definem o seu
plano de execução local, produzem o resultado e o retornam ao
site de origem.
Vejamos as etapas do processamento de consultas globais
esquematizado na imagem a seguir:
Processamento de consultas globais.
Exemplo de processamento de consulta global
Para este exemplo, considere o esquema conceitual global apresentado
na imagem a seguir:
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
79 of 117 28/04/2024, 18:53
Esquema conceitual global.
Considere agora que foi submetida a seguinte consulta no site 5:
SQL 
Esquema de distribuição
No esquema de distribuição, foi realizada a fragmentação horizontal das
tabelas, mantendo a disjunção da seguinte forma:
 Site 1
Tabela EMPREGADO denominada EMP1 com as
linhas dos empregados cuja matrícula seja menor
ou igual a que 10.
 Site 2
Tabela EMPREGADO denominada EMP2 com as
linhas dos empregados cuja matrícula seja maior
que 10.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
80 of 117 28/04/2024, 18:53
Estrategias de solução
Duas estratégias podem ser utilizadas para realizar a consulta.
Vejamos inicialmente a estratégia A:
• Transferir ALOCPROJ1 do site 3 para o site 1 onde será realizada a
junção com EMPREGADO1.
• Transferir ALOCPROJ2 do site 4 para o site 2 onde será realizada a
junção com EMPREGADO2.
• Transferir os resultados, R1 e R2, das junções dos sites 1 e 2 para o
site 5 que as combinaria e produziria a resposta final.
 Site 3
Tabela ALOCPROJ denominada ALOCPROJ1 com
as linhas dos empregados cuja matrícula seja
menor ou igual a que 200.
 Site 4
Tabela ALOCPROJ denominada ALOCPROJ2 com
as linhas dos empregados cuja matrícula seja maior
que 200.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
81 of 117 28/04/2024, 18:53
Vejamos na imagem a seguir o esquema gráfico que representa este
processo.
Esquema gráfico do processo da estratégia A.
Vejamos a seguir a estratégia B:
• Transferir EMPREGADO1 do site 1 para o site 5.
• Transferir EMPREGADO2 do site 2 para o site 5.
• Transferir ALOCPROJ1 do site 3 para o site 5.
• Transferir ALOCPROJ2 do site 4 para o site 5.
• Realizar as junções e demais operações no site 5 e produzir a
resposta final.
Vejamos na imagem a seguir o esquema gráfico que representa o
processo da estratégia B:
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
82 of 117 28/04/2024, 18:53
Esquema gráfico do processo da estratégia B.
Cálculo do custo
Para o cálculo do custo, vamos assumir os seguintes dados:
• EMPREGADO1 possui 200 linhas.
• EMPREGADO2 possui 200 linhas.
• ALOCPROJ1 possui 500 linhas com 10 linhas de gerentes.
• ALOCPROJ2 possui 500 linhas com 10 linhas de gerentes;
• O custo de acesso a uma linha é de 1 unidade de custo (UC).
• O custo de transferência de uma linha entre os sites são 10
unidades de custo (UC).
Vejamos a seguir os custos da estratégia A e da estratégia B:
1. Transferir ALOCPROJ1 para site 1 requer 5000 UC.
2. Transferir ALOCPROJ2 para site 2 requer 5000 UC.
3. Filtrar ALOCPROJ1 no site 1 requer 500 UC.
4. Filtrar ALOCPROJ2 no site 2 requer 500 UC.
5. Produzir R1 no site 1 requer 200 UC no processamento da
Custo da estratégia A 
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
83 of 117 28/04/2024, 18:53
junção.
�. Produzir R2 no site 1 requer 200 UC no processamento da
junção.
7. Transferir R1 para o site 5 requer 100 UC.
�. Transferir R2 para o site 5 requer 100 UC.
9. Produzir o resultado no site 5 requer 20 UC.
Custo Total: 11620 UC
1. Transferir EMPREGADO1 do site 1 para o site 5 requer 2000
UC.
2. Transferir EMPREGADO2 do site 2 para o site 5 requer 2000
UC.
3. Transferir ALOCPROJ1 do site 3 para site t requer 5000 UC.
4. Transferir ALOCPROJ2 do site 4 para site 5 requer 5000 UC.
5. Filtrar ALOCPROJ1 no site 5 requer 10 UC.
�. Filtrar ALOCPROJ2 no site 5 requer 10 UC.
7. Realizar a junção entre EMPREGADO e as filtragens de
ALOLCPROJ no site 5 e produzir o resultado requer 8000
UC.
Custo Total: 22020 UC
Podemos notar que a estratégia A é melhor que a B, apesar de ainda
possuir um custo relativamente alto. Será que podemos melhor? Sim,
utilizando semijunção.
Processamento de consulta distribuído usando sem�unção
O objetivo de executar semijunção é reduzir o número de linhas a ser
Custo da estratégia B 
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
84 of 117 28/04/2024, 18:53
transferido de um site para outro.
A ideia envolve transferir de um site A para o site B apenas a coluna
envolvida na condição de junção. No site b, a junção é realizada entre a
coluna recebida e seus itens de dados, sendo o resultado então enviado
para o site que produzirá o resultado.
Voltando ao exemplo de cálculo de custo, vamos ver a estratégia C.
• Produzir no site 3 o conjunto com a matrícula dos gerentes (G1).
• Produzir no site 4 o conjunto com a matrícula dos Gerente (G2).
• Transferir G1 do site 3 para o site 1, onde será realizada a junção
com EMPREGADO1.
• Transferir G2 do site 4 para o site 2, onde será realizada a junção
com EMPREGADO2.
• Transferir os resultados, R1 e R2, das junções dos sites 1 e 2 para o
site 5 que as combinaria e produziria a resposta final.
Vejamos na imagem a seguir o esquema gráfico que representa o
processo da estratégia C:
Esquema gráfico do processo da estratégia C.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
85 of 117 28/04/2024, 18:53
Vejamos a seguir o cálculo de custo da estratégia C:
1. Produzir G1 no site 1 requer 500 UC.
2. Produzir G2 no site 2 requer 500 UC.
3. Transferir G1 para site 1 requer 100 UC.
4. Transferir G2 para site 2 requer 100 UC.
5. Produzir R1 no site 1 requer 200 UC no processamento da
junção.
�. Produzir R2 no site 1 requer 200 UC no processamento da
junção.
7. Transferir R1 para o site 5 requer 100 UC.
�. Transferir R2 para o site 5 requer 100 UC.
9. Produzir o resultado no site 5 requer 20 UC.
Custo Total: 1820 UC
Observe como o uso da semijunção diminui muito o custo com a
transferência de dados entre os sites.
Falta pouco para atingir seus objetivos.
Vamos praticar alguns conceitos?
Questão 1
Durante o processo de execução e otimização de comandos de
Custo da estratégia C 
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
86 of 117 28/04/2024, 18:53
Durante o processo de execução e otimização de comandos de
consultas locais, temos uma etapa que verifica se as tabelas e
colunas referenciadas existem no banco de dados.
Esta etapa é denominada
Parabéns! A alternativa B está correta.
A análise semântica, também denominada validação, verifica se o
comando referência objetos e itens de dados que existem no banco
de dados bem como faz a verificação de tipos.
Questão 2
Quanto ao processamento de consultas globais na fasede
mapeamento da consulta, podemos afirmar que:
A análise sintática.
B análise semântica.
C reescrita de consulta.
D otimização da consulta.
E geração de código.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
87 of 117 28/04/2024, 18:53
A análise sintática e semântica é realizada de forma similar ao da
execução em um banco centralizado
Porque
Nesta fase, ocorre o acesso ao esquema conceitual global sem
levar em conta como a distribuição foi realizada.
Quanto às afirmativas, assinale a alternativa correta.
Parabéns! A alternativa A está correta.
As duas afirmativas estão corretas, pois uma consulta global do
ponto de vista do banco global é como se fosse nele centralizada,
somente na etapa seguinte localização dos dados é avaliada a
distribuição dos dados.
A
As duas afirmações estão corretas e a segunda
justifica a primeira.
B
As duas afirmações estão corretas e a segunda não
justifica a primeira.
C A primeira afirmação é correta e a segunda falsa.
D A primeira afirmação é falsa e a segunda correta.
E As duas afirmações são falsas.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
88 of 117 28/04/2024, 18:53
4 - SQL em consultas distribuídas
Ao �nal deste módulo, você será capaz de aplicar comandos utilizando SQL em consultas
distribuídas.
Acessando bancos de dados remotos
Neste vídeo, apresentaremos as formas de acesso a um banco de
dados remoto e falaremos também sobre a ligação de banco de dados.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
89 of 117 28/04/2024, 18:53
Formas de acesso a banco de dados remotos
Em SBDD, que implementam a transparência de distribuição, um usuário
realiza a sua consulta como se estivesse utilizando um banco de dados
centralizado, considerando apenas o esquema conceitual global do
banco, o que não acontece quando a transparência de distribuição não é
implementada no sistema. Neste último caso, que inclusive é bem
comum, o usuário necessita especificar, em sua consulta, qual o
fragmento ou cópia da tabela que deseja acessar.
Para permitir o acesso ao fragmento ou à cópia remota, é necessário
que o SGBD no site de origem consiga referenciar o servidor remoto.
Para isso, existe uma ferramenta nos SGBD denominada ligação de
banco de dados.
Ligação de banco de dados
A ligação de banco de dados permite que, a partir do canal de
comunicação da rede de computadores que interliga o servidor local e o
servidor remoto, seja criada uma ligação lógica entre os bancos
residentes. Veja o esquema da imagem a seguir:
Ligação entre servidores e entre banco de dados.
Cada fabricante de SGBD implementa de uma forma diferente este tipo
de ligação como, por exemplo:
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
90 of 117 28/04/2024, 18:53
Oracle
Permite a criação de database link, objeto de banco de dados,
que identifica e estabelece as informações de conexão para
um banco de dados remoto.
SQL Server
Utiliza os servidores vinculados (linked server) que permitem
enviar uma instrução SQL em uma instância do SQL Server, que
retorna dados de outras instâncias do SQL Server.
PostgreSQL
Utiliza a extensão dblink que fornece uma série de funções que
permitem acessar e manipular dados em outro servidor.
Para exemplificar o uso, vamos nos concentrar no dblink do PostgreSQL.
Descrição do ambiente dos
servidores
Neste vídeo, apresentaremos formas de configurar um servidor local e
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
91 of 117 28/04/2024, 18:53
Neste vídeo, apresentaremos formas de configurar um servidor local e
um remoto.
Os servidores
No ambiente que vamos utilizar para os exemplos, possuímos dois
servidores PostgreSQL denominados SERVIDOR1 e SERVIDOR2.
O Servidor1 está localizado em uma máquina local e rodando também o
PGAdmin, possuindo o banco de dados do escritório central de um
representante comercial.
O Servidor2 está em uma máquina virtual que é acessada pela rede
local, e cujo IP é 192.168.5.189, porta 5432, e que está sendo
administrado pelo PGAdmin localizado na máquina do Servidor1 e
possui o banco de dados da sucursal do representante comercial
(imagem a seguir).
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
92 of 117 28/04/2024, 18:53
PGAdmin do ambiente de exemplo.
Nos bancos central e sucursal possuímos a tabela FARMACIA, que foi
fragmentada horizontalmente, e cada fragmento possui os dados das
farmácias atendidas por aquele escritório.
O comando de criação da tabela farmácia é:
SQL 
Para criar as tabelas basta submeter os comandos aos dois servidores,
veja na imagem a seguir:
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
93 of 117 28/04/2024, 18:53
Submissão de comandos aos dois servidores.
Agora vamos colocar dados nas tabelas, para isso emita no banco
CENTRAL os seguintes comandos:
SQL 
Confira o resultado na imagem a seguir:
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
94 of 117 28/04/2024, 18:53
Comandos para inserir dados na tabela através do banco central.
Para colocar dados na sucursal, os comandos são:
SQL 
Confira o resultado na imagem a seguir:
Comandos para inserir dados na sucursal.
DBLINK POSTGRESQL
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
95 of 117 28/04/2024, 18:53
Neste vídeo, explicaremos o que é Dblink e como habilitá-lo em um
banco de dados.
O que é o dblink?
O dblink é uma extensão do servidor PostgreSQL que suporta conexões
com outros bancos de dados, no mesmo ou em outro servidor, a partir
da conexão em uso pelo usuário.
A extensão possui um conjunto de funções, cada uma com a sua
própria finalidade, veja a lista com cada uma delas a seguir de acordo
com a documentação de PostgreSQL:
• dblink_connect: Abre uma conexão persiste com um banco de
dados remoto.
• dblink_connect_u: Abre uma conexão persistente com um banco de
dados remoto, de forma insegura.
• dblink_disconnect: Fecha uma conexão persistente com um banco
de dados remoto.
• dblink: Executa uma consulta em um banco de dados remoto.
• dblink_exec: Executa um comando em um banco de dados remoto.
• dblink_open: Abre um cursor em um banco de dados remoto.
• dblink_fetch: Retorna linhas de um cursor aberto em um banco de
dados remoto.
Implementação de Banco de Dados Distribuídos https://stecine.azureedge.net/repositorio/00212ti/07592/index.html?bra...
96 of 117 28/04/2024, 18:53
• dblink_close: Fecha um cursor em um banco de dados remoto.
• dblink_get_connections: Retorna os nomes de todas as conexões
dblink nomeadas abertas.
• dblink_error_message: Obtém a última mensagem de erro na
conexão nomeada.
• dblink_send_query: Envia uma consulta assíncrona para um banco
de dados remoto.
• dblink_is_busy: Verifica se a conexão está ocupada com uma
consulta assíncrona.
• dblink_get_notify: Recupera notificações assíncrónas em uma
conexão.
• dblink_get_result: Obtém um resultado de consulta assíncrona.
• dblink_cancel_query: Cancela qualquer consulta ativa na conexão
nomeada.
• dblink_get_pkey: Retorna as posições e nomes de campo dos
campos de chave primária de uma relação.
• dblink_build_sql_insert: Constrói uma instrução INSERT usando
uma tupla local, substituindo os valores do campo de chave
primária por valores alternativos fornecidos.
• dblink_build_sql_delete: Constrói uma instrução DELETE usando
valores fornecidos para valores de campo de chave primária.
• dblink_build_sql_update:

Continue navegando