Artigo SQL Magazine 13 - Introdução ao Oracle 9i – Parte II
Veremos neste artigo a arquitetura do servidor Oracle.
Introdução ao Oracle 9i – Parte II<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Entendendo o Oracle Server
Leitura Obrigatória: SQL Magazine 12, artigo Introdução ao Oracle 9i – Abordagem passo-a-passo.
Dando continuidade à introdução ao Oracle 9i, veremos neste artigo a arquitetura do servidor Oracle. Serão abordadas as estruturas físicas, lógicas, de memória e de processos que estão presentes na conexão, criação de sessões e na execução de instruções SQL. Muitos dos tópicos que veremos neste artigo são importantes e necessários para a criação de uma base de dados Oracle. Você notará que utilizamos muitos desses conceitos no passo-a-passo apresentado na edição 12. Boa leitura e bom divertimento.
Visão geral do Oracle Server
O servidor Oracle deve gerenciar de forma confiável e com alta performance uma grande quantidade de informações em um ambiente multiusuário com muitos acessos simultâneos. Deve também, dentre outras tarefas, evitar o acesso não autorizado ao BD e prover soluções eficientes e eficazes na recuperação por falhas de hardware ou software.
Para lidar com isto, o Oracle mantém uma série de arquivos, processos e estruturas em memória. Basicamente, um servidor Oracle (Oracle Server) é formado por dois componentes bem definidos. São eles:
· Estrutura em memória: composta pela instância (Oracle Instance) e pela área global do programa (PGA – Program Global Area), e;
· Banco de dados (Oracle DataBase).
A Figura 1 ilustra estes dois componentes e suas estruturas formadoras.
Figura 1. Visão geral de um servidor Oracle.
Uma instância Oracle nada mais é do que a alocação de memória principal (RAM) feita pelo servidor Oracle para interagir com a estrutura física (arquivos em disco) e interface de usuário (Delphi ou SQL*Plus, por exemplo), juntamente com os processos em segundo plano (Process Monitor – PMON, System Monitor – SMON, Database Writer – DBWR, Log Writer – LGWR, Checkpoint – CKPT entre outros). Já o banco de dados é composto pela estrutura física dos arquivos no sistema operacional. Veremos a seguir cada um destes componentes em detalhe.
A instância é o mecanismo que o Oracle utiliza para gerenciar as requisições de usuário e o BD propriamente dito (arquivos físicos e sistema operacional) (Figura 1). Sempre que há uma interação com o banco de dados, é necessário que uma instância seja iniciada. Quando isso acontece, é alocada uma porção da memória conhecida como SGA (System Global Area – Área Global do Sistema) e os processos em segundo plano são "colocados no ar". Uma particularidade da instância é que ela poderá acessar um e somente um banco de dados Oracle.
System Global Area – SGA
A SGA é usada para armazenar informações que são compartilhadas com os processos do BD. Ela contém dados e informações de controle utilizadas pelo servidor Oracle. A SGA é formada por várias subdivisões: Shared Pool (Pool compartilhado), Database Buffer Cache (Cache de Buffer de banco de dados), Redo Log Buffer (Buffer de Redo Log) e outras estruturas menores como estrutura de gerenciamento de trava e tranca (lock and latch), estrutura de dados estatísticos, etc.
A partir do Oracle 9i, a SGA passou a ser dinâmica, ou seja, pode-se alterar suas configurações sem a necessidade de finalizar a instância.
Shared Pool é onde são armazenados os objetos compartilhados globalmente como os planos de execução de instruções SQL, pacotes PL/SQL, procedimentos, funções, etc. Pelo fato de armazenar estes objetos que interagem com o dicionário de dados ou com os objetos dos usuários (tabelas, índices, etc.), ela é dividida em duas áreas específicas (Figura 1):
· Library Cache (Cache de biblioteca): é determinada de acordo com o tamanho da Shared Poll e é alocada quando uma instrução é compilada ou uma unidade de programa é chamada. Se a Shared Pool estiver configurada com um tamanho muito pequeno, as instruções serão recarregadas constantemente, comprometendo a performance. A Library Cache é dividida em outras duas áreas: a área de SQL compartilhado, que são todas as instruções SQL que podem ser usadas por qualquer sessão de usuário e a área de PL/SQL compartilhado que são as instruções da linguagem procedural compartilhadas pelas sessões. O gerenciamento do tamanho dessas áreas é feito pelo próprio servidor Oracle, cabendo ao DBA apenas configurar o tamanho da Shared Pool.
· Data Dictionary Cache (Cache de dicionário de dados): trabalha de maneira semelhante a Library Cache, porém armazena informações sobre a estrutura do BD como os dados de contas dos usuários, nome dos arquivos de dados (data files), descrição das tabelas, privilégios dos usuários, entre outros.
A Shared Pool deve ser configurada para acomodar estas duas estruturas de maneira a evitar a repetição de compilação de instruções SQL, PL/SQL ou consultas a dicionário de dados. O tamanho da Shared Pool é determinado pelo parâmetro SHARED_POOL_SIZE. Ele pode ser alterado dinamicamente através do comando ALTER SYSTEM SET, como visto no exemplo abaixo, mas não pode ultrapassar o valor limite definido na SGA_MAX_SIZE.
SQL> ALTER SYSTEM SET SHARED_POOL_SIZE = 64M SCOPE=BOTH;
Somente através do acompanhamento do comportamento do BD é que se conseguirá definir precisamente o melhor valor para este parâmetro.
É importante salientar que podemos utilizar a opção SCOPE=BOTH para identificar que o escopo da alteração atinge tanto a memória quanto o arquivo de parâmetros do servidor. Assim, caso seja omitida a cláusula SCOPE a alteração não será persistente e, numa próxima reinicialização do BD será adotado o valor antigo do parâmetro. Ao utilizar a cláusula, o parâmetro é gravado no SPFILE e o novo valor será adotado em cada reinicialização. Um detalhe é que isso não altera o PFILE, que deve ser configurado manualmente através de um editor de textos.
Pode-se também recriar um PFILE considerando o SPFILE como origem. Para isso basta utilizar o comando abaixo: