Prova Banco de Dados II (copy)
=== SEGURANÇA ===
Requisitos BD corporativo:
Gerenciar e fornecer acesso
Controle de disponibilidade para usuários
Controlar leitura e escrita
Restringir acesso a colunas específicas
Todo banco tem um administrador (DBA)
Schema é uma coleção de objetos (tabelas, views, sequences)
Privilégios:
Determinam o que um usuário pode fazer no banco
Fornecem permissões para executar comandos SQL
Privilégios de sistema indicam permissões que o usuários terá no banco (criar sessão, tabelas, views)
Privilégios de objeto para manipular o conteúdo dos objetos (editar tabelas, views, procedure)
=== VIEWS ===
Tabela virtual definida por um select
View não existe no banco como um conjunto de dados armazeados
Vantagens:
Restringe acesso ao banco
Consultas complexas ficam simples
Recupera dados de diferentes tabelas, schemas e databases
Permite acesso a grupos de usuários baseado em seus critérios particulares
Quando uma visão é utilizada, o Servidor Oracle executa as seguintes operações:
Recupera a definição da visão no dicionário de dados (USER_VIEWS)
Confere os privilégios de acesso para a tabela básica da visão
Os dados são recuperados a partir das tabelas básicas
É possível usar DML (insert, update, delete)
Se a view for criada usando “WITH READ ONLY“ não dá pra usar DML
Visão simples:
Uma única tabela
Não utiliza funções ou agrupamento de dados
Pode executar operações DML
Visão complexa:
Várias tabelas
Utiliza funções ou grupos de dados
Normalmente não permite operações DML
Erros comuns:
DUPLICATE COLUMN NAME: duas colunas com mesmo nome na query
MUST NAME THIS EXPRESSION WITH A COLUMN ALIAS: a query tem um count, sum, etc, e a expressão não recebeu um apelido
=== STORED PROCEDURES ===
Server pra resolver problemas complexos, direto no banco
Cada procedure é um módulo de código que pode ser executado a parti de:
Procedures
Trigger
Aplicação cliente
Como parte de um SELECT
Vantagens:
Melhora o desempenho das aplicações
Reduz o volume de dados trafegados na rede
Melhora a manutenção do software
Melhora a segurança no acesso aos dados
Quando usar:
Se a operação pode ser feita no servidor, sem pedir dados do usuários
Se a operação processar muitas linhas
Se a operação é usando com frequência
Se a operação é usada por vários módulos ou processos diferentes
Cursores:
Usados para nomear áreas de memória e acessar os dados
Triggers:
São blocos de código
Armazenados dentro do banco
Disparados sempre que uma instrução SQL (evento DML) for aplicada para uma tabela específica
Aplicações:
Auditoria
Replicação de dados
Controle de dados
Segurança e integridade
Precauções:
Evite criar triggers que dupliquem regras já definidas em CONSTRAINTS do banco
Cuidado ao criar triggers que disparem por uma instrução em uma tabela, para que ela não efetue a mesma operação na própria tabela porque isso iria disparar a trigger N vezes, travando a execução.
=== OTIMIZAÇÃO ===
Índices:
Utilizado para acelerar a recuperação de registros
Após criação, o BD atualiza e controla de forma automática
Reduzir I/O de disco
Um tabela pode ter mais de um índice
Pode ser simples (1 coluna) ou composto (N colunas)
A ideia apontar para uma pequena parte de uma tabela grande, de 2-4%
Criação:
Primário: índice único criado automaticamente quando define-se uma PK ou Unique Key
Secundário: criado manualmente pelo usuário
Criar quando:
Coluna usada com frequência em WHERE e JOIN
Coluna for Foreign Key
Coluna tem variedade de valores
Coluna com muitos valores nulos
Não criar quando:
Tabela pequena
Colunas não muito utilizadas
Queries vão retornar mais do que 4% dos registros
Tabela alterada com frequência
Para dropar tem que ser o owner ou ter o privilégio “DROP ANY INDEX”
Organizados em uma árvore B+
Otimização de desempenho:
Conjunto de atividades para reduzir o tempo de respostas de um banco de dados
Fatores de hardware que reduzem o desempenho:
CPU
RAM
Disco rígido
Rede
Bloco de dados é a unidade mínima de armazenamento no SGBD
Processamento de consultas:
Fase de análise:
Parser faz a análise sintática e semântica do comando
Otimizador criar o plano de acesso
Fase de execução:
Dados em disco vão para cache
Se já estiver em cache, pega de lá. Se não, traz do disco para a cache
Se já está em cache, o retorno da requisição é mais rápido
Fase de recuperação:
Retorno dos dados ao usuário
Parser:
No Waze, ele verificaria se os pontos existem e se é válido traçar rota entre eles
Usa o dicionário do banco para fazer as análises
Análise sintática: verifica se o comando está escrito na forma correta, se a “sintaxe” do comando está de acordo com a linguagem SQL
Análise semântica : verifica se os objetos referenciados no comando SQL (tabelas, views, colunas, etc) existem
Otimizador:
Criar o plano de acesso
Plano de acesso é a forma como o SGBD irá realizar a requisição
O plano visa processar a requisição com a maior eficiência, menor tempo e custo de processamento
Similar ao Waze. Traça várias rotas entre dois pontos e escolher a melhor (menor custo)
Otimizador baseado em custo:
Todos os bancos usam
Calcula o custo usando estatísticas (quantidade de colunas, valores distinto, etc)
Estatísticas:
Armazenadas no dicionário do banco
Coletadas de forma periódica, geralmente em um intervalo diário
Estatísticas atualizadas = boas decisões do otimizador
Estatísticas das tabelas:
Quantidade de registros
Número de blocos de dados utilizados
Tamanho médio dos registros
Estatísticas das colunas:
Número de valores distintos
Números de valores nulos
Valor máximo
Valor mínimo
Distribuição dos dados
Estatísticas dos índices:
Número de níveis
Número de blocos folha
Estatísticas do ambiente:
CPU
Memória virtual
I/O de disco
Rede
Otimizador baseado em regras:
Oracle possui e ainda funciona. Porém, não é recomendado e já foi descontinuado
Técnicas de otimização:
Correta definição de PK
Utilizar índices
Escrever comandos eficientes
Usar stored procedures:
Armazenados no próprio SGBD
Evitam o trafego de rede
Hints de otimização:
Sugestão do usuário ao otimizador para a montagem do plano de execução
Usadas raramente
Deve ser utilizadas com cautela
Dicas ruins prejudicam desempenho