Tópicos Avançados de Bases de Dados
Instituto Politécnico da Guarda, Escola Superior de Tecnologia e Gestão, 2005/2006
Programa de TABD 2004/2005
• Componente teórica
–
–
Data Warehousing e OLAP
•
Conceitos básicos
Projecto de data warehouses
Particionamento de dados
Noções básicas de administração
•
•
•
Modelo multidimensional
Desempenho e optimização de queries
Discos RAID
Área de estágio e ETT
Henrique Madeira, DEI-FCTUC, 2001
2005/2006
Instituto Politécnico da Guarda, ESTG
1
–
Desenvolvimento de uma aplicação de base de dados (parcialmente feita fora do espaço das
aulas)
–
Aulas práticas
para consolidação de aspectos específicos da matéria básica de bases de dados:
•
•
Exercícios práticos sobre transacções e controlo de concorrência
Exercícios práticos sobre indexação
para consolidação de aspectos específicos da matéria de Data Warehousing e OLAP:
•
Definição de esquemas em estrela
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Conversar sobre bases de dados:
Henrique Madeira, DEI-FCTUC, 2001
• Componente prática
Henrique Madeira
Instituto Politécnico da Guarda, ESTG
2
Conversar sobre bases de dados:
algumas perguntas de diagnóstico
algumas perguntas de diagnóstico (cont.)
• O que é uma base de dados?
• O que é SQL?
• O que é um SGBD?
• O que é uma base de dados relacional?
• Quais os quatro comandos SQL mais importantes para
manipulação de dados?
• O que é o modelo relacional?
• O que são transacções?
• O que é integridade dos dados?
• Quais as propriedades das transacções?
• Como se garante a integridade dos dados?
• Como funciona o controlo de concorrência (bloqueios)?
Henrique Madeira, DEI-FCTUC, 2001
• O que é normalização?
• O que são formas normais?
• Quais os inconvenientes de as tabelas não estarem normalizadas?
• Como se normaliza tabelas?
• O que são modelos de Entidade-Relacionamento (ER)?
• O que são operações relacionais?
• Quais os principais métodos de acesso a dados?
Henrique Madeira, DEI-FCTUC, 2001
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Revisão e complemento de bases de dados relacionais
Revisão de conceitos básicos
Transacções e controlo de concorrência
Indexação
Tópicos Avançados
de Bases de Dados
• O que são índices e para que servem?
• Quais as regras básicas para definição de índices?
• O que é projecto lógico e projecto físico em bases de dados?
• Quais as principais operações relacionais?
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
3
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Conversar sobre bases de dados:
Instituto Politécnico da Guarda, ESTG
4
Transacções
algumas perguntas de diagnóstico (cont.)
• O que é programação no servidor (PL/SQL no caso do Oracle)?
• Mecanismo que valida (ou anula) conjuntos de operações básicas na
base de dados de uma maneira atómica:
• Quais as principais vantagens e desvantagens de programar no
servidor de bases de dados?
ou todas as operações elementares pertencentes à
transacção são confirmadas, ou são todas anuladas e
é como se nunca tivessem existido.
• O que são excepções e porque é que são muito importantes?
• O que são cursores e para que servem?
• O que são triggers?
Henrique Madeira, DEI-FCTUC, 2001
• Quais os grandes grupos de tarefas na administração de bases de
dados
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
5
INSERT
TRANSACÇÃO
INSERT DELETE UPDATE INSERT
COMMIT
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Transacções e controle de concorrência
UPDATE
INSERT
Henrique Madeira, DEI-FCTUC, 2001
TRANSACÇÃO
• Quando se fala em “administração de bases de dados” de que é
que se está a falar?
Tempo
COMMIT
OU
ROLLBACK
Instituto Politécnico da Guarda, ESTG
6
1
Tópicos Avançados de Bases de Dados
Instituto Politécnico da Guarda, Escola Superior de Tecnologia e Gestão, 2005/2006
Propriedades das transacções (ACID)
Dois requisitos particularmente importantes
• Atomicidade — todas as operações associadas à transacção
são executadas ou nenhuma o é
os efeitos de uma transacção devem ser
entendidos sem ter em conta as restantes
transacções
• Persistência – os resultados de uma transacção devem
permanecer na base de dados, mesmo que haja
uma falha após a conclusão da transacção.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
7
• Transacções DDL —
Apenas podem conter uma
instrução DDL.
INSERT
TRANS. DDL
INSERT DELETE CREATE TABLE
• Uma transacção termina com:
TRANS. DML
INSERT
Termina transacção
corrente e inicia
nova transacção
UPDATE
Termina transacção
DDL e inicia nova
transacção
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
8
• Uma transacção começa quando é encontrado o primeiro
comando DML (a seguir ao fim da transacção anterior);
Henrique Madeira, DEI-FCTUC, 2001
TRANS. DML
Instituto Politécnico da Guarda, ESTG
Processamento de transacções
(Caso do Oracle)
Podem conter qualquer
número de instruções DML.
(é da responsabilidade do SGBD)
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instruções DML, DDL e transacções
• Transacções DML —
• Atomicidade — todas as operações associadas à transacção são executadas ou nenhuma o é
Henrique Madeira, DEI-FCTUC, 2001
• Isolamento –
(é da responsabilidade do programador)
9
– COMMIT
(a transacção é confirmada);
– ROLLBACK
(a transacção é abortada);
– Comando DDL
(a transacção é confirmada);
– Detecção de ERROS
(a transacção é abortada);
– Saída (EXIT) da sessão SQL
(a transacção é confirmada).
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Savepoints
Instituto Politécnico da Guarda, ESTG
Henrique Madeira, DEI-FCTUC, 2001
a execução de uma transacção leva a base de
dados de um estado consistente para um
novo estado consistente
Henrique Madeira, DEI-FCTUC, 2001
• Consistência –
• Consistência — garantia de correcção da informação
10
Durante uma transacção
• Permitem guardar todas as alterações efectuadas desde o início da
transacção corrente, ou desde o último Savepoint;
Enquanto as alterações introduzidas durante a transacção corrente não
forem confirmadas (Commit), estas alterações:
• Não terminam a transacção, apenas guardam as alterações efectuadas;
• Úteis em transacções muito longas;
– são visíveis para o dono da transacção;
• Pode-se fazer Rollback para um Savepoint, anulando assim apenas as
alterações introduzidas depois desse Savepoint;
Henrique Madeira, DEI-FCTUC, 2001
• Quando a transacção termina todos os Savepoints são eliminados.
COMMIT
SAVEPOINT S1
SAVEPOINT S2
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
ROLLBACK TO S2
COMMIT
Instituto Politécnico da Guarda, ESTG
11
Henrique Madeira, DEI-FCTUC, 2001
– são invisíveis para as outras transacções (estes vêem o estado após o
último Commit);
• Depois de Rollback To Savepoint a transacção continua activa;
– podem ser anuladas através de Rollback;
– podem ser anuladas parcelarmente através de Rollback para um
Savepoint.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Transacções e controle de concorrência
Instituto Politécnico da Guarda, ESTG
12
2
Tópicos Avançados de Bases de Dados
Instituto Politécnico da Guarda, Escola Superior de Tecnologia e Gestão, 2005/2006
Transacções e transparência para o programa
Atomicidade e consistência de dados: um exemplo
Transferência de 5000 contos entre duas contas bancárias:
O controlo (início/fim) das transacções é explícito e
visível para o programador/utilizar.
1) Débito de 5000 contos da conta origem;
2) Crédito de 5000 contos da conta destino.
O programador é responsável por definir as operações
que devem ser executadas atomicamente através do
mecanismos das transacções.
Instituto Politécnico da Guarda, ESTG
13
Instituto Politécnico da Guarda, ESTG
14
Rollback ao nível do comando SQL
• Se, durante a fase de execução de um comando DML, for
detectado um erro é feito Rollback do comando (é como se o
• A execução bem sucedida de um comando DML
comando nunca tivesse sido iniciado)
—> todo o comando foi executado sem erros e de uma
maneira atómica (e.g., todos os registos seleccionados foram actualizados);
Henrique Madeira, DEI-FCTUC, 2001
• Possíveis erros detectados:
• As alterações efectuadas por um comando só ficam
permanentes quando ocorrer o Commit da transacção.
Instituto Politécnico da Guarda, ESTG
As transacções devem englobar conjuntos de comandos que promovem alterações consistentes de dados
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Execução de comandos DML em SQL e
controlo das transacções
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Transacção
15
– tentativas de violação de integridade;
– incompatibilidade de dados;
– Esgotamento do espaço disponível para a tabela;
– etc
Henrique Madeira, DEI-FCTUC, 2001
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Crédito Commit
Henrique Madeira, DEI-FCTUC, 2001
Henrique Madeira, DEI-FCTUC, 2001
Commit Débito
• Todas as alterações provocadas pela execução parcial do
comando (até à detecção do erro) são desfeitas.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
16
COMMIT [WORK]
Instruções SQL para controlo de transacções
• Termina explicitamente transacção corrente:
– Torna definitivas as alterações efectuadas durante a transacção;
• COMMIT [WORK]
– Elimina todos os Savepoints efectuados durante a transacção;
Henrique Madeira, DEI-FCTUC, 2001
• ROLLBACK [WORK] TO [SAVEPOINT] <nome do savepoint>
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
17
Henrique Madeira, DEI-FCTUC, 2001
– Liberta os bloqueios da transacção.
• SAVEPOINT <nome do savepoint>
Recordar que:
A transacção também pode terminar de uma maneira implícita (sem o comando
Commit):
– Antes de uma instrução DDL;
– Depois de uma instrução DDL;
– Ao sair da sessão SQL.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Transacções e controle de concorrência
Instituto Politécnico da Guarda, ESTG
18
3
Tópicos Avançados de Bases de Dados
Instituto Politécnico da Guarda, Escola Superior de Tecnologia e Gestão, 2005/2006
SAVEPOINT <nome do savepoint>
ROLLBACK [WORK] TO [SAVEPOINT] <nome_savepoint>
• ROLLBACK TO <nome do savepoint>
• Guarda as alterações efectuadas até esse ponto da execução
da transacção:
– Desfaz as alterações efectuadas desde o savepoint mencionado;
– Liberta bloqueios estabelecidos depois do savepoint.
– Usado para dividir uma transacção em partes mais pequenas;
– Em caso de engano é possível desfazer as alterações feitas e retomar
o estado a partir de um savepoint estabelecido anteriormente;
• ROLLBACK
– Há um limite para o número de savepoints por transacção (poucos
savepoints, normalmente).
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
19
– Termina a transacção abortando-a;
– Desfaz todas as alterações efectuadas desde o início da transacção;
– Apaga todos os savepoints;
– Liberta os bloqueios da transacção.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Exemplo de utilização de savepoints
Henrique Madeira, DEI-FCTUC, 2001
Henrique Madeira, DEI-FCTUC, 2001
– Se for criado um segundo savepoint com o mesmo nome de um
anterior o savepoint anterior é apagado;
Instituto Politécnico da Guarda, ESTG
20
Consistência da informação
• Dois tipos de acesso à base de dados:
INSERT INTO ELEITOR (BI, NOME, END, N_ELEITOR)
– Operações de leitura (SELECT);
VALUES (4537687, ‘António Silva’, ‘R. Carlos seixas, 29, 1º, Esq’, 2075);
– Operações de escrita (INSERT, UPDATE, DELETE).
SAVEPOINT INSERÇÃO_CONCLUIDA;
UPDATE ELEITOR
SET
NOME = ‘António Dias da Silva’, BI = 4537688;
Henrique Madeira, DEI-FCTUC, 2001
(Anula comando de actualização);
UPDATE ELEITOR
(Comando de actualização revisto);
SET
NOME = ‘António Dias da Silva’, BI = 4537688
WHERE N_ELEITOR = 2075;
COMMIT;
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
21
– As operações de leitura não visualizam dados em processo
de alteração;
– As operações de escrita são feitas de modo consistente, i.e.,
as alterações feitas por um utilizador não entram em conflito
com as alterações que outro utilizador esteja a fazer.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Segmentos de Rollback (Oracle)
Henrique Madeira, DEI-FCTUC, 2001
• Problemas: garantir que
ROLLBACK TO INSERÇÃO_CONCLUIDA
Instituto Politécnico da Guarda, ESTG
22
Segmentos de Rollback: utilização
• Parte da base de dados onde são registadas as acções de uma transacção
que podem vir a ser desfeitas (rolled back) em certas circunstâncias;
• Os segmentos de rollback são usados para:
– Assegurar a consistência de leituras;
• Os segmentos de rollback contêm os valores antigos relativos a todas as
alterações efectuadas a dados durante uma transacção;
Henrique Madeira, DEI-FCTUC, 2001
• Os segmentos de rollback são uma estrutura interna manipulada pelo
SGBD e não pode ser acedida pelos utilizadores nem pelo administrador
da base de dados.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
23
Henrique Madeira, DEI-FCTUC, 2001
– Efectuar o rollback de transacções;
• Cada base de dados contém um ou mais segmentos de rollback;
– Recuperação após falha (em conjunto com outros mecanismos).
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Transacções e controle de concorrência
Instituto Politécnico da Guarda, ESTG
24
4
Tópicos Avançados de Bases de Dados
Instituto Politécnico da Guarda, Escola Superior de Tecnologia e Gestão, 2005/2006
Uso de segmentos de Rollback
Consistência da leitura
Utilizador A
Transacção T1
• Garantir que cada utilizador vê os dados conforme eles
existiam no momento da última confirmação (commit).
Novo valor
do registo
Henrique Madeira, DEI-FCTUC, 2001
Identificação da
alteração e valor
antigo do registo
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
Leituras durante a transacção:
Leituras durante a transacção:
o utilizador é o dono da transacção
outros utilizadores
Utilizador A
Transacção T1
Utilizador B
Transacção T2
Blocos de
dados
Blocos de
dados
SELECT *
FROM ELEITOR
WHERE N_ELEITOR < 2000;
As leituras
durante T1 são
feitas sobre os
dados alterados
Segmentos de
rollback
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Dados não
alterados
SELECT *
FROM ELEITOR
WHERE N_ELEITOR < 2000;
Henrique Madeira, DEI-FCTUC, 2001
UPDATE ELEITOR (Nome)
SET NOME = ‘António Dias Silva’
WHERE N_ELEITOR = 2075;
Instituto Politécnico da Guarda, ESTG
27
“Imagem de
consistência
de leitura”
Dados
antigos
Início da transacção só de leitura
• Para garantir que os resultados obtidos por um dado conjunto de
consultas são consistentes é necessário incluir essas instruções numa
28
Fim da transacção só de leitura
Sessão X
transacção só de leitura.
COMMIT
COMMIT
Sessão A
• Numa transacção só de leitura todas as instruções vêem os dados no
estado (consistente) relativo ao início da transacção (alterações
confirmadas antes do início da transacção). Alterações efectuadas a esses
dados por outros utilizadores não são visíveis durante a transacção só de
leitura.
Henrique Madeira, DEI-FCTUC, 2001
COMMIT
• Estas transacções usam segmentos de rollback de modo semelhante ao
usado na consistência de leitura ao nível da instrução.
Instituto Politécnico da Guarda, ESTG
Instituto Politécnico da Guarda, ESTG
Consistência nas transacções só de leitura
• O SGBD garante, por defeito, que os resultados obtidos por uma
instrução SELECT (consulta) são sempre consistentes.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Segmentos de
rollback
Outros utilizadores vêem os
dados como no início da transacção T1 do utilizador A
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Transacções só de leitura
26
Henrique Madeira, DEI-FCTUC, 2001
25
Segmentos
de rollback
29
COMMIT
Henrique Madeira, DEI-FCTUC, 2001
Instituto Politécnico da Guarda, ESTG
Henrique Madeira, DEI-FCTUC, 2001
UPDATE ELEITOR (Nome)
SET NOME = ‘António Dias Silva’
WHERE N_ELEITOR = 2075;
• Só depois de confirmadas (pelo commit da transacção
corrente) é que as últimas alterações se tornam visíveis
para todos os utilizadores.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Blocos
de dados
Sessão B
COMMIT
COMMIT
Sessão C
Tempo
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Transacções e controle de concorrência
Instituto Politécnico da Guarda, ESTG
30
5
Tópicos Avançados de Bases de Dados
Instituto Politécnico da Guarda, Escola Superior de Tecnologia e Gestão, 2005/2006
Usar transacções só de leitura
Exemplo de transacção só de leitura
COMMIT;
• Começam pelo comando SET TRANSACTION READ ONLY.
SET TRANSACTION READ ONLY;
• Só admitem consultas (SELECT); comandos DML não são
permitidos.
SELECT N_DOCENT, NOME
FROM DOCENTES;
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
31
SELECT N_ALUNO, NOME
FROM ALUNOS;
Henrique Madeira, DEI-FCTUC, 2001
Henrique Madeira, DEI-FCTUC, 2001
• A transacção só de leitura termina quando for executado um Commit,
Rollback ou uma instrução DDL.
SELECT *
FROM AL_DOC;
COMMIT;
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
Segmentos de rollback: outros aspectos
Segmentos de rollback: commit
• Sempre que começa uma transacção é atribuído um segmento de
rollback a essa transacção.
• Quando uma transacção termina por commit a informação de rollback
é libertada;
32
• Contudo, permanecerá no segmento de rollback de modo a fornecer
uma visão consistente dos dados, no caso de haver consultas (de outros
utilizadores) sobre esses dados que tenham começado antes do commit;
• Durante a transacção, registo correspondente a cada nova alteração é
ligado ao registo correspondente à alteração anterior, de molde a
facilitar as leituras e/ou o rollback.
• Só quando a informação de rollback já não é necessária para garantir
a consistência de leituras pendentes é que é destruída.
Henrique Madeira, DEI-FCTUC, 2001
• Durante a transacção, por cada alteração efectuada é guardado (entre
outras coisas) o valor antigo no segmento de rollback correspondente.
• No caso de haver savepoints, as alterações são relacionadas com o
savepoint correspondente.
• Em caso de necessidade são atribuídos novos segmentos de rollback à
transacção.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
33
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Segmentos de rollback: rollback
Instituto Politécnico da Guarda, ESTG
Henrique Madeira, DEI-FCTUC, 2001
• Cada segmento de rollback pode tratar mais do que uma transacção.
34
Concorrência e consistência
• Todas as alterações efectuadas durante a transacção são desfeitas
usando a informação de rollback armazenada no(s) segmento(s)
correspondente(s);
Controle da concorrência: objectivos
• Garantir a consistência dos dados;
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
35
• Maximizar a concorrência, i.e., permitir que os
dados sejam
utilizados/manipulados por um
grande número de utilizadores.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Transacções e controle de concorrência
Instituto Politécnico da Guarda, ESTG
Henrique Madeira, DEI-FCTUC, 2001
Henrique Madeira, DEI-FCTUC, 2001
• No caso de ROLLBACK TO SAVEPOINT só são desfeitas as alterações
efectuadas depois do savepoint. A utilização dos segmentos de rollback
é semelhante ao caso anterior.
36
6
Tópicos Avançados de Bases de Dados
Instituto Politécnico da Guarda, Escola Superior de Tecnologia e Gestão, 2005/2006
Bloqueios (locking)
Problemas inerentes à concorrência
Quando os dados devolvidos por uma instrução
de consulta reflectem alterações introduzidas
e/ou confirmadas na base de dados durante a
execução da instrução de consulta;
• Leituras não reprodutíveis;
Quando, numa mesma transacção, duas
consultas aos mesmos dados mostram
informação diferente, devido a alterações
entretanto confirmadas por outras transacções;
Quando, numa transacção, são lidos dados
ainda não confirmados por outra transacção;
Quando a actualização de um registo numa
transacção é efectuada sobre valores alterados
mas ainda não confirmados por outra
transacção.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
37
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
38
Bloqueios: idéia básica
Necessidade de bloqueios
• Durante uma transacção, todos os registos (tabelas) alterados são
automaticamente bloqueados de modo a impedir que outras transacções
os possam alterar simultaneamente;
• Sempre que um utilizador tenta introduzir alterações na
base de dados (acessos de escrita);
• Nunca são necessários bloqueios quando quando o acesso à
base de dados é de leitura;
• Se uma transacção tentar alterar um objecto previamente bloqueado
por outra transacção ficará suspensa em lista de espera até que esse
objecto seja libertado;
Henrique Madeira, DEI-FCTUC, 2001
– Os acessos de leitura nunca bloqueiam os acessos de escrita;
– Os os acessos de escrita nunca bloqueiam os acessos de leitura;
– Só acessos de escrita podem bloquear outros acessos de escrita.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
• Impede alterações na definição de uma tabela ou de uma
coluna enquanto estiveram a decorrer transacções que
actualizem os dados da tabela ou coluna.
Instituto Politécnico da Guarda, ESTG
39
• No final de uma transacção todos os objectos bloqueados
instruções dessa transacção são libertados.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Henrique Madeira, DEI-FCTUC, 2001
• Perda de actualizações
• Impede a actualização simultânea dos mesmos dados por
dois ou mais utilizadores;
Henrique Madeira, DEI-FCTUC, 2001
• Leituras erróneas;
• Mecanismo utilizado para controlar o acesso concorrente
aos mesmos dados;
Henrique Madeira, DEI-FCTUC, 2001
• Leituras inconsistentes
pelas
Instituto Politécnico da Guarda, ESTG
40
Tipos de bloqueios
Funcionamento dos bloqueios: idéia base
• Bloqueio do dicionário de dados:
Func
UPDATE FUNC
SET
WHERE
SAL = SAL * 1.05
DEPT = 10;
Nome
Num
Dept
SAL
João
Ana
1002
986
10
10
254345
125300
Manuel
Maria
Arnaldo
1023
878
1068
40
30
10
234687
452873
98675
– é controlado automaticamente pelo SGBD.
Henrique Madeira, DEI-FCTUC, 2001
UPDATE FUNC
SET
NOME = ‘Tiago’
WHERE NUM = 1002;
COMMIT;
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
41
• Bloqueio de manipulação de dados:
Henrique Madeira, DEI-FCTUC, 2001
COMMIT
– permite controlar o acesso à definição de objectos na base de dados
(e.g. tabelas através de instruções CREATE TABLE, ALTER TABLE,
DROP TABLE);
– permite controlar o acesso aos dados nas tabelas;
– o SGBD bloqueia implicitamente as tabelas/registos que estão a ser
alterados por um utilizador;
– um utilizador pode adquirir explicitamente um bloqueio numa
tabela da base de dados.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Transacções e controle de concorrência
Instituto Politécnico da Guarda, ESTG
42
7
Tópicos Avançados de Bases de Dados
Instituto Politécnico da Guarda, Escola Superior de Tecnologia e Gestão, 2005/2006
Tipos de bloqueio implícito
Níveis de bloqueio (dados)
(caso do Oracle)
Permite consultas ao recurso bloqueado
(registo ou tabela) mas não permite qualquer
outro acção sobre o recurso;
• Exclusivo (X)
- aplica-se a toda a tabela;
• Exclusivo de
registos (RX)
Vários utilizadores podem bloquear registos
individuais na tabela e efectuar e confirmar
alterações simultaneamente;
Henrique Madeira, DEI-FCTUC, 2001
• Bloqueio de registo - aplica-se apenas a um registo de uma
dada tabela.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Permite o acesso concorrente a uma tabela
impedindo outros utilizadores de bloquearem
toda a tabela para acesso exclusivo;
Instituto Politécnico da Guarda, ESTG
43
Registos bloqueados podem ser consultados
mas só poderão ser alterados quando os
bloqueios forem libertados
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Aquisição implícita de bloqueio
Henrique Madeira, DEI-FCTUC, 2001
• Bloqueio de tabela
Instituto Politécnico da Guarda, ESTG
44
Exemplo de bloqueios implícitos
(Oracle)
Ambos utilizadores adquirem bloqueio exclusivo
de registos (RX) sobre a tabela
Utilizador A
Sem bloqueio
INSERT
X
RX
UPDATE
X
RX
DELETE
X
RX
DDL
—
X
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
45
Func
Bloqueio
exclusivo
do registo (X)
Nome
Num
Dept
SAL
João
Ana
Manuel
Maria
Arnaldo
1002
986
1023
878
1068
10
10
40
30
10
254345
125300
234687
452873
98675
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Bloqueio
exclusivo
do registo (X)
Instituto Politécnico da Guarda, ESTG
46
Aquisição de bloqueios explícitos
Bloqueio explícito
• Um utilizador pode adquirir explicitamente um bloqueio
quando:
Através das instruções SQL
SELECT ... FOR UPDATE OF
Henrique Madeira, DEI-FCTUC, 2001
– Pretende consultar dados em várias tabelas e quer ter a certeza de
obter uma visão consistente dos dados nas tabelas;
– Uma transacção necessita alterar dados com base em outros dados
que não podem ser alterados até a transacção estar concluída.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
UPDATE FUNC
SET SAL = SAL * 1.05
WHERE NUM = 1068;
Instituto Politécnico da Guarda, ESTG
47
Henrique Madeira, DEI-FCTUC, 2001
SELECT
Utilizador B
UPDATE FUNC
SET NOME = ‘Tiago’
WHERE NUM = 986;
Henrique Madeira, DEI-FCTUC, 2001
Nível de bloqueio
Registo Tabela
Henrique Madeira, DEI-FCTUC, 2001
Acção do
utilizador
LOCK TABLE
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Transacções e controle de concorrência
Instituto Politécnico da Guarda, ESTG
48
8
Tópicos Avançados de Bases de Dados
Instituto Politécnico da Guarda, Escola Superior de Tecnologia e Gestão, 2005/2006
SELECT ... FOR UPDATE OF ...[NOWAIT]
LOCK Table
• Aquisição explícita de um bloqueio
• Utiliza-se quando:
– está previsto actualizar um dado conjunto de registos. O
comando efectua uma consulta para identificar todos os registos
a actualizar e, de seguida, bloqueia os registos seleccionados;
• LOCK TABLE <nome da tabela> IN <tipo de bloqueio>
– é necessário bloquear um registo (ou registos) porque se vai fazer
uma actualização para a qual é necessário garantir que esse
registo não é entretanto alterado por outro utilizador.
• Os tipos de bloqueio são:
– Exclusive
• A opção NOWAIT faz com que o SELECT termine, em vez de esperar, no
caso de um dos registos seleccionados já ter sido bloqueado por outro
utilizador.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
49
UPDATE FUNC
SET NOME = ‘Raul’
WHERE NUM = 1002;
UPDATE FUNC
SET SAL = SAL * 1.05
WHERE NUM = 986;
Instituto Politécnico da Guarda, ESTG
50
• Prevenir os impasses
– Use-se em sistemas em que a probabilidade de surgirem
impasses é muito elevada.
Transacção B
UPDATE FUNC
SET SAL = SAL * 1.05’
WHERE NUM = 1002;
– ...
Como lidar com impasses
• Podem gerar-se situações de impasse quando dois ou mais utilizadores
tentam aceder aos mesmos dados e cada utilizador fica à espera dos
objectos detidos pelo outro utilizador.
UPDATE FUNC
SET NOME = ‘Tiago’
WHERE NUM = 986;
– ...
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Impasses (dead locks)
Transacção A
Henrique Madeira, DEI-FCTUC, 2001
Henrique Madeira, DEI-FCTUC, 2001
– Row Exclusive
• Os bloqueios adquiridos por SELECT ... FOR UPDATE são libertados
quando for efectuado um COMMIT ou um ROLBACK.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
51
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Prevenir impasses
Instituto Politécnico da Guarda, ESTG
52
Detectar impasses
• Bloquear explicitamente, no início da transacção, todos os
recursos que se pretende vir a alterar:
• Grafo de esperas (wait-for graph)
– O SGBD mantém um grafo dirigido que representa as
transacções que estão à espera que recursos bloqueados por
outras transacções sejam libertados.
– Afecta a utilização partilhada dos recursos;
– Pode deixar transacções à espera durante periodos muito longos.
Henrique Madeira, DEI-FCTUC, 2001
• Impor uma ordem para o bloqueio dos recursos e garantir
que todas as transacções seguem essa ordem
– Pode ser de difícil concretização para certas aplicações.
• Há técnicas mais sofisticadas para prevenir impasses
baseadas em timestamps (e.g., wait-die e wound-die )
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Henrique Madeira, DEI-FCTUC, 2001
Não pode continuar porque
o registo do empregado de
NUM = 986 está bloqueado
pela transacção A
– Use-se em sistemas em que a probabilidade de surgirem
impasses é baixa.
Instituto Politécnico da Guarda, ESTG
53
• Este grafo é analisado periodicamente pelo sistema para
detectar situações de impasse.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Transacções e controle de concorrência
Instituto Politécnico da Guarda, ESTG
Henrique Madeira, DEI-FCTUC, 2001
Não pode continuar porque
o registo do empregado de
NUM = 1002 está bloqueado
pela transacção B
Henrique Madeira, DEI-FCTUC, 2001
• Detectar os impasses e recuperar dessa situação
54
9
Tópicos Avançados de Bases de Dados
Instituto Politécnico da Guarda, Escola Superior de Tecnologia e Gestão, 2005/2006
Grafo de esperas (wait-for graph)
Manutenção do grafo de esperas
• Cada nó representa uma transacção;
O SGBD vai mantendo actualizado o estado do grafo:
• Cada arco indica que a transacção representada pelo nó de partida está
à espera que seja libertado um bloqueio pela transacção representada
pelo nó de chegada.
• Sempre que uma transacção é iniciada o sistema acrescenta um
novo nó ao grafo;
• Sempre que uma transacção fica à espera que um recurso seja
libertado por outra transacção o sistema acrescenta um arco entre
os nós em causa;
T4
Henrique Madeira, DEI-FCTUC, 2001
- A transacção T1 está à espera da transacção T2
T3
- A transacção T1 está à espera da transacção T3
- A transacção T2 está à espera da transacção T4
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
55
– Se o recurso foi libertado porque a transacção que o bloqueava terminou, então
o nó correspondente a essa transacção é eliminado e com ele todos os arcos que
chegavam a esse nó;
– Se o recurso foi libertado porque a transacção que o bloqueava fez rollback to
savepoint, então, se isso implicar o fim da espera de uma transacção, o arco
correspondente é retirado do grafo.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
56
Quando deve o sistema examinar o grafo?
Detectar impasses através do grafo de esperas
Existe um impasse sempre que o grafo de esperas contém
um ciclo.
Exemplo:
• Sempre que um recurso é libertado o grafo é actualizado, se
necessário:
• Sempre que o bloqueio de um recurso não pode ser
satisfeito de imediato, se a probabilidade de se gerarem impasses é
elevada;
está à espera de
T4
à
Henrique Madeira, DEI-FCTUC, 2001
es
tá
es
pe
ra
T1
de
está à espera de
T2
T3
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
57
• Periodicamente,
se a probabilidade de se gerarem impasses é reduzida. O
periodo deve estar relacionado com a probabilidade de surgirem impasses e o
número de transacções potencialmente afectadas.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
Henrique Madeira, DEI-FCTUC, 2001
T2
T1
Henrique Madeira, DEI-FCTUC, 2001
Exemplo:
58
O que acontece quando é detectado um impasse?
• É necessário fazer rollback a um comando para quebrar o
impasse.
• Na prática, é normalmente necessário fazer o rollback de
uma transacção de modo a recuperar do impasse;
Henrique Madeira, DEI-FCTUC, 2001
• Critérios na escolha da vítima (minimizar os custos):
– Escolher a transacção que tenha alterado menos dados até então;
– Escolher a transacção que tenha mais dados ainda a manipular até
terminar;
– Escolher a transacção que tenha savepoints de tal modo que o
rollback para um savepoint possa quebrar o impasse e minimize a
perda de dados.
Tópicos Avançados de Bases de Dados, Henrique Madeira, 2005/20056
Instituto Politécnico da Guarda, ESTG
59
Transacções e controle de concorrência
10
Download

Tópicos Avançados de Bases de Dados