SlideShare une entreprise Scribd logo
1  sur  13
Télécharger pour lire hors ligne
Banco de Dados Oracle

Item do Edital: Banco de dados oracle: conceitos e arquitetura, SQL (DML, DDL). Triggers, procedures,
functions e packages. PL/SQL. Segurança e gerenciamento de objetos.

Conceitos e Arquitetura

A arquitetura do oracle subdivide-se em camada física e camada lógica. A camada física consiste de arquivos
armazenados em disco enquanto que a camada lógica mapea os dados da camada física.

1 Camada Lógica

1.1 Banco de dados

O banco de dados é uma coleção de dados em disco gravados em um ou mais arquivos em um servidor de
banco de dados que coleta e mantém as informações relacionadas. O banco de dados possui várias
estruturas físicas e lógicas sendo a tabela a estrutura lógica mais importante do banco de dados. Além disso,
o um banco de dados fornece mecanismos de segurança para evitar acessos não autorizados e assegurar a
confidencialidade dos dados.

1.2 Instâncias

Os principais componentes típicos de um servidor comercial são uma ou mais CPU's, espaço em disco e
memória. No oracle, o banco de dados fica no disco do servidor enquanto que uma instância existe somente
na memória do servidor. Uma instância é composta de um grande bloco de memória alocado em um área
denominada SGA – System Global Area, junto com outros processos rodando em background e que
interagem com a SGA e o banco de dados (arquivos de banco de dados no disco). Mais uma instancia pode
acessar o mesmo banco de dados ou mesmo acessar um banco de dados remoto.

/*não misturar os conceitos de banco de dados e instância */

                               Estruturas de armazenamento lógico
2.1 Espaços de Tabelas

Os arquivos de banco de dados são agrupados no Oracle em um ou mais espaços de tabelas, onde dentro
de cada um desses espaços (tablespaces) as estruturas lógicas do banco de dados como tabelas e índices se
subdividem em extensões e blocos. A subdivição em tais estruturas facilita o gerenciamento do espaço em
disco pelo Oracle.


Blocos

É a menor unidade de armazenamento no banco de dados Oracle. O tamanho do bloco é um número
específico de bytes geralmente multiplo do tamanho do bloco usado pelo sistema operacional. Atravé dos
parametro de inicalização DB_BLOCK_SIZE , o DBA pode determinar o tamnho do bloco.

Extensões

Um extensão é um agrupamento lógico do banco de dados de vários blocos.

Segmentos

É um grupo de extensões que abrange um objeto de banco de dados como uma unidade, tabela ou índice.
Essa é a menor unidade de armazenamento que o usuário final do banco de dados consegue interagir.
Quatro são os tipos de segmentos, vistos a seguir.


Segmentos de dados

Cada tabela do banco de dados reside em um único segmento de dados, o que pode ser composto de uma
ou mais extensões, mais de um segmento no entanto, podem ser utilizados para armazenar uma tabela no
caso se for uma tabela particionada ou clusterizada (mais a frente veremos isso).

Segmentos de índice

Cada índice é armazenado em seu próprio segmento de índice. Mais de um segmento pode ser usando para
indices particionados ou clusterizados.

Segmento temporário

Quando uma instrução sql é executada ela precisa de espeço em disco para completar alguma operação,
como um ordenação. Caso isso não possa ser relalizado em memória um segmento temporário é alocado
para a instrução poder terminar. Após a execução da operação o segmento deixa de existir.

Segmento de rollback

No oracle 10g o segmento de tabela exite na tabela de espaço SYSTEM. Eles servem para guardar o estado
do banco de dados antes de completar uma transação ou um operação DML. Se houver falha este segmento
é usado para restaurar o estado anterior do banco de dados antes da falha.
Estruturas Lógicas do banco de dados Oracle


Tabela

Uma tabela é a unidade básica de armazenamento em um banco de dados e a tabela relacional é o tipo
mais comum de tabela utilzado em banco de dados comerciais. Uma tabea é organizado por heap, ou seja,
as linhas não são armazenadas em um determinada ordem. Cada linha é composta de uma ou mais colunas
e cada coluna tem um tipo de dados e um comprimento. No oracle, além do tipo de dados comumente
utilizados como varchar, string, date, long, etc.. podemos definir um tipo de usuário ou mesmo uma tabela
aninhada. Além disso, a tabela pode ser definida como uma tabela de objeto, no caso da aplicação usar um
banco de dados orientados a objetos.

Tabelas Temporárias

Tabelas temporárias são temporárias no sentido dos dados armazenados na tabela, não na definição da
própria tabela. O comando create global temporary table cria uma tabela temporária. Desde que os
usuário tenham permissão é possivel de se fazer um select na tabela ou mesmo uma instrução DML: insert,
update, delete. Entretanto, cada usuário vê somente seus próprios dados, se ele truncar seus dados,
somente as linhas que ele inseriu serão apagadas.

A temporariedade dos dados em um a tabela temporária pode ser no escopo de uma transação ou de
sessão. No primeiro caso, ao terminar uma transação os dados temporários serão apagados. No segundo
caso, os dados vão sobreviver além de uma transação, mas qdo acabar a sessão do usuário, os dados serão
apagados.

Usa-se a clausula on commit, para controlar a longevidade dos dados – on commit delete rows: apaga
as linhas de uma tabela qdo um commit ou rollback é emitido e on commit preserve rows mantém as
linhas por mais de uma transação, removendo-as qdo a sessão do usuário acabar. Caso haja índices
associados a linhas da tabela temporária, estas serão removidas juntamente com as linhas da tabela
temporária.


Tabelas organizadas por índice

O índice agiliza a procura por uma linha da tabela, tornando as consultas mais eficientes, embora adicione
um overhead no banco de dados, pois este deve manter as linhas de dados e as entradas de índices para a
tabela. Se caso a tabela seja acessada somente para um coluna temos a opção de criar uma IOT – index
organized table, que armazenas as linhas de uma tabela em um árvore B onde cada nó contém a coluna
chaveada juntos com as demais não indexadas. A vantagem dessa tabela é que uma estrutura apenas é
mantida pelo banco de dados em vez de duas. A desvantagem é que uma IOT deve ser uma tabela com
uma chave primária, o que não se aplica a todos os casos. As IOT's não podem ser clusterizadas e não são a
melhor solução para tabelas com muitas colunas e com uma frequencia alta de acessos.


Tabelas de Objeto

O Oracle suporta recursos orientado a objetos no banco de dados, tipos definidos pelo usuário e quais
métodos podem ser executados pelo objetos, facilitando a implementação de banco de dados orientado a
objetos. As tabelas de objeto contem linhas que são objtos por si só ou instancias das definições dos tipos.
As linhas podem ser referenciadas pelo OID do objeto. Exemplo de criação de um tipo de objeto:

create type PERS_TYPE as object
        (Last_name varchar2(45)
         First_name varchar2(45));


criando a tabela de objetos

create table pers of pers_type;
adicionando dados:

insert into pers values(pers_type('Nome', 'Sobrenome'))


Tabelas Externas

Permitem que o usuário acesse uma fonte externa de dados, como um arquivo texto por exemplo, tratando-
o como uma tabela de banco de dados. A criação de uma tabela externa se faz em duas fases. A primeira
usa-se o comando create normalmente, definindo os dados que conterá a tabela. A segunda fase é definido
o mapeamento entre as colunas de banco de dados e a fonte externa de dados. A vantagem disso é que o
usuário pode acessar normalmente os dados de uma fonte externa como se estivesse acessando uma tabela
típica do banco de dados, mas ele não pode alterar, excluir, inserir ou criar índices.

Para o caso de um ambiente de dataware house tais desvantagens talvez não sejam tão ruins já que
permitem a carga do banco através de fontes externas e geralmente os dados não são alterados/deletados.


Tabelas Clusterizadas

Quando duas ou mais tabelas são frequentemente acessadas juntas pode-se criar uma tabela clusterizada
para agilizar as consultas que acessam essas tabelas, ou seja uma tabela contendo todas as colunas
resultando da consulta. Tabelas clusterizadas reduzem o espaço em disco e a quantidade de I/O numa
consulta, pois armazenam uma única vez as colunas que as tabelas tem em comum conhecidas como valor
chave de cluster. O valor chave de cluster também é armazenado em um índice de cluster, que opera como
um índice normal.
Entretanto, se a tabela cristalizada for alvo de frequentes operações de insert/delete as vantagens da
clusterização são perdidas. Se houver maior probabilidade de as tabelas que compõem o cluster serem
acessadas individualmente, tb perde o sentido de se clusterzar essas tabelas.

Cluster de Hash

Cluster de hash é um tipo de tabela clusterizada especial que em vez de usar um indice de cluster, utiliza
uma funçao de hashing para armazenar e recuperar dados em uma tabela. A quantidade estimda de espaço
necessário para a tabela é alocada qdo a tabela é criada, de acordo com o numero de chaves especificados
duranta a criação do cluster:

create cluster order_cluster(order_number number(6))
           size 50
           hash is order_number hashkeys 1000000;

create table cust_order(
      order_number     number(6) primary key
      order_date date,
      customer_number number)
cluster order_cluster(order_number);

Os cluster de hash tem a vantangem de econominar em I/O qdo uma consulta é realizada, pois se os
números de hash keys for suficientemente alto poderemos ter somente uma I/O para buscar uma linha da
tabela.

Cluster de Hash Classificados

São semelhante aos cluster de hash que utilizam uma função de hash para encontrar uma linha. Entretanto,
cluster de hash classificados permitem que linhas na tabela sejam armazenadas por uma ou mais colunas da
tabela em ordem crescente. Assim, dados de uma aplicação que são processados usando o processamento
FIFO (first in first out) se benificiam deste tipo de tabela. A criação do cluster de hash classificado é
semelhante ao anterior, mas usa-se o parametro SORT em um dos atributos da tabela para ordenar a tabela
segundo esse atributo.
Tabelas Particionadas

Particionar uma tabela ou índice justfica-se qdo temos uma tabela ou índice grandes, e dividir em espaços
menores torna esses elementos mais gerenciáveis. Uma tabela pode ser particionada em partes menores e
essas partes também podem ser particionadas. Do ponto de vista da aplição isso é transparente, não
requerent nenhuma consulta especial para acessar os dados. O único efeito é que consultas com a cláusula
where são executadas mais rápido.

As tabelas particiionadas podem ser de três tipos: particionadas por intervalo, particionadas por hash, ou
particionadas por lista. Cada linha em um tabela particionada pode exister somente em uma partição. A
particições onde serão armazenadas as linhas são determinadas pela chave de partição que pode ser uma
chve comporta de até 16 colunas na tabela.

Partição por Interalo

Uma partição por intervalo é uma partição cuja chave de partição cai dentro de um certo intervalo. Por
exemplo, as vendas de um site podem ser particionadas pela data das vendas e as partições divididas em
trimestres. Assim, uma venda pode pertencer a primeira partição, denotando o primeiro trimestre
(FY2010Q1), ou seja, dependendo do valor da data (que é a chave de partição) a linha será armazena em
uma das quatro partições (4 trimestres tem um ano ehhehe).

Partição por Lista

Partição por lista é uma partição cuja a chave cai dentro de grupos de valores distintos, por exemplo pode-
se ter uma partição para cada estado atendido por uma loja virtual. Uma compra para o Rio Grande do Sul
estaria na partição 'RS', para São Paulo em 'SP' e assim por diante.

Partição por Hash

É um tipo de particionamento que a linha vai para uma partição de acordo uma função de hashing
especificando a coluna ou colunas utilizadas na função de hashing, mas sem atribuir explicitamente a
partição, somente especificando quantas partições estarão disponíveis. O oracle se encarrega de colocar as
linhas da tabela na partição correta e assegurar uma distribuição uniforme de linhas nas partições
disponíveis.


Partições compostas

As partições podem também serem particionadas. Podes-se particionar um partição em lista em partições
por hash, por exemplo.

Índices Particionados

Os indices em uma tabela podem ser particionados de formar a corresponder o esquema de partição das
tabelas as quais eles indexam. Índices particionados locais apresentam a vantagem de um aumento de
disponibilidade do índice qdo ocorrem operações de partição, por exemplo arquivar e descartar a partição
FY2002Q1 e seu indice local não afetará a disponibilidade de índice para as outras partições da tabela
Restrições

Restrição é uma regra que podem ser definidas em uma ou mais colunas dentro de uma tabela para
implementar uma regra de negócio. O oracle possui seis tipos de restrições:

Regra do nulo: a restrição NOT NULL evita que NULL sejam inseridos numa coluna. NULL não é igual nada
nem a outro NULL por que o valor NULL não existe.

valores únicos de coluna: a restrição UNIQUE assegura que uma coluna ou grupo de colunas sejam unica
por toda a tabela. Por exemplo, em uma tabela USUÁRIO, a coluna CPF não pode ser repetido em mais de
uma linha da tabela, o cpf é único por usuário. A restrição UNIQUE pode vir acompanha da restrição NOT
NULL.

valores de chave primária: é o tipo de restrição mais comum de restrição e no máximo uma vez pode ser
aplicada uma única vez em um tabela. A coluna ou colunas que compõe a a chave primária não podem ser
NULL. Um índice único é criado para impor essa restrição; se um índice único utilizável existir para a coluna
a restrição da chave primária utilizará esse índice.

valores de integridade referencial: a restrição FOREIGN KEY é um tipo de restrição mais complexa que
as demais, visto que ela conta uma tabela para restringir os valores que podem ser inseridos na coluna com
a restrição de integridade referencial. Se uma tabela A tem uma FOREIGN KEY de uma uma tabela B, os
valores exitentes em na tabela A devem ter os correspondentes na tabela B.

integridade in-line complexa: tipo de restrição que pode ser imposta a uma coluna através da palavra
reservada CHECK, por exemplo uma coluna não pode ter o valor acima de 99. Múltiplas instruções CHECK
podem ser adicionadas em uma colunas e a restrição em si pode tomar outras colunas da linha que está
sendo inserida ou atualizada como argumentos. A linha somente é inserida no banco de dados se os CHECK
retornarem TRUE.

integridade baseada em trigger: tipo de restrição destinada para implementar regras de negócios mais
complexas que as restrições anteriores não conseguem tratar. É criada através do comando create trigger
seguido em um corpo em PL/SQL que são os comandos a serem executados pelo trigger qdo ocorre uma
determinada operação no banco de dados. Muito útil para operações de auditoria que armazenam as datas e
horário de alterações executadas em tabelas por exemplo.


Toda as restrições dão definidas qdo a tabela é criada ou qdo a tabela é alterada em nível de coluna, exceto
para triggers que são definidos na operação DML que está sendo realizada na tabela.


                                                 Índices

Como dito anteriormente, índices são utilizados para melhorar a performance de consultas no banco de
dados. Um índice armazena o valor da coluna ou colunas que estão sendo indexadas juntamente como o
endereço físico da linha que contém o valor indexado. Ao encontrar uma correspondência no índice o ID da
linha aponta para o bloco dentro do arquivo e qual linha dentro do bloco. Eles são criados sobre uma ou
mais colunas e armazenados eu uma estrutura de árvore B.

Existem vários tipos de índices que deve ser usados de acordo com o tipo de tabela e o tipo de acesso. No
oracle tems os seguinte tipos de índices

Índices únicos: frequentemente utilizado para impor a restrição de chave primária. Índices únicos
asseguram que valores duplicados não existirão na coluna ou colunas que estão sendo indexadas.

Índices não-únicos: ajuda a acelerar o acesso a uma tabela sem impor unicidade. Podemos criar um
índice para uma coluna LAST_NAME por exemplo e certamente obteriamos várias linhas pelo uso desse
índice.
Índice de chave reversa: é um tipo especial de índice amplamente utilizado em ambiente de
processamento de transações on-line OLTP. Nesse tipo de índice todos os bytes de uma coluna são
invertidos.

Um índice reverso, comparado a um índice convencional, inverte os bytes da chave a ser indexada. Ele é
particularmente interessante no caso de uma coluna de tabela conter valores de texto que comumente
apresentam um longo prefixo.

Por exemplo, em uma tabela destinada a armazenar Ordens de Serviço, a coluna chave pode possuir uma
forma padronizada com 12 caracteres. O primeiro documento do ano 2008 é indicado com “OS-200800001”,
o segundo com “OS-200800002”, e assim por diante. Até a tabela atingir alguns milhões de registros, os
primeiros sete caracteres serão redundantes e não trarão muita contribuição às buscas indexadas. Um índice
reverso armazenaria estes códigos na ordem inversa, isto é, como “100008002-SO”, “200008002-SO”,
“300008002-SO”, e assim por diante. Com isso, ele permite que o último caractere da chave, mais altamente
variável, espalhe os valores entre as estruturas de dados do índice. Tal procedimento aumenta
consideravelmente o desempenho no momento da busca.


Índices baseados em função: é semelhante a um índice B-Tree padrão exceto que para armazena-se no
índice, uma expressão no lugas da coluna ou colunas das tabelas. Um exemplo de utilidade desse tipo é
índice é a criação de um índice para o endereço ou sobrenome de alguém que pode ser gravado com banco
de dados em minúsculo ou maiúsculo, onde o indice terá uma expressão que transforma todos os nomes em
maiúsculo:

create index up_name on employee(upper(last_name))

Índice de mapa de bits: armazena uma string de bits para cada valor possível da coluna que está sendo
indexada. O comprimentos dos bits é igual ao número de linhas na tabela que está sendo indexada. Esse
índice tem como vantagens a economia de espaço e o tempo de resposta por que permite ao Oracle
remover rapidamente potenciais linhas de uma consulta que contém múltiplos where bem antes da propria
tabela precisar ser acessada. Ele é mais eficiente qdo utilizado em colundas com baixa cardinalidade.




                                                 Visões

Visões permitem que os usuários vejam uma apresentação personalizada dos dados. Uma visão tb é
conhecida como um consulta armazenada – os detalhes da consulta adjacente são ocultadas do usuário.
Através de visões podemos exibir dados conforme as autorizações/permissões do usuário, por exemplo, um
empregado pode ser dados dos colegas menos seus salários, enquanto que o supervisor pode ver inclusive o
salário. As visões tb podem ser usadas para impor segurança, por negar acesso de escrita de dados para
determinos usuário que não necessitam de tal permissão.

Uma visão regular não armazena dados, somente sua definição no dicionário de dados, e uma consulta
sujbacente (tb armazenada no banco de dados) sempre é executada qdo esta é acessada.

A visão materializada é um tipo de visão que armazena os resultados de sua consulta adjacente junto
com a definição da visão com o intuito de acelerar as consultas. Ela é semelhante a visão regular, pois sua
definição também fica no dicionário de dados, entretanto, ela ocupa espaço no segmento de dados
mantendo os dados resultantes da consulta de base. A visão materializada pode ser usada para replicar uma
cópia de leitura da tabela para um outro banco de dados. Para manter a visão atualizada o oracle usa um
arquivo de log denominada log de visão materializada utilizado para atualizações incrementais da visão
quando a tabela de base é alterada evitando que se faça uma atualização completa da visão por conta de
todas as atuzalições feitas na tabela. Em um ambiente de dataware house, a visão materializada pode
armazenar dados agregados em um group by rollup ou group by cube.

O terceiro tipo visão é a visão de objeto, criado para facilitar a implementação de banco de dados
orientados a objetos. Mas como muitas empresas ainda possuem sistemas legados baseados em banco de
dados relacionais, elas não dispões de recursos ou mesmo tempo para um migração total para um banco de
dados orientado a objetos. Para resolver este problema o Oracle permite criar uma visão de objeto de forma
que facilite essa transição de relacional para objeto permitindo que as aplicações vejam os dados como
objetos que possuem atributos e métodos, enquanto que os sistemas legados podem executar trabalhos em
lote na tabela INVENTORY. As visões de objetos permitem simulas tipos abstratos de dados, identificadores
de objetos – OID – e referências que um ambiente puramente OO de banco de dados ofereceria.


Usuários e Esquemas

O acesso ao banco de dados é feito por meio de usuários cadastrados, sendo sua autenticação feita pelo
banco de dados em si, pelo sistema operacional ou pela rede (baseada em PKI – Public Key Infrastructure).
Um usuário também pode possuir um esquema determinando se ele possui algum objeto no banco de dados
como tabelas, índices, visões, etc. Um usuário pode conceder acesso aos seus objetos a outros usuário,
limitado ao seu esquema, ou seja, só concede permissões aos objetos que possui.


Perfis

Como os recursos do banco de dados não são infinitos o DBA deve gerenciar a alocação de tais recursos, por
meio de perfis que armazenam o quanto de recursos poderão ser usados (CPU, sessões concorrentes, etc)
pelos usuários pertencentes ao perfil.


Sequencias

Número de 38 bits de comprimento gerados automaticamente pelo Oracle e são únicos, mas não
necessariamente sequenciais. Se uma sequencia se perder por que qualquer motivo e não for usada, outros
números subsequentes serão gerados.


Sinônimos

É simplesmente um alias para algum objeto do banco de dados (tabela, visões, índices, procedures, etc). O
sinônimo não aloca espaço no banco de dados além de sua definição no dicionário de dados. Um sinônimo
pode ser publico ou privado e, se for privado ele será definido no esquema do usuário, caso contrario ficará
disponível para todos.

PL/SQL

Linguagem procedura do oracle para implementar extensões à DML quando esta não conseguir produzir
resultados de maneira fácil.

Procedures/Funções

São blocos identificador de PL/SQL. Possuem três partes:

    1. seção de declaração de variaveis
    2. seção de executável
    3. seção de tratamento de exceções


A diferença em entre procedures e funções é que uma função retornará um valor único para o programa
chamador enquanto que procedures apenas retornam um código de status. As procedures são compiladas e
armazenada s no dicionário de dados uma vez e, quando mais de um usuário precisar chamar a procedure
haverá uma cópia da mesma no pool compartilhado. Além disso, uma procedure reduz o consume de banda
de rede do que várias instrução select e insert sendo executas em sequencia.

Pacotes

Pacotes PL/SQL agregam várias funções e procedimentos relacionados, compostos de duas partes:
1. especificação de pacote: onde são expostos os métodos e atributos
   2. corpo do pacote: implementação dos métodos expostos na especificação de pacote.

Os pacotes permitem que os objetos que referem a eles não precisam ser recompilados no caso de alguma
mudança no pacote, ao contrário do que ocorre com procedures e funções independentes.


Triggers

É um tipo especial de bloco PL/SQL ou Java executado qdo um evento especificado acontece, como
instruções DML em uma tabela ou visão, instruções DDL e mesmo eventos de banco de dados como start e
stop do banco. Os trigger são muito úteis para ambiente distribuídos para simular um relacionamento de
chave estrangeira entre tabelas residindo em banco de dados separados bem como, implementar regras de
integridade complexas impossíveis de implementar com as restrições padrão oferecidas pelo oracle.



Estruturas de Armazenamento Físico do Oracle

O banco de dados Oracle utiliza algumas estruturas de armazenamento físico no disco para conter e
gerencias os dados a partir de transações dos usuários.

Alguns arquivos contém dados reais dos usuários: arquivos de dados, arquivos de log de redo, arquivos de
log de redo em repositório de arquivos. Outros arquivos mantém outras informações como os arquivos de
controle que guardam o estados dos objetos do banco de dados(tabelas, índices, visões, etc), arquivos de
rastreamento e alerta, os quais armazenam informações de registro em log tanto para evento de rotina
como para condições de erro que possam ocorrer no banco de dados. Abaixo temos a relação entre as
estruturas físicas de armazenamento e a estruturas lógicas de armazenamento do Oracle.




Arquivos de dados: cada banco de dados deve conter pelo menos um arquivo de dados. Um arquivo de
dados no oracle corresponde a um arquivo físico do sistema de arquivos do sistema operacional. Cada
arquivo é membro de somente um único espaço de tabelas. Tal arquivo pode ser expandido caso o DBA
ache que isso seja necessário.
Arquivos de Log de redo: sempre que dados são alterados nos banco de dados, tabela, indices, visões,
etc, uma entrada no arquivo de log de redo é criada. Cada banco de dados possui pelo menos 2 que são
preenchidos de maneira circular, ou seja, qdo um está totalmente preenchido o outro começa a ser utilizado
como log. O arquivo de log de redo tem sua utilizadade no caso da instancia oracle falhar ou cair por
qualquer motivo, pois ao ser reiniciado esse arquivo é utilizado para reestabelecer o estado do banco de
dados antes da fallha numa operação denominada roll forward. Cabe ressaltar que multiplas cópias de um
arquivo de log pode existir em discos físicos diferentes para assegurar alta disponibilidade e integridade dos
dados, e ainda, esses arquivos podem ser multiplexados como o mesmo objetivo.

Arquivos de Controle: cada banco de dados possui pelo meno um arquivo de controle, pois este
armazena os metadados do banco de dados, ou seja, os dados sobre a estrutura física do próprio banco.
Contém o nome do banco de dados, qdo ele foi criado, os nomes e as localizações de todos os arquivos de
dados e arquivos de log de redo. Qualquer alteração feita no banco de dados é imediatamente refletia nesse
arquivo. Como ele é crucial para a integridade do banco de dados, ele costuma ser multiplexado, ou seja, o
oracle mantém várias cópias dele em diferentes partes do disco elegendo um como primário. Além disso, o
Oracle permite fazer backup do arquivo para o caso de alguma catastrofe acontecer, ser possível de recriar o
arquivo de controle.

alter database backup controlfile to trace

Arquivos de log em repositório: o oracle pode operar em dois modos archivelog e noarchivelog. No
modo noarchivelog, o arquivo de log de redo é escrito de maneira circular como dito ateriormente. Se uma
instância falhar, as transações serão reiniciadas no próximo restart e o arquivo de log será usado para
executar as transações que não conseguiram terminar. Mas, se o disco falhar as informações serão perdidas.
Entretanto, se o oracle estiver funcioando em archivelog, os arquivos de log, qdo totalmente preenchidos,
serão guardados em algum destino ou múltiplos destinos e, em caso de falha no disco, eles podem ser
resgatados do backup e utilizados para reconstruir o estado do banco de dados no momento da falha. Este
recurso é crítico para ambientes de alta disponibilidade do oracle conhecido de data guard.

Arquivos de log de alerta: arquivos usados para armazenar mensagem de alerta ou no caso de sessões
de usuário em background, como trace logs.


Além dos aquivos mencionados, existem os aquivos de backup, arquivos de senha, de inicalização

Multiplexação de arquivos: multiplexar os arquivos de log minimiza o risco de perda de dados devidos a
falhas em disco físico, podendo ser automatizada utilizando-se uma instância oracle chamada ASM –
Automatic Storage Management. Além disso, pode-se fazer a multiplexação de forma manual, sem uma
solução ASM ou RAID, por meio de alguns parâmetros de inicialização da instância oracle.
Estruturas de Memória Oracle

O Oracle utiliza a memória física do servidor para armazenar várias coisas para uma instância oracle:o
próprio código executaável oracle, informações de sessão, processos associados com o banco de dados e
compartilhamento de informações entre processos, tais como bloqueio em objetos de banco de dados. As
estruturas de memórias possuem, também instruções SQL de usuário e que serão armazenadas em disco,
como blocos de dados em segmentos de banco de dados e informações sobre transações completadas no
banco de dados. A área de memória alocada pelo oracle se chama SGA – System Global Area.




Existe també a chamada PGA – Program Global Area – que é privada para cada servidor e processo em
background; um PGA é alocado a cada processo.


SGA: é um grupo de estruturas de memória compartilhadas para uma instância oracle, compartilhada pelos
usuários da instância do banco de dados. Qdo a instância é iniciada a memória é alocada para a SGA
baseada nos valores especificados no arquivo de inicalização ou diretamento no software oracle.

Cache de Buffer: o cache de buffer de banco de dados contem os blocos de dados em disco recém-lidos
para devido a uma instrução select, ou que contém dados alterados ou adicionados via uma instrução DML.

Pool compartilhado: o pool compatilhado possui dois subcaches: o cache de biblioteca e o cache de
dicionário de dados. O cache de biblioteca contém informações sobre instruções SQL e PL/SQL executadas
no banco de dados que podem ser compartilhadas entre os usuário dos banco de dados, visto que
potencialmente eles podem acessar os mesmos dados e executar as mesmas consultas. Já o cache de
dicionário de dados é uma coleção de tabelas de banco de dados, que pertencem aos esquemas SYS e
SYSTEM que contêm os metadados do banco de dados, suas estruturas, e os privilégios e papéis dos
usuários do banco de dados. Além disso, esse cache contém blocos armazenando o dicionário de dados que
são utilizados para ajudar no processamento de instruções DML.

Buffer de log de redo: contém as alterações mais recentes para os blocos de dados nos arquivos de
dados. Qdo 1/3 do buffer de log estiver cheio ou a cada 3 segundos os registros de log de redo são
gravados no arquivos de log. Uma transação não é considerada completada se as entradas de log não
tenham sido gravadas completadamente nos arquivos de log de redo.

Large Pool: é uma área opcional da SGA, utilizada para transações que interagem com mais de um banco
de dados, buffers de mensagem para processos que realizam consultas paralelas e operações de restauração
e backup paralelo (RMAN)


Java Pool: utilizado pela JVM Oracle para todos os códigos e dados java dentro de um sessão de usuário.

Streams Pool: contém estruturas dados e de controle que suportam o recurso Oracle Streams, que
geerencia o compartilhamento de dados e eventos em ambiente distribuído.


Program Global Area: memória alocada e privada para um processo, que depende da configuração de
conexão de bando de dados, que pode ser conexão compartilhada ou conexão privada. Se for compartilhada
vários usuários usuaram a mesma conexão para o banco de dados, melhorando o uso de memória mas
diminuindo o tempo de resposta. Já a conexão privada é o contrário, sendo recomendado o uso e
ambientes dedicados.

Área de código de Software: armazenam os arquivos executáveis oracle que estão em execução por
parte da instância. São áreas estáticas de somente leitura e modificadas apenas por uma nova distribuição
de software. De acordo com os parêmtros de inicialização, esses arquivos podem ser compartilhados entre
vários usuário ou não, claro que isso reflete no uso de memória do servidor.


Processos em segundo plano

Quando uma instância oracle é iniciada, múltiplos processos em background também são iniciados. Um
processo em background é um código rodando em background projetado para um tarefa específica,
conforme listado abaixo e mostrado na figura.
SMON: System monitor: no caso de queda do sistema é responsável por ler os arquivos de log de redo
aplicando as entradas lidas no banco de dados para restaurar o banco de dados no momento da falha
ocorrida.

PMON: Process Monitor: se uma conexão do usuário for descartada por qualquer motivo ele realiza o
trabalho de faxina:

   •   reverte a transação que estava em progresso no caso de ter havido falha
   •   marca blocos da transação como disponíveis no cache de buffer
   •   remove os locks sobre as linhas afetadas na tabela
   •   remo o ID do processo que foi desconectado da lista de processos ativos

DBWn: Database Write, grava os blocos de dados novos ou alterados na cache de buffer de nos arquivos de
dados, utilizando um algoritmo de LRU. Até 20 processos DBWn podem ser iniciados.

LGWr: log writer: responsável pelo gerenciamento do buffer de log de redo. É um dos processos mais ativos
em uma instância que tem atividade DML intensa. Uma transação não é considerada bem sucedida se o
LGWr não escrever todas as entradas do buffer de log no aquivo de log de redo, incluindo o registro de
confirmação. Inclusive, os buffers sujos no cache de buffers não podem ser gravados nos arquivos de dados
pelo DBWn até que o LGWr tenha gravado as informações de redo.

ARCn: Archive process: se o banco de dados estivem em modo ARCHIVELOG, então este processo
armazena os logs de redo em um ou mais destinos (diretórios, dispositivos ou endereços de rede) sempre
que um arquivo de redo esteja totalmente preenchido e um novo acabou de começar a ser usado.

CKPT: checkpoint process: processo de ponto de verificação que ajuda a diminuir a quantidade de tempo
necessária para recuperção de instância.

RECO: Recovery process: trata falhas de transações distribuídas. Se uma tabela A no banco de dados AA for
alterada juntamente com uma tabela B no banco BB e ocorrer uma falha de conexão antes de BB ser
atualizado o RECO reverterá a transação.

Contenu connexe

Tendances

Essbase Series - Backup
Essbase Series - BackupEssbase Series - Backup
Essbase Series - BackupCaio Lima
 
Inúmeras Razões para Migrar de Oracle 10g para 11g
Inúmeras Razões para Migrar de Oracle 10g para 11g Inúmeras Razões para Migrar de Oracle 10g para 11g
Inúmeras Razões para Migrar de Oracle 10g para 11g TI Infnet
 
GUOB - Passa-a-passo para migração do Oracle Database 11g
GUOB - Passa-a-passo para migração do Oracle Database 11gGUOB - Passa-a-passo para migração do Oracle Database 11g
GUOB - Passa-a-passo para migração do Oracle Database 11gRodrigo Almeida
 
Oracle OEM Grid Control 11g
Oracle OEM Grid Control 11gOracle OEM Grid Control 11g
Oracle OEM Grid Control 11gRodrigo Almeida
 
Apresentação Oracle SGBD
Apresentação Oracle SGBDApresentação Oracle SGBD
Apresentação Oracle SGBDDenis Vieira
 
Otimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para ExadataOtimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para ExadataRodrigo Almeida
 
ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?Rodrigo Almeida
 
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-ptguest519a5b6
 
Oracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & MigraçãoOracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & MigraçãoRodrigo Almeida
 
DBA became DMA for Oracle Exadata X2-2
DBA became DMA for Oracle Exadata X2-2DBA became DMA for Oracle Exadata X2-2
DBA became DMA for Oracle Exadata X2-2Rodrigo Almeida
 
IBTA - Oracle Database Security
IBTA - Oracle Database SecurityIBTA - Oracle Database Security
IBTA - Oracle Database SecurityRodrigo Almeida
 
Desvendando Oracle Exadata X2-2
Desvendando Oracle Exadata X2-2Desvendando Oracle Exadata X2-2
Desvendando Oracle Exadata X2-2Rodrigo Almeida
 
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)Dirceu Resende
 
Oracle Exadata
Oracle ExadataOracle Exadata
Oracle ExadataiMasters
 
Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)guestcc491
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotationeduardo dias
 

Tendances (20)

Essbase Series - Backup
Essbase Series - BackupEssbase Series - Backup
Essbase Series - Backup
 
Inúmeras Razões para Migrar de Oracle 10g para 11g
Inúmeras Razões para Migrar de Oracle 10g para 11g Inúmeras Razões para Migrar de Oracle 10g para 11g
Inúmeras Razões para Migrar de Oracle 10g para 11g
 
GUOB - Passa-a-passo para migração do Oracle Database 11g
GUOB - Passa-a-passo para migração do Oracle Database 11gGUOB - Passa-a-passo para migração do Oracle Database 11g
GUOB - Passa-a-passo para migração do Oracle Database 11g
 
Oracle OEM Grid Control 11g
Oracle OEM Grid Control 11gOracle OEM Grid Control 11g
Oracle OEM Grid Control 11g
 
Apresentação Oracle SGBD
Apresentação Oracle SGBDApresentação Oracle SGBD
Apresentação Oracle SGBD
 
Otimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para ExadataOtimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para Exadata
 
ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?
 
Treinamento DBA Essential
Treinamento DBA EssentialTreinamento DBA Essential
Treinamento DBA Essential
 
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
 
Oracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & MigraçãoOracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & Migração
 
IDC Summit 2015 - DBaaS
IDC Summit 2015 - DBaaSIDC Summit 2015 - DBaaS
IDC Summit 2015 - DBaaS
 
DBA became DMA for Oracle Exadata X2-2
DBA became DMA for Oracle Exadata X2-2DBA became DMA for Oracle Exadata X2-2
DBA became DMA for Oracle Exadata X2-2
 
IBTA - Oracle Database Security
IBTA - Oracle Database SecurityIBTA - Oracle Database Security
IBTA - Oracle Database Security
 
Treinamento Data Guard
Treinamento Data GuardTreinamento Data Guard
Treinamento Data Guard
 
Desvendando Oracle Exadata X2-2
Desvendando Oracle Exadata X2-2Desvendando Oracle Exadata X2-2
Desvendando Oracle Exadata X2-2
 
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
 
Oracle Exadata
Oracle ExadataOracle Exadata
Oracle Exadata
 
Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
 
Oracle Data Guard
Oracle Data GuardOracle Data Guard
Oracle Data Guard
 

En vedette

Vantagens Hipirion Oracle
Vantagens Hipirion OracleVantagens Hipirion Oracle
Vantagens Hipirion Oracleguestad8ca6
 
Adobe Flash contado em poucos cliques
Adobe Flash contado em poucos cliquesAdobe Flash contado em poucos cliques
Adobe Flash contado em poucos cliquesdamiana guedes
 
ADOBE DREAMWEAVER
ADOBE DREAMWEAVERADOBE DREAMWEAVER
ADOBE DREAMWEAVERNi
 
PL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosPL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosDanilo Braga
 
Implantação de um ERP - Vantagens e Dificuldades
Implantação de um ERP - Vantagens e DificuldadesImplantação de um ERP - Vantagens e Dificuldades
Implantação de um ERP - Vantagens e DificuldadesAndre Dourado
 
Présentation Oracle DataBase 11g
Présentation Oracle DataBase 11gPrésentation Oracle DataBase 11g
Présentation Oracle DataBase 11gCynapsys It Hotspot
 
Técnica Construtiva : Adobe
Técnica Construtiva : AdobeTécnica Construtiva : Adobe
Técnica Construtiva : AdobePaula Bianchi
 
Oracle Database Overview
Oracle Database OverviewOracle Database Overview
Oracle Database Overviewhonglee71
 

En vedette (16)

Css
CssCss
Css
 
SGBD
SGBDSGBD
SGBD
 
Vantagens Hipirion Oracle
Vantagens Hipirion OracleVantagens Hipirion Oracle
Vantagens Hipirion Oracle
 
Team Software Process (TSP)
Team Software Process (TSP)Team Software Process (TSP)
Team Software Process (TSP)
 
Adobe Flash contado em poucos cliques
Adobe Flash contado em poucos cliquesAdobe Flash contado em poucos cliques
Adobe Flash contado em poucos cliques
 
My sql apresentação
My sql apresentaçãoMy sql apresentação
My sql apresentação
 
ADOBE DREAMWEAVER
ADOBE DREAMWEAVERADOBE DREAMWEAVER
ADOBE DREAMWEAVER
 
PL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosPL/SQL - Conceitos Básicos
PL/SQL - Conceitos Básicos
 
Introdução ao MySQL
Introdução ao MySQLIntrodução ao MySQL
Introdução ao MySQL
 
Views Oracle Database
Views Oracle DatabaseViews Oracle Database
Views Oracle Database
 
Implantação de um ERP - Vantagens e Dificuldades
Implantação de um ERP - Vantagens e DificuldadesImplantação de um ERP - Vantagens e Dificuldades
Implantação de um ERP - Vantagens e Dificuldades
 
Présentation Oracle DataBase 11g
Présentation Oracle DataBase 11gPrésentation Oracle DataBase 11g
Présentation Oracle DataBase 11g
 
MYSQL.ppt
MYSQL.pptMYSQL.ppt
MYSQL.ppt
 
Técnica Construtiva : Adobe
Técnica Construtiva : AdobeTécnica Construtiva : Adobe
Técnica Construtiva : Adobe
 
Oracle Database Overview
Oracle Database OverviewOracle Database Overview
Oracle Database Overview
 
Bases De Dados
Bases De DadosBases De Dados
Bases De Dados
 

Similaire à Banco de dados oracle

Oracle 11g resumo
Oracle 11g resumoOracle 11g resumo
Oracle 11g resumomarcosgama
 
Apostila de Sql Server 2005
Apostila de Sql Server 2005Apostila de Sql Server 2005
Apostila de Sql Server 2005Andre Nascimento
 
Arquitetura e sgbd de um banco de dados
Arquitetura e sgbd de um banco de dadosArquitetura e sgbd de um banco de dados
Arquitetura e sgbd de um banco de dadosdiogocbj
 
Performance Sql Server
Performance Sql ServerPerformance Sql Server
Performance Sql Serverjarlei
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfArleiEvaristo
 
Introdução a modelagem de dados parte II - Banco de Dados
Introdução a modelagem de dados parte II - Banco de DadosIntrodução a modelagem de dados parte II - Banco de Dados
Introdução a modelagem de dados parte II - Banco de Dadosinfo_cimol
 
Armazenamento Temporário e CTEs - SQL Server
Armazenamento Temporário e CTEs - SQL ServerArmazenamento Temporário e CTEs - SQL Server
Armazenamento Temporário e CTEs - SQL ServerHebert Dorigon
 
Semana acadêmica UFRGS 2014
Semana acadêmica UFRGS 2014Semana acadêmica UFRGS 2014
Semana acadêmica UFRGS 2014Daniela Macedo
 
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...Edisio Nascimento
 
TOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQLTOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQLFábio Delboni
 

Similaire à Banco de dados oracle (20)

Oracle 11g resumo
Oracle 11g resumoOracle 11g resumo
Oracle 11g resumo
 
Sql
SqlSql
Sql
 
Aula 10 banco de dados
Aula 10   banco de dadosAula 10   banco de dados
Aula 10 banco de dados
 
Base de dados no Excel 1.pdf
Base de dados no Excel 1.pdfBase de dados no Excel 1.pdf
Base de dados no Excel 1.pdf
 
Artigo couchdb
Artigo couchdbArtigo couchdb
Artigo couchdb
 
Apostila de Sql Server 2005
Apostila de Sql Server 2005Apostila de Sql Server 2005
Apostila de Sql Server 2005
 
Arquitetura e sgbd de um banco de dados
Arquitetura e sgbd de um banco de dadosArquitetura e sgbd de um banco de dados
Arquitetura e sgbd de um banco de dados
 
Performance Sql Server
Performance Sql ServerPerformance Sql Server
Performance Sql Server
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdf
 
Introdução ao BD Postgre
Introdução ao BD PostgreIntrodução ao BD Postgre
Introdução ao BD Postgre
 
Sql
SqlSql
Sql
 
Introdução a modelagem de dados parte II - Banco de Dados
Introdução a modelagem de dados parte II - Banco de DadosIntrodução a modelagem de dados parte II - Banco de Dados
Introdução a modelagem de dados parte II - Banco de Dados
 
Armazenamento Temporário e CTEs - SQL Server
Armazenamento Temporário e CTEs - SQL ServerArmazenamento Temporário e CTEs - SQL Server
Armazenamento Temporário e CTEs - SQL Server
 
Aula 10 banco de dados
Aula 10   banco de dadosAula 10   banco de dados
Aula 10 banco de dados
 
Semana acadêmica UFRGS 2014
Semana acadêmica UFRGS 2014Semana acadêmica UFRGS 2014
Semana acadêmica UFRGS 2014
 
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
 
Sgf
SgfSgf
Sgf
 
Ara7129 unidade-1-v1
Ara7129 unidade-1-v1Ara7129 unidade-1-v1
Ara7129 unidade-1-v1
 
Sql - introdução
Sql -  introduçãoSql -  introdução
Sql - introdução
 
TOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQLTOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQL
 

Banco de dados oracle

  • 1. Banco de Dados Oracle Item do Edital: Banco de dados oracle: conceitos e arquitetura, SQL (DML, DDL). Triggers, procedures, functions e packages. PL/SQL. Segurança e gerenciamento de objetos. Conceitos e Arquitetura A arquitetura do oracle subdivide-se em camada física e camada lógica. A camada física consiste de arquivos armazenados em disco enquanto que a camada lógica mapea os dados da camada física. 1 Camada Lógica 1.1 Banco de dados O banco de dados é uma coleção de dados em disco gravados em um ou mais arquivos em um servidor de banco de dados que coleta e mantém as informações relacionadas. O banco de dados possui várias estruturas físicas e lógicas sendo a tabela a estrutura lógica mais importante do banco de dados. Além disso, o um banco de dados fornece mecanismos de segurança para evitar acessos não autorizados e assegurar a confidencialidade dos dados. 1.2 Instâncias Os principais componentes típicos de um servidor comercial são uma ou mais CPU's, espaço em disco e memória. No oracle, o banco de dados fica no disco do servidor enquanto que uma instância existe somente na memória do servidor. Uma instância é composta de um grande bloco de memória alocado em um área denominada SGA – System Global Area, junto com outros processos rodando em background e que interagem com a SGA e o banco de dados (arquivos de banco de dados no disco). Mais uma instancia pode acessar o mesmo banco de dados ou mesmo acessar um banco de dados remoto. /*não misturar os conceitos de banco de dados e instância */ Estruturas de armazenamento lógico
  • 2. 2.1 Espaços de Tabelas Os arquivos de banco de dados são agrupados no Oracle em um ou mais espaços de tabelas, onde dentro de cada um desses espaços (tablespaces) as estruturas lógicas do banco de dados como tabelas e índices se subdividem em extensões e blocos. A subdivição em tais estruturas facilita o gerenciamento do espaço em disco pelo Oracle. Blocos É a menor unidade de armazenamento no banco de dados Oracle. O tamanho do bloco é um número específico de bytes geralmente multiplo do tamanho do bloco usado pelo sistema operacional. Atravé dos parametro de inicalização DB_BLOCK_SIZE , o DBA pode determinar o tamnho do bloco. Extensões Um extensão é um agrupamento lógico do banco de dados de vários blocos. Segmentos É um grupo de extensões que abrange um objeto de banco de dados como uma unidade, tabela ou índice. Essa é a menor unidade de armazenamento que o usuário final do banco de dados consegue interagir. Quatro são os tipos de segmentos, vistos a seguir. Segmentos de dados Cada tabela do banco de dados reside em um único segmento de dados, o que pode ser composto de uma ou mais extensões, mais de um segmento no entanto, podem ser utilizados para armazenar uma tabela no caso se for uma tabela particionada ou clusterizada (mais a frente veremos isso). Segmentos de índice Cada índice é armazenado em seu próprio segmento de índice. Mais de um segmento pode ser usando para indices particionados ou clusterizados. Segmento temporário Quando uma instrução sql é executada ela precisa de espeço em disco para completar alguma operação, como um ordenação. Caso isso não possa ser relalizado em memória um segmento temporário é alocado para a instrução poder terminar. Após a execução da operação o segmento deixa de existir. Segmento de rollback No oracle 10g o segmento de tabela exite na tabela de espaço SYSTEM. Eles servem para guardar o estado do banco de dados antes de completar uma transação ou um operação DML. Se houver falha este segmento é usado para restaurar o estado anterior do banco de dados antes da falha.
  • 3. Estruturas Lógicas do banco de dados Oracle Tabela Uma tabela é a unidade básica de armazenamento em um banco de dados e a tabela relacional é o tipo mais comum de tabela utilzado em banco de dados comerciais. Uma tabea é organizado por heap, ou seja, as linhas não são armazenadas em um determinada ordem. Cada linha é composta de uma ou mais colunas e cada coluna tem um tipo de dados e um comprimento. No oracle, além do tipo de dados comumente utilizados como varchar, string, date, long, etc.. podemos definir um tipo de usuário ou mesmo uma tabela aninhada. Além disso, a tabela pode ser definida como uma tabela de objeto, no caso da aplicação usar um banco de dados orientados a objetos. Tabelas Temporárias Tabelas temporárias são temporárias no sentido dos dados armazenados na tabela, não na definição da própria tabela. O comando create global temporary table cria uma tabela temporária. Desde que os usuário tenham permissão é possivel de se fazer um select na tabela ou mesmo uma instrução DML: insert, update, delete. Entretanto, cada usuário vê somente seus próprios dados, se ele truncar seus dados, somente as linhas que ele inseriu serão apagadas. A temporariedade dos dados em um a tabela temporária pode ser no escopo de uma transação ou de sessão. No primeiro caso, ao terminar uma transação os dados temporários serão apagados. No segundo caso, os dados vão sobreviver além de uma transação, mas qdo acabar a sessão do usuário, os dados serão apagados. Usa-se a clausula on commit, para controlar a longevidade dos dados – on commit delete rows: apaga as linhas de uma tabela qdo um commit ou rollback é emitido e on commit preserve rows mantém as linhas por mais de uma transação, removendo-as qdo a sessão do usuário acabar. Caso haja índices associados a linhas da tabela temporária, estas serão removidas juntamente com as linhas da tabela temporária. Tabelas organizadas por índice O índice agiliza a procura por uma linha da tabela, tornando as consultas mais eficientes, embora adicione um overhead no banco de dados, pois este deve manter as linhas de dados e as entradas de índices para a tabela. Se caso a tabela seja acessada somente para um coluna temos a opção de criar uma IOT – index organized table, que armazenas as linhas de uma tabela em um árvore B onde cada nó contém a coluna chaveada juntos com as demais não indexadas. A vantagem dessa tabela é que uma estrutura apenas é mantida pelo banco de dados em vez de duas. A desvantagem é que uma IOT deve ser uma tabela com uma chave primária, o que não se aplica a todos os casos. As IOT's não podem ser clusterizadas e não são a melhor solução para tabelas com muitas colunas e com uma frequencia alta de acessos. Tabelas de Objeto O Oracle suporta recursos orientado a objetos no banco de dados, tipos definidos pelo usuário e quais métodos podem ser executados pelo objetos, facilitando a implementação de banco de dados orientado a objetos. As tabelas de objeto contem linhas que são objtos por si só ou instancias das definições dos tipos. As linhas podem ser referenciadas pelo OID do objeto. Exemplo de criação de um tipo de objeto: create type PERS_TYPE as object (Last_name varchar2(45) First_name varchar2(45)); criando a tabela de objetos create table pers of pers_type;
  • 4. adicionando dados: insert into pers values(pers_type('Nome', 'Sobrenome')) Tabelas Externas Permitem que o usuário acesse uma fonte externa de dados, como um arquivo texto por exemplo, tratando- o como uma tabela de banco de dados. A criação de uma tabela externa se faz em duas fases. A primeira usa-se o comando create normalmente, definindo os dados que conterá a tabela. A segunda fase é definido o mapeamento entre as colunas de banco de dados e a fonte externa de dados. A vantagem disso é que o usuário pode acessar normalmente os dados de uma fonte externa como se estivesse acessando uma tabela típica do banco de dados, mas ele não pode alterar, excluir, inserir ou criar índices. Para o caso de um ambiente de dataware house tais desvantagens talvez não sejam tão ruins já que permitem a carga do banco através de fontes externas e geralmente os dados não são alterados/deletados. Tabelas Clusterizadas Quando duas ou mais tabelas são frequentemente acessadas juntas pode-se criar uma tabela clusterizada para agilizar as consultas que acessam essas tabelas, ou seja uma tabela contendo todas as colunas resultando da consulta. Tabelas clusterizadas reduzem o espaço em disco e a quantidade de I/O numa consulta, pois armazenam uma única vez as colunas que as tabelas tem em comum conhecidas como valor chave de cluster. O valor chave de cluster também é armazenado em um índice de cluster, que opera como um índice normal. Entretanto, se a tabela cristalizada for alvo de frequentes operações de insert/delete as vantagens da clusterização são perdidas. Se houver maior probabilidade de as tabelas que compõem o cluster serem acessadas individualmente, tb perde o sentido de se clusterzar essas tabelas. Cluster de Hash Cluster de hash é um tipo de tabela clusterizada especial que em vez de usar um indice de cluster, utiliza uma funçao de hashing para armazenar e recuperar dados em uma tabela. A quantidade estimda de espaço necessário para a tabela é alocada qdo a tabela é criada, de acordo com o numero de chaves especificados duranta a criação do cluster: create cluster order_cluster(order_number number(6)) size 50 hash is order_number hashkeys 1000000; create table cust_order( order_number number(6) primary key order_date date, customer_number number) cluster order_cluster(order_number); Os cluster de hash tem a vantangem de econominar em I/O qdo uma consulta é realizada, pois se os números de hash keys for suficientemente alto poderemos ter somente uma I/O para buscar uma linha da tabela. Cluster de Hash Classificados São semelhante aos cluster de hash que utilizam uma função de hash para encontrar uma linha. Entretanto, cluster de hash classificados permitem que linhas na tabela sejam armazenadas por uma ou mais colunas da tabela em ordem crescente. Assim, dados de uma aplicação que são processados usando o processamento FIFO (first in first out) se benificiam deste tipo de tabela. A criação do cluster de hash classificado é semelhante ao anterior, mas usa-se o parametro SORT em um dos atributos da tabela para ordenar a tabela segundo esse atributo.
  • 5. Tabelas Particionadas Particionar uma tabela ou índice justfica-se qdo temos uma tabela ou índice grandes, e dividir em espaços menores torna esses elementos mais gerenciáveis. Uma tabela pode ser particionada em partes menores e essas partes também podem ser particionadas. Do ponto de vista da aplição isso é transparente, não requerent nenhuma consulta especial para acessar os dados. O único efeito é que consultas com a cláusula where são executadas mais rápido. As tabelas particiionadas podem ser de três tipos: particionadas por intervalo, particionadas por hash, ou particionadas por lista. Cada linha em um tabela particionada pode exister somente em uma partição. A particições onde serão armazenadas as linhas são determinadas pela chave de partição que pode ser uma chve comporta de até 16 colunas na tabela. Partição por Interalo Uma partição por intervalo é uma partição cuja chave de partição cai dentro de um certo intervalo. Por exemplo, as vendas de um site podem ser particionadas pela data das vendas e as partições divididas em trimestres. Assim, uma venda pode pertencer a primeira partição, denotando o primeiro trimestre (FY2010Q1), ou seja, dependendo do valor da data (que é a chave de partição) a linha será armazena em uma das quatro partições (4 trimestres tem um ano ehhehe). Partição por Lista Partição por lista é uma partição cuja a chave cai dentro de grupos de valores distintos, por exemplo pode- se ter uma partição para cada estado atendido por uma loja virtual. Uma compra para o Rio Grande do Sul estaria na partição 'RS', para São Paulo em 'SP' e assim por diante. Partição por Hash É um tipo de particionamento que a linha vai para uma partição de acordo uma função de hashing especificando a coluna ou colunas utilizadas na função de hashing, mas sem atribuir explicitamente a partição, somente especificando quantas partições estarão disponíveis. O oracle se encarrega de colocar as linhas da tabela na partição correta e assegurar uma distribuição uniforme de linhas nas partições disponíveis. Partições compostas As partições podem também serem particionadas. Podes-se particionar um partição em lista em partições por hash, por exemplo. Índices Particionados Os indices em uma tabela podem ser particionados de formar a corresponder o esquema de partição das tabelas as quais eles indexam. Índices particionados locais apresentam a vantagem de um aumento de disponibilidade do índice qdo ocorrem operações de partição, por exemplo arquivar e descartar a partição FY2002Q1 e seu indice local não afetará a disponibilidade de índice para as outras partições da tabela
  • 6. Restrições Restrição é uma regra que podem ser definidas em uma ou mais colunas dentro de uma tabela para implementar uma regra de negócio. O oracle possui seis tipos de restrições: Regra do nulo: a restrição NOT NULL evita que NULL sejam inseridos numa coluna. NULL não é igual nada nem a outro NULL por que o valor NULL não existe. valores únicos de coluna: a restrição UNIQUE assegura que uma coluna ou grupo de colunas sejam unica por toda a tabela. Por exemplo, em uma tabela USUÁRIO, a coluna CPF não pode ser repetido em mais de uma linha da tabela, o cpf é único por usuário. A restrição UNIQUE pode vir acompanha da restrição NOT NULL. valores de chave primária: é o tipo de restrição mais comum de restrição e no máximo uma vez pode ser aplicada uma única vez em um tabela. A coluna ou colunas que compõe a a chave primária não podem ser NULL. Um índice único é criado para impor essa restrição; se um índice único utilizável existir para a coluna a restrição da chave primária utilizará esse índice. valores de integridade referencial: a restrição FOREIGN KEY é um tipo de restrição mais complexa que as demais, visto que ela conta uma tabela para restringir os valores que podem ser inseridos na coluna com a restrição de integridade referencial. Se uma tabela A tem uma FOREIGN KEY de uma uma tabela B, os valores exitentes em na tabela A devem ter os correspondentes na tabela B. integridade in-line complexa: tipo de restrição que pode ser imposta a uma coluna através da palavra reservada CHECK, por exemplo uma coluna não pode ter o valor acima de 99. Múltiplas instruções CHECK podem ser adicionadas em uma colunas e a restrição em si pode tomar outras colunas da linha que está sendo inserida ou atualizada como argumentos. A linha somente é inserida no banco de dados se os CHECK retornarem TRUE. integridade baseada em trigger: tipo de restrição destinada para implementar regras de negócios mais complexas que as restrições anteriores não conseguem tratar. É criada através do comando create trigger seguido em um corpo em PL/SQL que são os comandos a serem executados pelo trigger qdo ocorre uma determinada operação no banco de dados. Muito útil para operações de auditoria que armazenam as datas e horário de alterações executadas em tabelas por exemplo. Toda as restrições dão definidas qdo a tabela é criada ou qdo a tabela é alterada em nível de coluna, exceto para triggers que são definidos na operação DML que está sendo realizada na tabela. Índices Como dito anteriormente, índices são utilizados para melhorar a performance de consultas no banco de dados. Um índice armazena o valor da coluna ou colunas que estão sendo indexadas juntamente como o endereço físico da linha que contém o valor indexado. Ao encontrar uma correspondência no índice o ID da linha aponta para o bloco dentro do arquivo e qual linha dentro do bloco. Eles são criados sobre uma ou mais colunas e armazenados eu uma estrutura de árvore B. Existem vários tipos de índices que deve ser usados de acordo com o tipo de tabela e o tipo de acesso. No oracle tems os seguinte tipos de índices Índices únicos: frequentemente utilizado para impor a restrição de chave primária. Índices únicos asseguram que valores duplicados não existirão na coluna ou colunas que estão sendo indexadas. Índices não-únicos: ajuda a acelerar o acesso a uma tabela sem impor unicidade. Podemos criar um índice para uma coluna LAST_NAME por exemplo e certamente obteriamos várias linhas pelo uso desse índice.
  • 7. Índice de chave reversa: é um tipo especial de índice amplamente utilizado em ambiente de processamento de transações on-line OLTP. Nesse tipo de índice todos os bytes de uma coluna são invertidos. Um índice reverso, comparado a um índice convencional, inverte os bytes da chave a ser indexada. Ele é particularmente interessante no caso de uma coluna de tabela conter valores de texto que comumente apresentam um longo prefixo. Por exemplo, em uma tabela destinada a armazenar Ordens de Serviço, a coluna chave pode possuir uma forma padronizada com 12 caracteres. O primeiro documento do ano 2008 é indicado com “OS-200800001”, o segundo com “OS-200800002”, e assim por diante. Até a tabela atingir alguns milhões de registros, os primeiros sete caracteres serão redundantes e não trarão muita contribuição às buscas indexadas. Um índice reverso armazenaria estes códigos na ordem inversa, isto é, como “100008002-SO”, “200008002-SO”, “300008002-SO”, e assim por diante. Com isso, ele permite que o último caractere da chave, mais altamente variável, espalhe os valores entre as estruturas de dados do índice. Tal procedimento aumenta consideravelmente o desempenho no momento da busca. Índices baseados em função: é semelhante a um índice B-Tree padrão exceto que para armazena-se no índice, uma expressão no lugas da coluna ou colunas das tabelas. Um exemplo de utilidade desse tipo é índice é a criação de um índice para o endereço ou sobrenome de alguém que pode ser gravado com banco de dados em minúsculo ou maiúsculo, onde o indice terá uma expressão que transforma todos os nomes em maiúsculo: create index up_name on employee(upper(last_name)) Índice de mapa de bits: armazena uma string de bits para cada valor possível da coluna que está sendo indexada. O comprimentos dos bits é igual ao número de linhas na tabela que está sendo indexada. Esse índice tem como vantagens a economia de espaço e o tempo de resposta por que permite ao Oracle remover rapidamente potenciais linhas de uma consulta que contém múltiplos where bem antes da propria tabela precisar ser acessada. Ele é mais eficiente qdo utilizado em colundas com baixa cardinalidade. Visões Visões permitem que os usuários vejam uma apresentação personalizada dos dados. Uma visão tb é conhecida como um consulta armazenada – os detalhes da consulta adjacente são ocultadas do usuário. Através de visões podemos exibir dados conforme as autorizações/permissões do usuário, por exemplo, um empregado pode ser dados dos colegas menos seus salários, enquanto que o supervisor pode ver inclusive o salário. As visões tb podem ser usadas para impor segurança, por negar acesso de escrita de dados para determinos usuário que não necessitam de tal permissão. Uma visão regular não armazena dados, somente sua definição no dicionário de dados, e uma consulta sujbacente (tb armazenada no banco de dados) sempre é executada qdo esta é acessada. A visão materializada é um tipo de visão que armazena os resultados de sua consulta adjacente junto com a definição da visão com o intuito de acelerar as consultas. Ela é semelhante a visão regular, pois sua definição também fica no dicionário de dados, entretanto, ela ocupa espaço no segmento de dados mantendo os dados resultantes da consulta de base. A visão materializada pode ser usada para replicar uma cópia de leitura da tabela para um outro banco de dados. Para manter a visão atualizada o oracle usa um arquivo de log denominada log de visão materializada utilizado para atualizações incrementais da visão quando a tabela de base é alterada evitando que se faça uma atualização completa da visão por conta de todas as atuzalições feitas na tabela. Em um ambiente de dataware house, a visão materializada pode armazenar dados agregados em um group by rollup ou group by cube. O terceiro tipo visão é a visão de objeto, criado para facilitar a implementação de banco de dados orientados a objetos. Mas como muitas empresas ainda possuem sistemas legados baseados em banco de dados relacionais, elas não dispões de recursos ou mesmo tempo para um migração total para um banco de
  • 8. dados orientado a objetos. Para resolver este problema o Oracle permite criar uma visão de objeto de forma que facilite essa transição de relacional para objeto permitindo que as aplicações vejam os dados como objetos que possuem atributos e métodos, enquanto que os sistemas legados podem executar trabalhos em lote na tabela INVENTORY. As visões de objetos permitem simulas tipos abstratos de dados, identificadores de objetos – OID – e referências que um ambiente puramente OO de banco de dados ofereceria. Usuários e Esquemas O acesso ao banco de dados é feito por meio de usuários cadastrados, sendo sua autenticação feita pelo banco de dados em si, pelo sistema operacional ou pela rede (baseada em PKI – Public Key Infrastructure). Um usuário também pode possuir um esquema determinando se ele possui algum objeto no banco de dados como tabelas, índices, visões, etc. Um usuário pode conceder acesso aos seus objetos a outros usuário, limitado ao seu esquema, ou seja, só concede permissões aos objetos que possui. Perfis Como os recursos do banco de dados não são infinitos o DBA deve gerenciar a alocação de tais recursos, por meio de perfis que armazenam o quanto de recursos poderão ser usados (CPU, sessões concorrentes, etc) pelos usuários pertencentes ao perfil. Sequencias Número de 38 bits de comprimento gerados automaticamente pelo Oracle e são únicos, mas não necessariamente sequenciais. Se uma sequencia se perder por que qualquer motivo e não for usada, outros números subsequentes serão gerados. Sinônimos É simplesmente um alias para algum objeto do banco de dados (tabela, visões, índices, procedures, etc). O sinônimo não aloca espaço no banco de dados além de sua definição no dicionário de dados. Um sinônimo pode ser publico ou privado e, se for privado ele será definido no esquema do usuário, caso contrario ficará disponível para todos. PL/SQL Linguagem procedura do oracle para implementar extensões à DML quando esta não conseguir produzir resultados de maneira fácil. Procedures/Funções São blocos identificador de PL/SQL. Possuem três partes: 1. seção de declaração de variaveis 2. seção de executável 3. seção de tratamento de exceções A diferença em entre procedures e funções é que uma função retornará um valor único para o programa chamador enquanto que procedures apenas retornam um código de status. As procedures são compiladas e armazenada s no dicionário de dados uma vez e, quando mais de um usuário precisar chamar a procedure haverá uma cópia da mesma no pool compartilhado. Além disso, uma procedure reduz o consume de banda de rede do que várias instrução select e insert sendo executas em sequencia. Pacotes Pacotes PL/SQL agregam várias funções e procedimentos relacionados, compostos de duas partes:
  • 9. 1. especificação de pacote: onde são expostos os métodos e atributos 2. corpo do pacote: implementação dos métodos expostos na especificação de pacote. Os pacotes permitem que os objetos que referem a eles não precisam ser recompilados no caso de alguma mudança no pacote, ao contrário do que ocorre com procedures e funções independentes. Triggers É um tipo especial de bloco PL/SQL ou Java executado qdo um evento especificado acontece, como instruções DML em uma tabela ou visão, instruções DDL e mesmo eventos de banco de dados como start e stop do banco. Os trigger são muito úteis para ambiente distribuídos para simular um relacionamento de chave estrangeira entre tabelas residindo em banco de dados separados bem como, implementar regras de integridade complexas impossíveis de implementar com as restrições padrão oferecidas pelo oracle. Estruturas de Armazenamento Físico do Oracle O banco de dados Oracle utiliza algumas estruturas de armazenamento físico no disco para conter e gerencias os dados a partir de transações dos usuários. Alguns arquivos contém dados reais dos usuários: arquivos de dados, arquivos de log de redo, arquivos de log de redo em repositório de arquivos. Outros arquivos mantém outras informações como os arquivos de controle que guardam o estados dos objetos do banco de dados(tabelas, índices, visões, etc), arquivos de rastreamento e alerta, os quais armazenam informações de registro em log tanto para evento de rotina como para condições de erro que possam ocorrer no banco de dados. Abaixo temos a relação entre as estruturas físicas de armazenamento e a estruturas lógicas de armazenamento do Oracle. Arquivos de dados: cada banco de dados deve conter pelo menos um arquivo de dados. Um arquivo de dados no oracle corresponde a um arquivo físico do sistema de arquivos do sistema operacional. Cada arquivo é membro de somente um único espaço de tabelas. Tal arquivo pode ser expandido caso o DBA ache que isso seja necessário.
  • 10. Arquivos de Log de redo: sempre que dados são alterados nos banco de dados, tabela, indices, visões, etc, uma entrada no arquivo de log de redo é criada. Cada banco de dados possui pelo menos 2 que são preenchidos de maneira circular, ou seja, qdo um está totalmente preenchido o outro começa a ser utilizado como log. O arquivo de log de redo tem sua utilizadade no caso da instancia oracle falhar ou cair por qualquer motivo, pois ao ser reiniciado esse arquivo é utilizado para reestabelecer o estado do banco de dados antes da fallha numa operação denominada roll forward. Cabe ressaltar que multiplas cópias de um arquivo de log pode existir em discos físicos diferentes para assegurar alta disponibilidade e integridade dos dados, e ainda, esses arquivos podem ser multiplexados como o mesmo objetivo. Arquivos de Controle: cada banco de dados possui pelo meno um arquivo de controle, pois este armazena os metadados do banco de dados, ou seja, os dados sobre a estrutura física do próprio banco. Contém o nome do banco de dados, qdo ele foi criado, os nomes e as localizações de todos os arquivos de dados e arquivos de log de redo. Qualquer alteração feita no banco de dados é imediatamente refletia nesse arquivo. Como ele é crucial para a integridade do banco de dados, ele costuma ser multiplexado, ou seja, o oracle mantém várias cópias dele em diferentes partes do disco elegendo um como primário. Além disso, o Oracle permite fazer backup do arquivo para o caso de alguma catastrofe acontecer, ser possível de recriar o arquivo de controle. alter database backup controlfile to trace Arquivos de log em repositório: o oracle pode operar em dois modos archivelog e noarchivelog. No modo noarchivelog, o arquivo de log de redo é escrito de maneira circular como dito ateriormente. Se uma instância falhar, as transações serão reiniciadas no próximo restart e o arquivo de log será usado para executar as transações que não conseguiram terminar. Mas, se o disco falhar as informações serão perdidas. Entretanto, se o oracle estiver funcioando em archivelog, os arquivos de log, qdo totalmente preenchidos, serão guardados em algum destino ou múltiplos destinos e, em caso de falha no disco, eles podem ser resgatados do backup e utilizados para reconstruir o estado do banco de dados no momento da falha. Este recurso é crítico para ambientes de alta disponibilidade do oracle conhecido de data guard. Arquivos de log de alerta: arquivos usados para armazenar mensagem de alerta ou no caso de sessões de usuário em background, como trace logs. Além dos aquivos mencionados, existem os aquivos de backup, arquivos de senha, de inicalização Multiplexação de arquivos: multiplexar os arquivos de log minimiza o risco de perda de dados devidos a falhas em disco físico, podendo ser automatizada utilizando-se uma instância oracle chamada ASM – Automatic Storage Management. Além disso, pode-se fazer a multiplexação de forma manual, sem uma solução ASM ou RAID, por meio de alguns parâmetros de inicialização da instância oracle.
  • 11. Estruturas de Memória Oracle O Oracle utiliza a memória física do servidor para armazenar várias coisas para uma instância oracle:o próprio código executaável oracle, informações de sessão, processos associados com o banco de dados e compartilhamento de informações entre processos, tais como bloqueio em objetos de banco de dados. As estruturas de memórias possuem, também instruções SQL de usuário e que serão armazenadas em disco, como blocos de dados em segmentos de banco de dados e informações sobre transações completadas no banco de dados. A área de memória alocada pelo oracle se chama SGA – System Global Area. Existe també a chamada PGA – Program Global Area – que é privada para cada servidor e processo em background; um PGA é alocado a cada processo. SGA: é um grupo de estruturas de memória compartilhadas para uma instância oracle, compartilhada pelos usuários da instância do banco de dados. Qdo a instância é iniciada a memória é alocada para a SGA baseada nos valores especificados no arquivo de inicalização ou diretamento no software oracle. Cache de Buffer: o cache de buffer de banco de dados contem os blocos de dados em disco recém-lidos para devido a uma instrução select, ou que contém dados alterados ou adicionados via uma instrução DML. Pool compartilhado: o pool compatilhado possui dois subcaches: o cache de biblioteca e o cache de dicionário de dados. O cache de biblioteca contém informações sobre instruções SQL e PL/SQL executadas no banco de dados que podem ser compartilhadas entre os usuário dos banco de dados, visto que potencialmente eles podem acessar os mesmos dados e executar as mesmas consultas. Já o cache de dicionário de dados é uma coleção de tabelas de banco de dados, que pertencem aos esquemas SYS e SYSTEM que contêm os metadados do banco de dados, suas estruturas, e os privilégios e papéis dos usuários do banco de dados. Além disso, esse cache contém blocos armazenando o dicionário de dados que são utilizados para ajudar no processamento de instruções DML. Buffer de log de redo: contém as alterações mais recentes para os blocos de dados nos arquivos de dados. Qdo 1/3 do buffer de log estiver cheio ou a cada 3 segundos os registros de log de redo são
  • 12. gravados no arquivos de log. Uma transação não é considerada completada se as entradas de log não tenham sido gravadas completadamente nos arquivos de log de redo. Large Pool: é uma área opcional da SGA, utilizada para transações que interagem com mais de um banco de dados, buffers de mensagem para processos que realizam consultas paralelas e operações de restauração e backup paralelo (RMAN) Java Pool: utilizado pela JVM Oracle para todos os códigos e dados java dentro de um sessão de usuário. Streams Pool: contém estruturas dados e de controle que suportam o recurso Oracle Streams, que geerencia o compartilhamento de dados e eventos em ambiente distribuído. Program Global Area: memória alocada e privada para um processo, que depende da configuração de conexão de bando de dados, que pode ser conexão compartilhada ou conexão privada. Se for compartilhada vários usuários usuaram a mesma conexão para o banco de dados, melhorando o uso de memória mas diminuindo o tempo de resposta. Já a conexão privada é o contrário, sendo recomendado o uso e ambientes dedicados. Área de código de Software: armazenam os arquivos executáveis oracle que estão em execução por parte da instância. São áreas estáticas de somente leitura e modificadas apenas por uma nova distribuição de software. De acordo com os parêmtros de inicialização, esses arquivos podem ser compartilhados entre vários usuário ou não, claro que isso reflete no uso de memória do servidor. Processos em segundo plano Quando uma instância oracle é iniciada, múltiplos processos em background também são iniciados. Um processo em background é um código rodando em background projetado para um tarefa específica, conforme listado abaixo e mostrado na figura.
  • 13. SMON: System monitor: no caso de queda do sistema é responsável por ler os arquivos de log de redo aplicando as entradas lidas no banco de dados para restaurar o banco de dados no momento da falha ocorrida. PMON: Process Monitor: se uma conexão do usuário for descartada por qualquer motivo ele realiza o trabalho de faxina: • reverte a transação que estava em progresso no caso de ter havido falha • marca blocos da transação como disponíveis no cache de buffer • remove os locks sobre as linhas afetadas na tabela • remo o ID do processo que foi desconectado da lista de processos ativos DBWn: Database Write, grava os blocos de dados novos ou alterados na cache de buffer de nos arquivos de dados, utilizando um algoritmo de LRU. Até 20 processos DBWn podem ser iniciados. LGWr: log writer: responsável pelo gerenciamento do buffer de log de redo. É um dos processos mais ativos em uma instância que tem atividade DML intensa. Uma transação não é considerada bem sucedida se o LGWr não escrever todas as entradas do buffer de log no aquivo de log de redo, incluindo o registro de confirmação. Inclusive, os buffers sujos no cache de buffers não podem ser gravados nos arquivos de dados pelo DBWn até que o LGWr tenha gravado as informações de redo. ARCn: Archive process: se o banco de dados estivem em modo ARCHIVELOG, então este processo armazena os logs de redo em um ou mais destinos (diretórios, dispositivos ou endereços de rede) sempre que um arquivo de redo esteja totalmente preenchido e um novo acabou de começar a ser usado. CKPT: checkpoint process: processo de ponto de verificação que ajuda a diminuir a quantidade de tempo necessária para recuperção de instância. RECO: Recovery process: trata falhas de transações distribuídas. Se uma tabela A no banco de dados AA for alterada juntamente com uma tabela B no banco BB e ocorrer uma falha de conexão antes de BB ser atualizado o RECO reverterá a transação.