sexta-feira, 13 de março de 2009
Modelos lógicos
Ajuda para entender relacionamentos e os tipos.
http://imasters.uol.com.br/artigo/6800/bancodedados/modelo_conceitual_vs_modelo_logico/
quinta-feira, 6 de novembro de 2008
Triggers Again!
Links to help you!
http://www.devmedia.com.br/articles/viewcomp.asp?comp=5625
http://imasters.uol.com.br/artigo/388/oracle/triggers_-_parte_3/
Bom trabalho!
domingo, 31 de agosto de 2008
Memória, Blocos, Cache? ...
Estruturas de armazenamento são os meios pelo quais os bancos de dados são armazenados em massa por um período prolongado em algum tipo de mídia, seja ela disco rígido, cd-rom, fita magnética, memória principal, etc. Os dados precisam ser recuperados constantemente pelos usuários, para isso estas estruturas foram criadas, utilizando-se de várias técnicas para serem acessados e armazenados com segurança.
a) Hierarquia de memórias e Dispositivos de Armazenamento
No nível de armazenamento primário, a memória cache é usada pela CPU para acelerar a execução do programa. No próximo nível de armazenamento primário, está a memória DRAM, responsável por fornecer a principal área de trabalho para a CPU. No nível de armazenamento secundário, a hierarquia compreende os discos magnéticos (Hard Disk e CD-Rom) e finalmente as fitas, a mais barata nas extremidades. Estas mídias armazenam os dados em massa.
b) Armazenamento de Banco de Dados
Os bancos de dados armazenam grandes quantidades de informações por longos períodos. Estas informações, geralmente são armazenadas permanentemente em armazenamento secundário de discos magnéticos pelas seguintes razões.
a. Os bancos de dados são muito grandes e não cabem na memória principal.
b. As circunstâncias que causam a perda permanente de dados aparecem com menos freqüências nas mídias de armazenamento secundário. (o armazenamento principal é mantido somente na execução do programa).
c. O custo de armazenamento secundário é uma ordem de magnitude menor para discos que para armazenamento primário.
As técnicas que são utilizadas para armazenas grandes quantidades de dados em um disco são de extrema importância para os DBA’s, pois através delas serão escolhidas a melhor técnica de organização dos dados para se adaptar aos requisitos de uma determinada aplicação.
Os discos são divididos em trilhas de dezenas de Kbytes até 150 kbytes que armazenam grandes quantidades de informações, que, por sua vez, é dividida em blocos ou em setores menores.
c) Buffering de Blocos
Quando é necessário buscar estas informações no disco, os blocos são transferidos para a emória principal, todos endereços de blocos são conhecidos e diversos buffer’s são armazenados na memória principal para auxiliar a transferência.
Enquanto um buffer estiver sendo utilizado na memória principal, A CPU pode processar os dados contidos em outro buffer paralelamente. Isso somente é possível porque existe um rocessador de entrada e saída independente, que uma vez inicializado, também pode transferir os blocos de maneira independente.
Devido à importância e limitações de tempo, neste artigo somente serão citados estas estruturas de armazenamento. Outras estruturas de armazenamento como Registros e Tipos de Registros; Arquivos, Registros de Tamanhos fixos e Tamanhos variável; Alocação de blocos de Arquivo em Disco, Acesso paralelo em Disco Usando a Tecnologia Raid, etc, poderão ser encontradas no Livro ELMASRI, Ramez e NAVATHE, Shamkant B. Sistemas de Banco de Dados.
3.3. Índices
Os índices são estruturas que visam melhorar a performance de acesso aos dados em um banco de dados. Os índices, assim como as tabelas, podem ser implementados através de várias estruturas de armazenamento, e sua forma de utilização não é uma fórmula exata que fornece bons resultados automaticamente. É preciso saber quando e como utilizá-los.
Vamos então analisar como os índices devem ser utilizados e suas características em alguns SGBD bastante utilizados.
Embora os comandos de manipulação de dados sejam razoavelmente padronizados entre os produtos baseados em SQL, as características que envolvem os índices são menos padronizadas, pois estão mais próximas da arquitetura física do banco de dados.
A principal razão para se construir um índice é melhorar o desempenho nas consultas realizadas no banco de dados. Uma segunda razão é reforçar a unicidade entre os registros armazenados numa tabela do banco de dados.
Otimização de SGBD
Árvores B - divertido!?
https://www.cs.tcd.ie/Jeremy.Jones/vivio/trees/B-tree.htm
(Podem aceitar a instalação do activeX)
http://slady.net/java/bt/view.php
PDF --> Árvores B
Oracle: Estrutura Lógica e Física
Enquanto o nosso laboratório está sendo montado, aproveito para falar de teoria.
Neste artigo vou tratar as relações e os conceitos da estrutura lógica e física do Oracle que é representada na figura abaixo.
Instance
Na instância são executados processos e espaços em memória, estes permitem ao Oracle cumprir com seu papel de manter a integridade, confidencialidade e disponibilidade dos dados armazenados.
A instância fica alocada na memória compartilhada (shared memory) e é a combinação do System Global Area (SGA) com os processos background Oracle.
Por ser fundamental no funcionamento do banco de dados (BD), a arquitetura e a descrição dos caches e processos da instância serão tratados em posts posteriores, por enquanto fiquemos com a visão geral que a instância é usada para gerência e acesso ao banco de dados.
Database
Segundo Loney e Bryla, “database é uma coleção de dados em disco em um ou mais arquivos em servidor de banco de dados que coleta e mantém informações relacionadas”.
Para um banco de dados (database) ser usado ele precisa ser montado, ou seja, associado a uma instância. Antes disso, os dados estão inacessíveis a qualquer usuário ou aplicação.
Separar a instância do banco é apenas uma forma didática de explicar, pois, na prática, esta separação não ocorre. No entanto, pode acontecer de haver múltiplas instâncias rodando na mesma máquina, cada uma associada ao seu banco de dados físico.
Nota do autor: costuma existir uma confusão entre banco de dados (database) e o servidor de BD. Pode-se dizer que o servidor de BD é a associação do banco de dados com a instância.
Schema
Representa a coleção de vários objetos de um usuário de banco de dados como, por exemplo, tabelas, índices, seqüências, sinônimos etc. São associados a um banco de dados na razão de vários esquemas para um BD.
Tablespace e Datafile
Um banco de dados é armazenado logicamente em uma ou mais tablespaces que, por sua vez, é armazenada fisicamente no disco em um ou mais arquivos para cada tablespace.
Segment
Os objetos do Banco (tabelas, índices, etc) são armazenados como segmentos. Existem diferentes tipos de segmentos, como:
- Data segments (segmento de dados): armazena os dados das tabelas não clusterizadas. Para tabelas particionadas, cada partição tem seu segmento de dados.
- Index segments: segmentos de índices. Vale a regra da partição.
- Undo segments (de undo): a informação deste segmento é usado para gerar a leitura consistente e, durante o recovery, o rollback de informações não “comitadas”.
- Temporary segments (temporários): usadas quando um comando SQL precisa de uma área temporária para completar a execução.
A relação é de um ou mais segmentos para um tablespace.
Extent
Cada segmento contém um ou mais extents, que são grupos de blocos de dados contíguos (ou adjacentes).
Por exemplo, quando se cria uma tabela, o BD aloca um número inicial de extents para o segmento, quando estes extents enchem, o BD automaticamente aloca um número incremental de extents. (Estes valores são configuráveis pela clausula STORAGE do comando CREATE TABLE ou ALTER TABLE ou podem ser otimamente dimensionados pelo Oracle).
É importante notar que cada extent só pode estar em um data file.
DB Block e OS Block
Blocos de banco de dados é o menor nível de granularidade e é onde as informações são armazenadas.
O DB Bloco é um múltiplo do OS Block (bloco do sistema operacional) e o tamanho é definido por uma variável (DB_BLOCK_SIZE) no momento da criação do tablespace.
Oracle: Estruturas de Memória
A parte azul do diagrama representa a estrutura de memória no Oracle, que contêm:
1. System Global Area (SGA): Compartilhada por todos os processos;
2. Program Global Area (PGA): Exclusiva de cada de processo.
No diagrama ainda temos representados processos servidores que são criados dinamicamente para atender usuários, e processos background que realizam tarefas específicas na administração e controle do BD.
Database Buffer Cache
Armazena em memória os blocos de dados recuperados do banco de dados e é onde os dados são trabalhados. Esta é uma área importante para o desempenho do BD, pois o correto dimensionamento minimizará gravações e leitura em disco.
Redo Log Buffer
Aqui ficam as informações de redo antes de serem gravadas no arquivo físico.
Estas informações servem para recuperação da instância em caso de falha. Além disso, um usuário só recebe retorno de sucesso em uma operação após o redo ter sido gravado em disco.
Shared Pool
Divide-se em dois subcaches:
1. Biblioteca: para códigos SQL e PL/SQL;
2. Dicionário de dados.
No cache de biblioteca, se um código consta no cache, a análise sintática e o plano de execução serão aproveitados; se o código não consta no cache, os procedimentos serão feitos e armazenados.
No cache de dicionário de dados estão os metadados essenciais para o funcionamento do BD (como os objetos e privilégios de usuários), estes ficam armazenados num conjunto de tabelas possuídas pelos esquemas SYS e SYSTEM.
Streams Pool
São estruturas para a utilização do Oracle Streams, recurso da versão Enterprise do Oracle, que permite a gerênci e o compartilhamento de dados e eventos em um ambiente distribuído.
Java Pool
É usado em cada sessão pela Java Virtual Machine Oracle para executar os códigos Java da mesma maneira que o SQL e o PL são executados no shared pool.
Large Pool
Certas operações precisam de grandes blocos de memória, é este recurso que reserva estas áreas no momento que as operações necessitam. Um aplicativo que comumente usa esta área é o RMAN.
Oracle Armazenamentos!
O desenho representa o servidor de banco de dados. O que está dentro do quadrado pontilhado é a Instância que é composta pela System Global Area (quadrados azuis) e os Processos em Background (bolas verdes e amarelas). Os arquivos são representados pelos cilindros marrons.
Para montar o BD de forma que seja utilizável pelos usuários (modo open), o servidor utilizará o Control File para saber onde estão os arquivos, e o Parameter File para alocar a memória.
Após ser validado, o usuário se conectará ao BD através de um processo servidor dedicado ou compartilhado. Um pouco sobre como a conexão acontece já foi tratado aqui.
Ao receber a solicitação de update do usuário, o BD checará se o usuário tem direito de fazer isto nesta tabela. Se não tiver, o BD retornará um erro e estará encerrada a solicitação.
Caso o usuário tenha este direito, o BD tratará o update submetido, verificando se este já se encontra na Library Cache (biblioteca para códigos) e, se já estiver, será imediatamente executado. Se não estiver, será feito a análise sintática (parse), o plano de execução, armazenamento na biblioteca de códigos, e a execução.
Na execução, o Oracle primeiramente checa se os dados necessários estão no Database Buffer Cache e, caso não estejam lá, os dados serão buscados nos datafiles e transferidos para este cache.
É feito o update.
Imediatamente é aplicado um row-level lock para impedir que outros usuários tentem alterar a mesma linha, e também é registrada a transação no Redo Log Buffer.
O usuário faz então um commit para validar a transação.
Neste momento o servidor altera o dado no Database Buffer Cache, o processo Log Writer escreve a transação no Redo Log File e é retornada a mensagem de sucesso na transação para o usuário.
Outros processos ainda vão trabalhar para direta, ou indiretamente, garantir a integridade do BD:
- O processo ARC0 transferirá o on line redo log file para a área destinada aos Archive Files a cada log switch;
- O processo DBW0 escreverá o dado do Database Buffer Cache para o Datafile;
- O CKPT auxiliará a sincronia do Database Buffer Cache com os Data Files, anotando o SCN nos Control Files.
Oracle: Armazenamento Físico
![]()
ESTRUTURA FÍSICA:
Control Files
Contêm dados sobre o próprio BD, também conhecidos como metadados, que são informações sobre a estrutura física. Sua leitura é essencial para que o software do banco de dados consiga abrir os arquivos de dados.
Estes arquivos podem ser multiplexados para dar mais segurança, mas somente um será utilizado como primário.
Os Control Files (arquivos de controle) também guardam informações utilizadas pelo RMAN (Recovery Manager), solução de backup da Oracle.
Data Files
Arquivos de armazenamento final dos dados dos usuários ou das aplicações no BD.
Lembrando o post “Estrutura Física e Lógica”, um banco de dados pode ter múltiplos tablespaces que, cada um, pode estar armazenado em um ou mais arquivos de dados. No entanto, um arquivo é associado a um único tablespace.
Redo Log Files (on line)
Se um banco de dados parar por qualquer motivo, desde que não ocorra perda de arquivos de dados, a instância poderá voltar ao estado que estava antes do travamento aplicando os Redo Log Files.
Para uma transação ser completada e retornar uma confirmação que está ok para o usuário, o processo LGW0 precisa gravá-la no arquivo de log de redo.
ARQUIVOS ADICIONAIS:
Parameter File
Defini a configuração da instância na inicialização do BD. Entre outras coisas este arquivo contém informações de:
1. Localização dos arquivos;
2. Configurações do SGA;
3. Número de usuários que podem se conectar.
Password File
Arquivo que guarda informações de autenticação do SYSDBA e SYSOPER para administração remota.
Backup Files
Cópias de segurança utilizadas para a recuperação de banco de dados quando o arquivo original é danificado.
Archive Log Files
O processo ARC0 faz o armazenamento contínuo dos Red Log Files nos Archive Log Files, com estes arquivos têm-se um histórico das alterações de um BD. Usando o backup mais este histórico pode-se recuperar um datafile perdido.
MULTIPLEXAÇÃO
A multiplexação de um arquivo para diversos discos é uma forma de proteger o BD de falhas de mídia.
Pode-se:
1. Usar um sistema automatizado com RAID ou o ASM (produto da Oracle);
2. Multiplexar manualmente, que é fazer o Oracle gravar em diversos locais arquivos de:
a. Control Files;
b. Log de redo;
c. Archive Log Files.

