Escolar Documentos
Profissional Documentos
Cultura Documentos
LICENCIATURA EM INFORMÁTICA
Laboratório de Banco de Dados
CACHOEIRO DE ITAPEMIRIM
IFES
2012
Governo Federal
Ministro de Educação
Fernando Haddad
Instituto Federal do Espírito Santo (Ifes)
Reitor
Denio Rebello Arantes
Pró-Reitora de Ensino
Cristiane Tenan Schlittler dos Santos
Diretor-geral do Campus Cachoeiro de Itapemirim
Jorge Mário de Moura Zuany
Diretora do CEAD – Centro de Educação a Distância
Yvina Pavan Baldo
Coordenadores da UAB – Universidade Aberta do Brasil
Marize Lyra Silva Passos
José Mario Costa Junior
DIREITOS RESERVADOS
Instituto Federal do Espírito Santo – Ifes
Av. Rio Branco, 50 – Santa Lúcia – Vitória – ES – CEP 29.056-255 – Telefone: (27) 3227-5564
Revisão de texto:
Esther Ortlieb Faria de Almeida
COPYRIGHT – É proibida a reprodução, mesmo que parcial, por qualquer meio, sem autorização escrita dos
autores e do detentor dos direitos autorais.
Olá, Aluno(a)!
É importante que você conheça toda a equipe envolvida neste curso: co-
ordenadores, professores especialistas, tutores a distância e tutores presen-
ciais, porque, quando precisar de algum tipo de ajuda, saberá a quem
recorrer.
Equipe do Ifes
ICONOGRAFIA
Veja, abaixo, alguns símbolos utilizados neste material para guiá-lo em seus estudos.
Fala do Professor
Cap. 5 - RECUPERAÇÃO 79
5.1 Conceitos de Recuperação 79
5.1.1 Esboço da recuperação e categorização dos algoritmos
de recuperação 79
5.1.2 Caching (buffering) de Blocos de Disco 81
5.2 Algoritmo de recuperação ARIES 83
5.3 Backup e recuperação de banco de dados contra
falhas catastróficas 84
5.4 Cold (Frio) e Hot (quente) backup 85
5.5 Backup e Restore no PostgreSQL 86
5.5.1 Backup de um banco (arquivo texto SQL): 86
5.5.2 Backup de um banco (pg_restore) 86
5.5.3 Restaurando backup texto (SQL) de um banco com o
psql 87
5.5.4 Restaurando backup compactado de um banco com o
pg_restore 87
5.5.5 Outros exemplos de backup em PostgreSQL 88
REFERÊNCIAS 111
Análise e Comparação
de SGBD
Olá, Turma!
Neste capítulo, apresentaremos conceitos importantes que devem ser
objeto em uma análise ou comparação entre SGBD.
Os objetivos deste capítulo são:
• conhecer os conceitos para análise de um SGBD;
• compreender como podem ser feitas as comparações entre SGBD.
Uma análise fácil seria: vamos então escolher um que possa trabalhar
com terabytes, independente do tamanho de meus bancos de dados.
Esta análise não está correta. O custo total do SGBD que pode
trabalhar com bases de terabytes será maior que o custo de SGBD
que trabalham com bases menores.
12
Prof. Eros Estevão de Moura
1.3 Desempenho
1.4 Integração
1.5 Recursos
1.6 O fornecedor
1.7 O custo
1.8 Conclusão
Faça uma pesquisa e defina qual SGBD você escolheria para cada
uma dessas empresas:
a) uma mercearia pequena do bairro;
b) uma pequena locadora de carros com três filiais que quer
que seu sistema funcione na WEB;
c) uma grande empresa do ramo de logística, com várias
filiais espalhadas pelo Brasil. Leve em conta a necessidade das
informações estarem disponíveis nas filiais.
16
Prof. Eros Estevão de Moura
SQL Avançado
Olá, Turma!
Neste capítulo, daremos prosseguimento ao que já aprendemos
sobre SQL na disciplina de Banco de Dados. Estaremos vendo mais
algumas coisas que podemos fazer no SGBD.
Os objetivos deste capítulo são:
• conhecer a store procedure;
• conhecer o trigger;
• compreender a utilização de views;
Características:
LANGUAGE ‘sql’;
no qual:
onde:
Exemplo:
Exemplo:
Exemplo:
em que:
Observações:
Características:
Exemplo:
Imaginando que existe a coluna limite na tabela cliente e que esta tabela
possui 1000 clientes, este comando afetará 1000 registros.
Se o meu gatilho é do tipo STATEMENT ele será disparado apenas uma vez;
Onde:
Observações:
Com o trigger é possível afirmar que a tabela log receberá 1000 registros,
Outro teste:
26
Prof. Eros Estevão de Moura
Onde:
Alguns SGBD permitem alterar os dados das tabelas através das visões
(views) e outros não. No PostgreSQL isso não é permitido. As visões são
apenas para leitura.
Onde:
Como exemplo, vamos criar uma visão (view) com um filtro de registro
e coluna. Quando faço um filtro de registro, isso quer dizer que nem
todos os registros estarão disponíveis. Quando faço um filtro por coluna,
estou dizendo que nem todas as colunas estarão disponíveis.
Imagine uma situação em que você precisasse de uma visão apenas para
conseguir fazer uma query e apenas para quando a sua query fosse ser
executada. Você pode criar a visão e deixar no banco de dados, mas esta
visão que você quer criar é apenas parte da solução, ou seja, ela ainda
não retorna nenhuma informação que seja produtiva.
Outra forma de fazer este mesmo comando seria criar uma visão com
o nome v1
29
Laboratório de Banco de Dados
E depois fazer
O que foi feito, na verdade, foi dar um nome para o resultado do comando
“SELECT * FROM cinema c”. Depois de dar um nome (apelido),
podemos acessar esse resultado como se fosse uma visão criada antes
do comando.
Isso pode parecer que não serve para nada, mas quando essa query que
você quer dar um nome tiver uma ou mais folhas de código SQL, você
pode querer testar apenas essa query interna. Quando o resultado dela for
o esperado, você pode fazer um JOIN com as outras tabelas da sua query.
Nem sempre você terá disponível uma ferramenta gráfica para trabalhar.
Em sistemas operacionais Linux, configurados para trabalhar como
servidores (por exemplo, servidor de banco de dados), é muito comum
não instalar a parte gráfica do sistema operacional, buscando melhor
performance.
Por este motivo, vamos dar uma olhada na sintaxe para criar uma banco
de dados no PostgreSQL.
Onde:
Exemplos:
Onde:
Exemplo:
Vamos lá!
Agora vamos praticar nossos conhecimentos de SQL.
Os objetivos deste capítulo são:
demonstrar os conhecimentos adquiridos da linguagem SQL.
dos serviços que ele fez. Apenas se deve utilizar os serviços em que
foram cobrados valores com desconto, ou seja, serviços no qual o
valor cobrado é menor que o valor da tabela.
Observações:
Olá!
Neste capítulo, serão apresentados conceitos de transações e de
acesso concorrente. Estes dois assuntos são muito importantes
quando se trabalha com banco de dados. Há profissionais na área
de desenvolvimento de sistemas que, por falta de conhecimento, não
fazem bom uso dessa característica importante dos SGBD. Espero
que você possa compreender como utilizar transações da melhor
forma possível.
Os objetivos desse capítulo são aprender:
sobre transações de bancos de dados e suas propriedades;
o que é controle de concorrência e que papel ele executa na
manutenção da integridade dos bancos de dados;
o que são métodos de bloqueio e como funcionam;
como os métodos de time stamping são utilizados para
controle de concorrência;
como os métodos otimistas são utilizados para controle de
concorrência.
Bom estudo!
Prof. Eros
4.1 A Transação
Acho que todos nós já vimos uma nota fiscal, certo? Podemos dividir a
nota fiscal em duas partes: um cabeçalho (nome do cliente, endereço,
telefone, etc.) e uma parte dos produtos comprados (código do produto,
descrição do produto, quantidade do produto, valor unitário, valor total
do item, etc.) que vai possuir uma linha para cada produto comprado.
Transação Computação
T1: compras 80 Q_PRODUTO= Q_PRODUTO + 80
T2: vendas Q_PRODUTO= Q_PRODUTO - 20
Transação Etapa
T1 Q_PRODUTO = 50 + 80 (desfeita)
T2 Q_PRODUTO = 50 - 20
Transação T1 Transação T2
UPDATE produto
SELECT SUM(q_produto)
SET q_produto = q_produto + 100
FROM produto;
WHERE cod_produto = ‘1234’;
UPDATE produto
É óbvio que a resposta calculada 405 está errada, pois sabemos que
a resposta correta é 305. A menos que o SGBD aplique o controle de
concorrência, um ambiente de banco de dados de multiusuário pode
criar catástrofes no sistema de informação.
4.2.4 Escalonador
Agora você sabe que podem aparecer problemas graves quando são
executadas duas ou mais transações concorrentes. Sabe, também, que
uma transação de bancos de dados envolve uma série de operações de
E/S que levam o banco de um estado consistente a outro. Finalmente,
sabe que se pode garantir a consistência do banco de dados apenas antes e
depois da execução de transações. Um banco de dados sempre passa por
um temporário e inevitável estado de inconsistência durante a execução
de uma transação se ela atualizar várias tabelas/registros. (Se a transação
contiver apenas uma atualização, não haverá inconsistência temporária.)
Essa inconsistência ocorre porque o computador executa as operações
em série, uma após a outra. Durante esse processo, a propriedade
de isolamento evita que as transações acessem os dados ainda não
liberados por outras transações. O trabalho do escalonador é ainda mais
importante nos dias de hoje, com a utilização de processadores de vários
núcleos que possuem a capacidade de executar diversas instruções ao
mesmo tempo. O que aconteceria se duas transações fossem executadas
de modo concorrente e acessas os mesmos dados?
TRANSAÇÕES
T1 T2 Resultado
Operações Leitura Leitura Sem conflito
Leitura Gravação Conflito
Gravação Leitura Conflito
Gravação Gravação Conflito
Granularidade de Bloqueio
2 Bloqueado OK Aguardar
5 Tabela A
OK Bloqueado
6 Desbloqueado
9
Desbloqueado
Nível de tabela
Tabela A OK Bloqueado
5
Desbloqueado
7 (fim da transação 1) Desbloqueado
(fim da transação 2)
Nível de página
Banco de dados de
Tempo Transação 1 (T1)
folha de pagamento
Transação 2 (T2)
(Atualiza a linha 1) (Atualiza as linhas 5 e 2)
Tabela A
Solicitação de bloqueio
da página 1 1
1 Solicitação de bloqueio
Bloqueado OK 2 Página 1 da página 2
2
3 OK Bloqueado
3 Solicitação de bloqueio
4
da página 1
4 5 Página 2 Aguardar
5 6
OK Bloqueado
6
Desbloqueio da página 1 e 2
Desbloqueio da (fim da transação)
7
página 1
(fim da transação) Número da linha
Nível de linha
Banco de dados de
Tempo Transação 1 (T1)
folha de pagamento
Transação 2 (T2)
(Atualiza a linha 1) (Atualiza a linha 2)
Tabela A
Solicitação de bloqueio
da linha 1 1
1
Solicitação de bloqueio
2 Página 1 da linha 2
2
Bloqueado OK 3
OK Bloqueado
3
4
4 5 Página 2
5 6
Desbloqueio
6 da linha 2
(fim da transação)
Número da linha
69
Laboratório de Banco de Dados
Nível de campo
Tipos de Bloqueio
Bloqueios binários
Bloqueios compartilhados/exclusivos
Figura 5 Protocolo de bloqueio de duas fases (two-phase commit) (Rob e Coronel, 2011)
Ponto
bloqueado
Adquirir Liberar
bloqueio bloqueio
Adquirir Liberar
bloqueio bloqueio
Tempo 1 2 3 4 5 6 7 8
Fase de
Fase de crescimento bloqueio Fase de redução
b) Deadlocks
No esquema wound/wait:
4.3 Resumo
Olá!
Neste capítulo, discutimos algumas das técnicas que podem ser
usadas para a recuperação do banco de dados contra falhas. No
capítulo 4, abordamos as diferentes causas de falha, como as do
sistema e erros de transação. Este capítulo apresenta conceitos
adicionais que são relevantes aos protocolos de recuperação, e
oferece uma visão geral dos diversos algoritmos de recuperação de
banco de dados.
Vamos lá!
Prof. Eros
Para evitar perder todos os efeitos das transações que foram executadas
desde o último backup, é comum fazer o backup do log do sistema
em intervalos mais frequentes do que o do banco de dados inteiro,
copiando-o periodicamente para fita magnética e/ou outro disco. O
log do sistema costuma ser muito menor do que o próprio banco de
dados, e, portanto, pode ser copiado com mais frequência. Portanto,
os usuários não perdem todas as transações que realizaram desde o
último backup do banco de dados. Todas as transações confirmadas e
registradas na parte do log do sistema que foi copiada para fita podem
ter efeito sobre o banco de dados refeito. Um novo log é iniciado após
cada backup do banco de dados.
O backup cold ou frio é o backup que é feito com o banco de dados off-
-line (fora do ar). Este tipo de backup tem a vantagem de criar uma có-
pia íntegra do banco de dados, partindo do pressuposto de que o banco
de dados foi colocado off-line de maneira correta, sendo assim, foi feito
um check point e podemos ter a certeza de que esta cópia é íntegra.
O backup hot (quente) é feito com a base de dados no ar, ou seja, com
todos os usuários podendo usar o banco de dados, e apenas se evita
fazer este backup em momentos de muita utilização do banco de dados.
86
Prof. Eros Estevão de Moura
Onde:
Onde:
Exemplo:
OBS: dentre as várias opções não listadas aqui, há uma opção que é
–w, a qual deve ser utilizada em conjunto com o arquivo pgpass.conf
quando há necessidade de executar o comando sem passar a senha. A
senha de conexão estará no arquivo pgpass.conf. Este arquivo está em
C:\Users\Administrador\AppData\Roaming\postgresql\pgpass.conf
no Windows e na pasta base (home) do usuário no Linux/Unix.
Onde:
Exemplo:
Onde:
88
Prof. Eros Estevão de Moura
Exemplo:
Olá!
Neste capítulo, serão apresentados conceitos básicos que estão
associados à parte de performance do banco de dados. Não é minha
intenção transformar você em um administrador de banco de dados,
desta forma não estaremos cobrindo todo o assunto associado à
performance de banco de dados. Ao final do capítulo, teremos visto:
- conceitos básicos de sintonização de desempenho de banco de
dados;
- como o SGBD processa consultas de SQL;
- sobre a importância de índices no processamento de consultas;
- sobre os tipos de decisões que o otimizador de consultas tem de
tomar;
- algumas práticas comuns utilizadas para escrever códigos eficientes
de SQL;
- como formular consultas e realizar a sintonização do SGBD para
desempenho ideal.
Bom estudo!
Prof. Eros
Isso significa que você não precisa se preocupar com o modo como
a consulta será escrita, pois o SGBD sempre a otimizará? Não,
porque há um espaço considerável para aprimoramentos. (O SGBD
utiliza técnicas gerais de otimização, em vez de focar em técnicas
específicas determinadas pelas circunstâncias especiais da execução
da consulta). Uma consulta de SQL mal escrita pode colocar, e
normalmente coloca, o sistema de banco de dados de joelhos quanto
ao desempenho.
Quantos índices devem ser criados? Cabe repetir que não se deve criar
um índice para todos os casos a que são feitas consultas. Muitos índices
deixarão as operações INSERT, UPDATE e DELETE mais lentas,
especialmente se a tabela contiver milhares de linhas. Você deve avaliar
se o ganho com o tempo de reposta de uma consulta vale o custo de
manutenção desse índice nas operações de INSERT, UPDATE e DELETE.
NOT (P_PRECO > 10.00) pode ser escrito como P_PRECO <=
10.00. Ou, NOT (E_SEXO = 'M') pode ser escrito como E_SEXO =
'F'.
Vamos observar agora alguns pontos que devem ser observados no lado
do servidor de banco de dados. Por favor, lembre-se de que não estou
com a pretensão de abordar tudo sobre este assunto, mas de possibilitar
uma visão básica sobre a performance do SGBD.
Select ...
From ...
Where ...
Plano de acesso
Arquivos de dados
OPERAÇÃO DESCRIÇÃO
Varredura de Tabela (completa) Lê sequencialmente a tabela inteira, da primeira à
última linha, uma linha por vez (o processo mais
lento)
Acesso a Tabela (ID de linha) Lê diretamente uma linha de tabela utilizando um
valor de ID de linha (o processo mais rápido)
Varredura de Índice (faixa) Lê o índice primeiro para obter Ids de linhas e, em
seguida, acessa diretamente as linhas de tabelas
(processo mais rápido do que a varredura de tabela)
Acesso ao Índice (único) Utilizando quando uma tabela possui um índice
exclusivo em uma coluna
Loop Aninhado Lê e compara o conjunto de valores a outro conjunto
de valores, utilizando o estilo de loop integrado
(lento)
Fusão Funde dois conjuntos de dados (lento)
Ordenação Ordenação do conjunto de dados (lento)
Com já foi visto neste capítulo, os índices são fundamentais para acelerar
o acesso aos dados, pois facilitam a busca, classificação e utilização de
funções agregadas e, até mesmo, de operações de junção. A melhora da
velocidade de acesso aos dados se deve ao fato de o índice ser um conjunto
ordenado de valores que contém a chave de índice e os ponteiros. Os
ponteiros são as IDs para as linhas das tabelas reais. Conceitualmente,
o índice de dados é semelhante ao de um livro. Ao utilizar o índice de
um livro, busca-se uma palavra, que corresponde à chave de índice, e os
números de página que a acompanham, correspondentes aos ponteiros.
Estes orientam o leitor para as páginas adequadas.
REGION_CODE = ‘NO’
Os objetos em “folhas” contêm a chave de índice e os pontei- Cada byte índice de bitmap representa uma linha dos dados da
ros para linhas da tabela. Acessar qualquer linha, utilizando o tabela. Esses índices são muito eficientes em buscas. Por
índice, exige o mesmo número de acessos de E/S. Nesse exemplo, para encontrar todos os clientes na região NO, o
exemplo, seriam necessários quatro acessos para chegar a SGBD retornará todas as linhas com bit 2 ativado.
uma linha determinada da tabela usando o índice: um para
cada nível da árvore (objetos na “raiz”, em “ramos” e em
“folhas”) mais o acesso à linha de dados por meio do ponteiro.
105
Laboratório de Banco de Dados
SUGESTÃO UTILIZAÇÃO
ALL_ROWS Instrui o otimizador a minimizar o tempo geral
de execução, ou seja, o tempo necessário para
retornar todas as linhas do conjunto de resultados
da consulta. Em geral, essa sugestão é utilizada
para processos em modo batch. Por exemplo:
SELECT /*+ALL_ROWS*/*
FROM PRODUCT
WHERE P_QOH < 10;
FIRST_ROWS Instrui o otimizador a minimizar o tempo
necessário para processar o primeiro conjunto de
linhas, ou seja, para retornar apenas esse primeiro
conjunto nos resultados da consulta. Em geral,
essa sugestão é utilizada para processos em modo
interativo. Por exemplo:
SELECT /*+FIRST_ROWS*/*
FROM PRODUCT
WHERE P_QOH < 10;
INDEX (nome) Faz com que o otimizador utilize o índice
P_QOH_NDX para processas essa consulta. Por
exemplo:
SELECT /*+INDEX(P_QOH_NDX) */*
FROM PRODUCT
WHERE P_QOH < 10;
6.4.1 Explain
Para a maior parte dos comandos, o tempo total é o que importa, mas em
contextos como uma subseleção (subquery) no EXISTS, o planejador
escolhe o menor tempo inicial em vez do menor tempo total (porque o
executor vai parar após ter obtido uma linha).
A sintaxe do comando é:
Exemplos:
Mostrar o plano para uma consulta simples em uma tabela com uma
única coluna integer e 10.000 linhas:
110
Prof. Eros Estevão de Moura
Onde:
Exemplo:
Date, C. J. Introdução a Sistemas de Banco de Dados. 7. ed. Rio de Janeiro: Elsevier, 2003.
Elmasri, R.; Navathe, S. B. Sistemas de Banco de Dados. 6. ed. São Paulo: Person Addison
Wesley, 2011.