A Cláusula WITH READ ONLY

Propaganda
Trabalho de Cliente e Servidor
ORACLE
Professora:
-
Elvira Uchôa
Componentes:
-
Nome: Fabiano
Matrícula:
Nome: Gustavo Scaffa Brum
Matrícula: 9824743-7
Nome: João Luis Silva Bacha
Matrícula: 9824451-5
Índice
1) Projeto a BD - Distribuído
a) Suporte a fragmentação
b) Mecanismos de replicação
- Quiescing Master Groups
- Snapshot Replication
- Read-Only Snapshots
- Updateable Snapshots
- Snapshot Refresh
- Snapshot Log
- Deployment Templates
- Online and Offline Instantiation
- Multimaster and Snapshot Hybrid
- Resolução de Conflitos
2) Controle do Ambiente Distribuído
a) Gerenciamento de view
- A Cláusula WITH CHECK OPTION
- A Cláusula WITH READ ONLY
- Visões Materializadas
b) Controle de segurança
- Domínio de Segurança
- Profiles
- Privilégios
- Roles
- Criptografia
c) Controle de Integridade
- Integridade Referencial entre as visões materializadas
3) Transparência
a) Transparência de distribuição (rede)
b) Transparência de replicação
c) Transparência de fragmentação
4) Processamento Distribuído de Consulta
a) Suporte ao processamento distribuído de consulta
b) Tipo de otimizador de consulta utilizado
- Cost-Based Optimizer (CBO)
- Caminhos de acesso para o RBO
- Full Table Scans
- Sample Table Scans
- Table Access by Rowid
- Cluster Scans
- Hash Scans
- Index Scans
- Rule-Based Optimizer (RBO)
3
3
3
5
5
6
7
8
8
8
8
9
10
11
11
11
12
12
13
13
14
14
16
16
16
17
17
17
18
19
19
19
19
19
20
20
21
21
21
21
22
22
2
- Caminhos de acesso para o RBO
- Rank e caminhos de acesso
c) Mecanismo de otimização de consulta distribuída
5) Processamento Distribuído de Transação
a) Suporte ao Processamento Distribuído de Transação
- Two-Phase Commit(2PC)
b) Protocolo de Recuperação
6) Suporte a acesso a dados de SGBD Heterogêneo
7) Bibliografia
22
22
26
27
27
27
28
28
30
1) Projeto de BD – Distribuído
a) Suporte à fragmentação ( horizontal, vertical, híbrida ):
O Oracle não implementa qualquer tipo de fragmentação. É sugerido a criação
VIEWS.
b) Mecanismos de Replicação:
O Oracle implementa três mecanismos de replicação:
- Multimaster Replication ( conhecido também como peer-to-peer ou nway replication):
Autoriza vários sites, agindo como pares, para gerenciar grupos de
objetos replicados do banco de dados. Cada site é um site master e nessa
configuração, as aplicações podem atualizar qualquer tabela replicada em
qualquer site.
O servidor Oracle opera como um site master trabalhando para
convergir dados de todas as tabelas replicadas e assegurar consistência para
as transações globais e integridade de dados.
A maneira mais comum de implementar é através da Replicação
Assíncrona ( mas também possível fazê-lo usando replicação síncrona e
procedural ). Quando se usa a replicação assíncrona, o update em uma tabela
é guardado em uma “fila” de transações no site master, onde a mudança
3
ocorreu. Essas mudanças são chamadas de transações adiadas ( deferred
transactions ). As transações adiadas são propagadas para os outros sites
masters em intervalos regulares sendo possível controlar o seus tempos.
O problema de se usar replicação assíncrona é a ocorrência de
conflitos, caso valores de uma mesma tupla sejam modificados ao mesmo
tempo em sites masters diferentes, mas técnicas podem ser usadas para evitar
este problema. Caso ele aconteça, o Oracle dispõe de mecanismos para
resolvê-los.
4
Na replicação síncrona, as mudanças feitas no site master ocorrem
imediatamente em todos sites masters participantes. Se por algum motivo o
site máster não conseguir realizar a transação, essa é desfeita em todos os
sites master ( rollback ). Quando um conflito ocorre requer muita agilidade e
maciez para resolver o problema. Se a conexão com um dos site master não
for possível, por exemplo, nenhuma transação pode ser completada até que
essa seja re-estabelecida .
Aplicações processadas em modo batch podem realizar mudanças em
uma grande quantidade de dados com uma única transação. Nesse caso,
típicas replicações estarão na rede com muitas mudanças de dados. Para
resolver esse problema, essas aplicações podem usar a replicação
procedural para replicar simples chamadas a stored procedure para
convergir a replica dos dados. A replicação procedural replica somente a
chamada para a stored procedure que a aplicação usa para realizar um update
na tabela, não replicando a modificação dos dados. Para ser usada, é
necessário replicar as packages que modificam dados no sistema para todos
os sites, depois disso é preciso gerar o wrapper para a package em cada
site.Quando uma aplicação chama essa packaged procedure no site local para
modificar dados, o wrapper assegura que a chamada é feita para a mesma
packaged procedure em todos os outros sites. A replicação procedural pode
ocorrer assíncronamente ou síncronamente. O conflito nesse caso é quase
nulo porque como essa replicação é usada para bancos de dados modificados
somente com muitas operações batch essas transações não seriam para o
mesmo dado.
- Quiescing Master Groups
Às vezes é necessário interromper todas as atividades de replicação
em um grupo de masters, para realizar certas tarefas de administração no
mesmo. Por exemplo, as atividades de replicação são paradas para editar as
Data Definition Language ( Create, Alter, Drop ) em qualquer tabela do
grupo. O nome que se dá quando se pára todas as replicações é quiescing.
Quando o grupo de masters é quiesced, usuários não podem realizar Data
Manipulation Language ( Select, Insert, Update, Delete ) em qualquer dos
objetos do grupo de masters.
- Snapshot Replication :
O snapshot contém a cópia completa ou parcial de uma tabela master
de um ponto do tempo. O snapshot pode ser read-only ou updateable.
Todos snapshots apresentam os seguintes benefícios:
 Acesso local, o que melhora o tempo de resposta e torna os
dados mais acessíveis.

Diminui as queries para o site master, porque acessam os
dados locais ( snapshot local ).

Aumenta a segurança dos dados, autorizando a réplica de
apenas algumas tabelas do master.
5
- Read-Only Snapshots
Na configuração básica, o snapshots pode prover o acesso read-only
nas tabelas originadas do site master. Aplicações podem realizar acessos a
dados dos snapshots read-only para evitar congestionamentos na rede. No
entanto, as aplicações precisam acessar o site master para realizarem
qualquer alteração ( Update ). As tabelas masters do snapshots read-only não
precisam pertencer ao grupo master.
Snapshots read-only permitem os seguintes benefícios:
 Eliminam a possibilidade de conflito porque não podem ser
atualizados.
 Suportam snapshots complexos. Exemplos de snapshots
complexos são aqueles que contêm set operations (UNION,
INTERSECT, ou MINUS ) ou a clausula CONNECT BY.
6
- Updateable Snapshots
Em uma configuração mais avançada, pode ser criado um updateable
snapshot que permite usuários realizarem insert, update, e delete tuplas da
própria tabela master. O updateable snapshot pode também conter só
algumas tabelas. Updateable snapshots são baseados em tabelas do site
master que apóiam a replicação. O fato é que updateable snapshots precisam
ser uma parte do snapshot group que é baseado no grupo de masters do site
master.
Updateable snapshots têm as seguintes propriedades:

São sempre baseados em tabelas simples.

Podem ser atualizado.

O Oracle propaga as mudanças feitas em um updateable
snapshot para as tabelas no master. Se necessário, atualiza as
tabelas do master e propaga para os outros sites masters.

O Oracle pode atualizar o updateable snapshot como parte da
atualização do grupo da mesma maneira que acontece no
read-only snapshots.
Updateable snapshots propiciam dos seguintes benefícios:

Deixam o usuário fazer consultas e atualizações nas réplicas
locais mesmo quando estão desconectados do site master.

Requerem menos recursos que o multimaster replication,
ainda suportando atualizações aos dados.
7
- Snapshot Refresh
Para assegurar que o snapshot é consistente com a master table, é
necessário atualiza-lo o snapshot periodicamente. O Oracle possui três
métodos para atualizar os snapshots:

Fast refresh: usa os snapshot logs para atualizar só as tuplas
que tiveram alteração desde o ultimo refresh.

Complete refresh: atualiza todo o snapshot.

Force refresh realiza o fast refresh quando possível. Quando
não é possível fazê-lo, realiza o complete refresh.
Quando é importante para os snapshots serem transacionalmente
consistentes uns com os outros, pode-se organizá-los em refresh groups.
Atualizando o refresh group, assegura-se que os dados em todos os
snapshots do refresh group estão consistentes transacionalmente naquele
momento. Um snapshot no refresh group ainda pode ser atualizado
individualmente, mas com isso anula os benefícios do refresh group porque
atualizando individualmente o snapshot não atualiza os outros snapshots do
refresh group.
- Snapshot Log
Snapshot log é uma tabela que grava todas as mudanças referentes à
Data Manipulation Language ( Select, Insert, Update, Delete ) para uma
master table. Um snapshot log é associado a uma única master table, e cada
master table tem somente um snapshot log. Um fast refresh de um snapshot é
possível somente se o snapshot da master table tem um snapshot log.
Quando um snapshot realizar um fast refresh, as entradas do snapshot
associadas ao snapshot log que apareceram desde de que ele foi atualizado
são aplicadas no snapshot.
- Deployment Templates
Deployment templates simplificam a tarefa de guardar e manter
vários sites snapshots remotos. Usando deployment templates, pode-se
definir uma coleção de snapshot definidos num master site, e também usar
parâmetros na definição. Assim os snapshots podem ser customizados para
usuários individuais ou grupos específicos.
Por exemplo, deve-se criar um formulário para vendas e outro para
pesquisa. Nesse caso, o valor do parâmetro deve ser território de vendas ou
nível de suporte ao consumidor. Quando um usuário remoto conecta ao
master site, este pode selecionar uma lista de formulários disponíveis.
Quando instancia um formulário, os snapshots apropriados são criados e
populados no site remoto. Os valores apropriados aos parâmetros podem
tanto ser fornecidos pelo usuário remoto quanto ser tomado da tabela
mantida do site master.
8
- Online and Offline Instantiation
Quando um usuário instancia um formulário em um site snapshot, o
objeto DDL (por exemplo, CREATE SNAPSHOT... ou CREATE TABLE...)
é executado para criar o esquema apropriado para o site snapshot, e este
populado com os dados compatíveis.
Usuários podem instanciar formulários enquanto conectados ao site
master através da rede (online instantiation), ou enquanto desconectado dele
(offline instantiation).
Offline instantiation é bastante usado para diminuir o trabalho do
servidor durante os períodos de pico e para reduzir a quantidade de conexões
remotas. Para instanciar um formulário offline, junta-se o formulário e os
dados requeridos em algum tipo de mídia de armazenamento, como fita, CDROM, e assim por diante. Então, em vez de colher o dado do site master,
usuários colhem da mídia de armazenamento que contem o formulário e
dados.
- Multimaster and Snapshot Hybrid:
Multimaster replication e snapshots podem ser configurados juntos (
hybrid ) ou "misturados" para atender a diferentes requisições de aplicações.
Na “mistura” dessas configurações podem aparecer vários sites masters e
múltiplos snapshot sites de cada master.
Por exemplo, multimaster (or n-way) replication entre does masters
pode suportar full-table replication entre os bancos de dados que abrengem
duas regiões geográficas. Snapshots podem ser definidos num masters para
replicar full tables ou table subsets para sites de cada região.
9
A diferença chave entre snapshots e replicated masters são as seguintes:

Replicated masters têm que conter todos os dados da tabela
que foi replicada, já o snapshots podem replicar sub-conjuntos
da tabela master.

Multimaster replication permite replicar mudanças para cada
transação assim que essas ocorram. Snapshot refreshes são
orientados, propagando mudanças para múltiplas transações
com mais eficiência, operações batch-oriented, mas com
intervalos menos freqüentes.

Sites masters detectam e resolvem os conflitos que ocorrem
pelas mudanças, ao mesmo tempo, nas múltiplas cópias.
Resolução de Conflitos:
Quando o Oracle replica tabelas, qualquer Data Manipulation Language (
Select, Insert, Update, Delete ) que possa causar conflito de dados é
automaticamente detectado pelo servidor Oracle no site master. Isso em qualquer
replicação de sites ( master ou snapshot ). Sites snapshots não conseguem detectar
ou resolver nenhum conflito de dados, qualquer desses introduzidos pelo site
snapshot são detectados e resolvidos pelo site master do snapshot.
Por exemplo, se o seguinte master group é agendado para propagar
mudanças de uma em uma hora, considere o que acontece quando:
Time
Master Site A
Master Site B
Status
8:00
Propago Mudanças para Propago Mudanças para Dados convergidos.
AM
o Master Site B
8:15
Atualizo Linha 1
o Master Site A
AM
8:30
Atualizo Linha 1
AM
9:00
Propago Mudanças para Propago Mudanças para Conflito Detectado na
AM
Master Site B
Master Site A
Linha 1
10
Se o tempo entre as propagações é um intervalo considerado e dois ou mais
sites atualizam a mesma linha durante esse intervalo, ocorre um conflito.
Além do conflito de atualizar existe o de insert e de delete. Como no caso do
exemplo, o conflito ocorre caso aconteça no mesmo intervalo.

Conflito de Update: dois ou mais updates são realizados para a mesma
linhaantes que o processo de update possa ser propagado para os outros
sites.

Conflito de Uniqueness: um insert é realizado em dois ou mais sites e a
chave primária ( ou outro da unique columns ) para cada insert contem o
mesmo valor, ou um update num site que modifica a chave primária ( ou
outro da unique columns ), que contenha o masmo valor já inserido em
um outro site.

Conflito de Delete: uma linha é deletada em um site e um update ocorre
em outro site, isso pode resultar em um update a uma linha que nao
existe, ou a mesma linha é deletada no mesmo intervlo de tempo em
mais de um site.
Quando um conflito de dados é detectado, as seguintes ações ocorrem:

O método de resolução de conflitos tenta resolver o conflito.

Se o conflito não for resolvido, esse é guardado em uma fila de erros
no site onde o correu.
Se o conflito é guardado em uma fila de erros, o administrador do bando de
dados é responsável por resolver manualmente esse conflito.
Se for escolhido para usar o Oracle ou definido pelo usuário o método de
resolução de conflitos, o servidor Oracle automaticamente tenta resolver o conflito.
O método de resolução de conflito, que são implementados, devem estar de acordo
com a regra de negócio definidas para o método de replicação e devem trabalhar
para garantir a consistência dos dados.
2) Controle do Ambiente Distribuído
a) Gerenciamento de view
As views podem ser de dois tipos: Simples e Complexas.
O tipo simples e composto por apenas um SELECT, utiliza apenas uma tabela e
suas colunas são formadas por colunas da tabela original, sem cálculos ou funções.
A view complexa é aquela onde há um join entre tabelas na subquery.
Nota:
1. Com uma VIEW simples serra possível executarmos comandos INSERT,
UPDATE e DELETE(alem do SELECT);
11
2. A manipulação dos dados através de uma VIEW não desabilita as constraints
das tabelas as quais os mesmos se referem;
3. Cada coluna definida para VIEWs deve ter um nome de coluna valido;
4. Caso seja uma formula, deve possuir um alias.
A Cláusula WITH CHECK OPTION
Podemos garantir que os dados inseridos ou atualizados numa tabela através de uma
view, poderão ser visualizados através da própria view com esta opção.
Exemplo:
Criando uma view
CREATE OR REPLACE VIEW ALUNOS_V_UF
AS SELECT *
FROM ALUNOS
WHERE estado = `RJ`
WITH CHECK OPTION CONSTRAINT ALUNOS_V_UK_CK;
Atualizando a view ALUNOS_V_UF
UPDATE ALUNOS_V_UF
SET estado = `BA`;
Nota:
Uma mensagem de erro serra exibida pois estamos tentando, através da view que
somente visualiza o estado `RJ`, altera-lo para `BA`, o que certamente impediria o acesso a
tabela pela view, pois esta tentaria construir a query restringindo pelo `RJ`.
A Cláusula WITH READ ONLY
Podemos impedir operações DML sobre view, criando-a com a opção WITH READ
ONLY, o que a restringe apenas a operações de leitura.
Exemplo:
Criando uma view
CREATE OR REPLACE VIEW ALUNOS_V_UF
AS SELECT *
FROM ALUNOS
WHERE estado = `RJ`
WITH READ ONLY;
Deletando dados da view ALUNOS_V_UF
DELETE FROM ALUNOS_V_UF;
12
Nota:
A view esta protegida para operações DML, portanto causara erro qualquer tentativa
de inserção, atualização ou deleção.
Visões Materializadas
São usadas para agregar dados e melhorar o desempenho da consulta. Uma visão
materializada é idêntica em estrutura a um snapshot – ela é uma tabela física que contem os
dados que normalmente seriam lidos com uma visão. Quando cria uma visão materializada,
você especifica a consulta base da visão, bem como uma programação para as atualizações
de seus dados. Em seguida, você pode indexar a visão materializada para melhorar o
desempenho das consultas feitas nela. Como resultado, você pode fornecer dados aos
usuários no formato que eles precisam e indexados adequadamente.
As visões materializadas podem ser usadas dinamicamente pelo otimizador para
alterar os caminhos de execução das consultas. Esse recurso, chamado regravação de
consulta, permite que o otimizador use uma visão materializada no lugar da tabela
consultada pela visão materializada, mesmo que a visão materializada não seja nomeada na
consulta. Por exemplo, se tiver uma tabela SALES por região. Se um usuário for consultar a
tabela SALES para obter a soma dos dados de SALES para uma região, o Oracle pode
redirecionar essa consulta para usar a sua visão materializada no lugar da tabela SALES.
Como resultado, você pode reduzir o numero de acessos a sua tabela maior , melhorando o
desempenho do sistema.
Exemplo:
Criando uma visão materializada
CREATE MATERIALIZED VIEW SALES_MONTH_MV
TABLESPACE AGG_DATA
REFRESH COMPLETE
START WITH SYSDATE
NEXT SYSDATE + 1
ENABLE QUERY REWRITE /* permite que o otimizador redirecione as consultas a
sales para sales_month_mv se for apropriado */
AS
SELECT SALES.Sales_Month, PRODUCT.Product_Type, CUSTOMER.Customer_Type,
SUM(SALES.Amount)
FROM SALES, PRODUCT, CUSTOMER
WHERE SALES.Product_ID = PRODUCT.Product_ID
And SALES.Customer_ID = CUSTOMER.Customer_ID
GROUP BY SALES.Sales_Month, PRODUCT.Product_Type,
CUSTOMER.Customer_Type;
13
b) Controle de segurança
Um usuário e o proprietário do que chamamos de “schema”, ou seja, um conjunto
de objetos pertencentes a este usuário. Um schema Oracle esta intimamente ligado a um
usuário ou conta, conforme preferimos chamar.
O schema só começa a ter sentido a medida que o usuário possui objetos próprios.
Caso contrário, a este usuário serão repassados direitos de acessos e operações
sobre objetos de outro schema.
Domínio de Segurança
O banco de dados Oracle possui um conjunto de objetos que relacionam-se com os
seus usuários que tem como objetivo manter o gerenciamento de acesso e a segurança dos
dados nele contido.
Um domínio da segurança pode estar associado a um determinado schema e pode
ser composto de objetos como privilégios, roles, profiles, quotas e resource limits.
Objetos
Privilégios
Role
Profiles
Quotas
Resource Limit
Descrição
São regras de segurança aplicadas a um determinado
usuário.
Objeto criado no banco de dados e que pode ser
associado a um determinado schema. Uma role e um
agrupamento de privilégios ou outras roles e é
utilizada para facilitar a administração de privilégios
em um banco de dados.
É um conjunto que contém uma certa quantidade de
limites para recursos do sistema, utilizado para
facilitar a administração destes. Um profile também
pode ser associado a um usuário.
São objetos associados a um usuário e que são
utilizados para controlar a quantidade de espaço
utilizado por este em uma determinada tablespace.
São limites impostos a determinados recursos do
sistema que são associados com um determinado
usuário. Um resource limit pode ser associado a um
profile.
Profiles
Um profile constitui um conjunto de limites sobre os recursos do banco de dados.
Podemos utilizar profiles para limitar os recursos disponíveis ao usuário por chamada de
procedimento ou por sessão como um todo.
Por exemplo, quando o usuário excede um limite tipo CONNECT_TIME ou
IDLE_TIME, o Oracle faz um rollback na transação corrente e termina sua sessão, caso não
seja especificado o usuário estará associado ao profile default, que não impõe limites de
recurso(UNLIMITED).
14
Nota:
Para que os limites de recurso sejam controlados pelo Oracle, devemos habilitar o
parâmetro RESOURCE_LIMIT = TRUE, que terá validade a nível de instancia, ou então,
através de ALTER SYSTEM SET RESOURCE_LIMIT = TRUE|FALSE.
Os limites que envolvem senhas estão sempre habilitados, independente do valor do
parâmetro acima.
Privilégios
Existem dois tipos de privilégios num banco de dados Oracle. Privilégios de sistema
e privilégios de objetos.
Privilégios de sistema permitem conectar-se ao banco de dados, utilizar os recurso
que estão disponíveis, criar, alterar ou remover objetos, etc. Geralmente só pode ser
concedidos aos usuários por um DBA, ou algum usuário que tenha privilégios para tal.
Exemplo:
GRANT <PRIVILEGIO> [, <PRIVILEGIO> …]
TO <USUARIO> [, <USUARIO> …] | <ROLE> [,<ROLE> …] | PUBLIC
[WITH ADMIN OPTION]
<PRIVILEGIO>
<USUARIO>
<ROLE>
PUBLIC
WITH ADMIN OPTION
Tipo de privilegio de sistema do Oracle
Usuário que recebera os direitos
Role que recebera os direitos
Todos os usuário cadastrados no Oracle
Usuário recebedor do privilegio poderá
repassá-lo igualmente a outro usuário
qualquer
Privilégios de objetos podem ser cedidos por qualquer usuário que possua objetos
no seu schema ou tenha privilégios para faze-lo.
Exemplo:
GRANT <PRIVILEGIO> [, ...] | ALL [(<COLUNA>)] ON [<SCHEMA>].<OBJETO>
TO <USUARIO> [, …] | <ROLE> [, …] | PUBLIC
[WITH GRANT OPTION]
<PRIVILEGIO>
<COLUNA>
Tipo de privilegio de objeto do Oracle como
permissão para executar comandos tipo:
select, update, delete, insert ou todos.
Privilégios do tipo insert ou update podem
restringir o acesso a determinadas colunas.
No caso do insert, todas as colunas
15
<SCHEMA>
<OBJETO>
<USUARIO>
<ROLE>
PUBLIC
WITH GRANT OPTION
obrigatórias devem ser especificadas.
Schema que pertence o objeto, default e o
schema do usuário que esta cedendo os
direitos.
Nome do objeto que serra cedido direitos
Usuário que recebera os direitos
Role que recebera os direitos
Todos os usuário cadastrados no Oracle
Permite ao <USUARIO> recebedor dos
direitos, repassa-los a outros usuários. Caso
o dono original revogue estes direitos, todos
que receberam em cascata, também
perderão.
Para remover um privilegio dado utilizamos o comando REVOKE, independente do
tipo de privilegio, seja de sistema ou de objeto.
Exemplo:
REVOKE <PRIVILEGIO> [, <PRIVILEGIO> ...]
FROM <USUARIO> [, <USUARIO> ...] | <ROLE> [, <ROLE>] | PUBLIC; (SISTEMA)
REVOKE (<PRIVILEGIO> [, <PRIVILEGIO> ...] | ALL) ON [<SCHEMA>].<OBJETO>
FROM (<USUARIO> [, <USUARIO> …] | <ROLE> [, <ROLE>] | PUBLIC)
[CASCADE CONSTRAINTS];(OBJETOS)
Roles
Conjuntos de privilégios que podem ser atribuídos ou retirados de uma só vez para
os devidos usuários, ou outras roles. O Oracle possui roles já definidas como: DBA,
CONNECT E RESOURCE. A DBA e atribuída a usuários administradores, traz consigo
todos os privilégios do sistema. Já a CONNECT E RESOURCE são roles típicas de
usuários desenvolvedores do ambiente Oracle.
Exemplo:
CREATE ROLE <NOME_ROLE>
[IDENTIFIED BY (<PASSWORD> | <EXTERNALLY>) | NOT IDENTIFIED];
Criptografia
O Oracle permite a criptografia de senhas antes de transmiti-las. Para ativar a
criptografia de senha e definido os seguinte parâmetros:
Para maquinas clientes o parâmetro ORA_ENCRYPT_LOGIN no arquivo
sqlnet.ora deve ser TRUE.
Para maquinas servidoras o parâmetro DBLINK_ENCRYPT_LOGIN no arquivo
init.ora deve ser TRUE.
16
Após esses parâmetros estarem definidos as senhas serão enviadas do cliente para o
servidor e de um servidor para o outro de forma criptografada.
A senha criptografada e armazenada no dicionário de dados, a mesma senha para
contas diferentes resultara em criptografias diferentes. Para todas as senhas, o valor
criptografado tem 16 caracteres de comprimento e contem números e letras maiúsculas.
Quando uma senha e inserida durante uma validação de usuário, aquela senha e
criptografada e a criptografia gerada e comparada com aquela do dicionário de dados
daquela conta. Se elas coincidirem, a senha esta correta e a autorização e bem-sucedida.
c) Controle de Integridade
Integridade Referencial entre as visões materializadas
A integridade relacional entre duas tabelas relacionadas, sendo que ambas tem
visões materializadas simples que se baseiam nelas, pode não ser implantada em suas
visões materializadas. Se as tabelas forem atualizadas em momentos diferentes ou se as
transações ocorrerem nas tabelas master durante a atualização, e possível que as visões
materializadas dessas tabelas não reflitam a integridade referencial das tabelas master.
Também pode acontecer uma falha do banco de dados ou servidor durante a
execução do procedimento de atualização, REFRESH_ALL, atualização das visões
materializadas.
Como alternativa, criação de grupos de atualização. A finalidade e coordenar as
programações de atualização de seus membros. As visões materializadas cujas tabelas
master tem relacionamento com outras tabelas master são boas candidatas para entrarem no
grupo de atualização.
A coordenação das programações de atualização das visos materializadas também
manterá a integridade referencial das tabelas master na visão materializada. Se não forem
usados os grupos de atualização, os dados de visões materializadas podem ser
inconsistentes com relação a integridade referencial das tabelas master.
3) Transparência
a) Transparência de Distribuição (rede)
Não existe no Oracle nem na maioria dos SGBDD’s. É implementada através do
uso de sinônimos pelos DBA’s, que apesar de simular essa transparência não é realmente
uma transparência de distribuição, onde é feita uma transparência de localização..
É implementada através da colocação das quatro partes do nome – o host, a
instância, o proprietário e o nome – resultando em um nome global do objeto. Para acessa
ruma tabela remota é necessário que o nome global dessa tabela seja conhecido. Essa
transparência de localização tem como objetivo tornar as três primeiras partes do nome do
objeto global – host, instância e esquema – transparentes para o usuário. Exata três
primeiras partes do objeto global são especificadas através dos links de banco de dados, de
17
modo que todo serviço para atingir a transparência de localização deve começar nesse
ponto. Logo abaixo segue um exempl de de link de BD típico:
create public database link HR_LINK
connect to HR identified by PUFFINSTUFF
using ‘hq’;
Usando um nome de serviço (hq), os nomes de host são mantidos transparentes.
Exemplo de descrição do serviço hq:
hq = (DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = HQ)
(PORT = 1521))
(CONNECT DATA =
(SID = LOC))))
As duas linhas em negrito dessa listagem preenchem as duas partes que faltam do
nome do objeto global: Quando o nome do serviço HQ é usado, o nome do host é HQ e o
nome da instância é LOC.
Para resolver a transparência da parte do esquema do nome do objeto global, você
pode modificar a sintaxe de link de banco de dados, como no exemplo abaixo:
create public database link HR_LINK
connect to current_user
using ‘hq’;
Este link usa a cláusula connect to current_user. Ele usará aquilo que é conhecido
como conexão de usuário conectado, enauqnto enquanto o exemplo anterior era uma
conexão de usuário fixo. Veja abiaixo um exemplo desse link em uso:
select * from EMPLOYEE@HR_LINK;
Quando HR_LINK é usado, o banco de dados resolve o nome do objeto global da
seguinte maneira:
1. Pesquisa no arquivo o tnsnames.ora local para determinar o nome de host
adequado, a porta e o nome da instância.
2. Verifica o link de banco de dados e procura uma especificação connect to. Se a
cláusula connect to current_user for encontrada, ele tenta se conectar ao banco de dados
especificado usando o nome de usuário e a senha do usuário conectado.
3. Pesquisa a cláusula from da consulta e procura o nome do objeto.
b) Transparência de Replicação
18
Havendo a encessidade de replicação de dados e estas serem relativamente
limitadas, pode-se fazer o uso de triggers do banco de dados para replicar os dados de uma
tabela para outra, porém, esse método é usado quando o único tipo de dados enviado par ao
banco de dados remoto é uma operação de insert ou delete. O código necessário para dar
suporte às transações de update geralmente é muito mais complexo do que uma visão
materializada comparável.
Os triggers de banco de dados são executados quando ocorrem ações específicas.
Eles podem ser executados para cada linha de uma transação, para toda uma transação
como uma unidade ou quando ocorrem eventos no nível do sistema. Ao lidar com a
replicação de dados, preocupa-se com os triggers que afetam cada linha de dados.
Mas, antes de criar um trigger relacionado à replicação, deve-se criar um link de
banco de dados que o trogger irá usar. Assim, o link é criado no banco de dados que tem a
propriedade dos dados e qe pode ser acessado pelo proprietário da tabela que está sendo
replicada.
create public database link TRIGGER_LINK
connect to current_user
using ‘remote1’;
Esse link (TRIGGER_LINK) usa um nome de serviço (remote1) para especificar a
conexão com um BD remoto. Ele tenta fazer o login no BD remote 1 usando o mesmo
nome do usuário e senha de conta que chama o link.
c) Transparência de Fragmentação
Como visto anteriormente – “Projeto de BD – Distribuído”, 1.a – o Oracle não
implementa fragmentação, só sendo possível a implementação de Transparência de
Fragmentação através da criação de VIEWS.
19
4) Processamento Distribuído de Consulta
a) Suporte ao processamento distribuído de consulta
O Oracle realiza o processamento distribuído agindo como um cliente requisitando
dados a outro servidor.
b) Tipo de otimizador de consulta utilizado
O Oracle tem dois métodos de otimização: rule-based optimizer (RBO) e cost-based
optimizer (CBO).
Cost-Based Optimizer (CBO)
Em geral, deve-se usar o cost-based. O rule-based está disponível para
qualquer aplicação.
O CBO determina qual plano de execução é mais eficiente considerando
todos os acessos disponíveis e criando informações baseadas em estatísticas para
esquema de objetos ( tabelas ou índices ) acessados pela declaração SQL. Também
aceita sugestões visando a otimização inseridas no contexto.
Passos:
1. O otimizador gera um conjunto de planos potenciais para a
declação SQL, baseada nos acessos disponíveis e sugestões.
2. O otimizador estima o custo de cada plano baseado nas
estatísticas do dicionário de dados para os dados distribuídos e
característica de armazenamento das tabelas, índices e as
partições acessadas pela declaração.
O custo é um valor estimado proporcional para estimar os
recursos necessários para executar a declaração com um plano
particular. O otimizador calcula os custos para cada método
possível de acesso e ordena baseado na estimativa dos recursos
do computador, incluindo ( mas não limitando ) I/O e memória,
que são requeridas para a execução do declaração usando o
plano.
Planos em série com maiores custos levam mais tempo para
executar que aqueles com menores custos. Quando são usados
planos paralelos os recursos não estão diretamente relacionados
com o decorrer do tempo.
3. O otimizador compara os custos dos planos e escolhe o de menos
custo.
Para manter os melhores resultados o CBO deve reunir as estatísticas e
mantê-las atualizadas.
Para colunas de tabelas que contenham dados skewed ( valores com grande
variação em números duplicados ), deve-se coletar histogramas.
20
O resultado das estatísticas provem o CBO com informações sobre unicidade
de dados e distribuição. Usando essas informações, o CBO está apto para calcular o
custo dos planos com grande grau de exatidão. Isso possibilita o CBO escolher o
melhor plano de execução baseado no menos custo.
Caminhos de acesso para o RBO:
Uma das escolhas mais importantes o otimizador faz quando formula o plano
de execução é como faz para retirar dados do banco de dados. Para cada linha em
cada tabela associada pela declaração SQL, deve ter vários caminhos de acesso para
que cada linha poder ser alocada e retirada.
O otimizador escolhe um desses:
Full Table Scans
Um full table scan recupera linhas de uma tabela. Para realizar um full table
scan, o Oracle lê todas as linhas da tabela, examinando cada linha para determinar
de qual forma isso satisfaz a clausula WHERE da declaração. O Oracle lê todo
bloco alocado de dados para tabelas seqüenciais, assim um full table scan pode
realizar com muita eficiência usando leitura a blocos. O Oracle lê bloco de dados
somente uma vez.
Sample Table Scans
Um sample table scan recupera um exemplo randômico de dados de uma
tabela. Esse método de acesso é usado quando o clausula FROM da declaração
inclui a clausula SAMPLE ou SAMPLE BLOCK. Para realizar um sample table
scan quando exemplifica para linhas ( a clausula SAMPLE ), o Oracle lê um
específico percentual de linhas de uma tabela e examina cada uma dessas linhas
para determinar de qual forma isso satisfaz a clausula WHERE da declaração. Para
realizar um sample table scan quando exemplificado para blocos ( a clausula
SAMPLE BLOCK ), o Oracle lê um percentual específico de blocos de tabelas a
examina cada linha do bloco exemplificado para determinar de qual forma isso
satisfaz a clausula WHERE da declaração.
O Oracle não suporta sample table scans quando a query envolve uma
junção ou uma tabela remota. Mesmo assim, pode-se realizar uma operação
equivalente usando uma query CREATE TABLE AS SELECT para materializar um
exemplo de uma tabela básica e reescrever a query original para referenciar o
exemplo da nova tabela criada. Adicionalmente queries podem ser escritas para
materializar exemplos para outras tabelas. Sample table scans requer o CBO.
Table Access by Rowid
A table access by rowid também recupera linhas de uma tabela. O rowid de
uma linha especifica o datafile e o data block que contem a linha e a localização da
linha naquele bloco. Localizando uma linha pelo seu rowid é a maneira mais rápida
para o Oracle localizar um única linha.
Para acessar a tabela pelo rowid, o Oracle primeiro obtém os rowids das
linhas selecionadas, tanto pela cláusula WHERE da declaração quanto através de
21
um index scan de um ou mais índices de tabela. O Oracle então aloca cada linha
selecionada na tabela baseada no rowid.
Cluster Scans
Para uma tabela armazenada em um índice cluster, o cluster scan recupera
linhas que tenham o mesmo valor cluster key. Em um índice cluster, todas as linhas
com o mesmo valor cluster key são armazenados o mesmo bloco de dados. Para
realizar o cluster scan, o Oracle primeiro obtem o rowid de uma das linhas
selecionadas para procurar o índice cluster. O Oracle então aloca as linhas baseadas
no seu rowid.
Hash Scans
O Oracle pode usar o hash scan para alocar linhas em um hash cluster
baseado no valor hash. Em um hash cluster, todas as linhas com o mesmo valor hash
são armazenados nos mesmos blocos de dados. Para realizar o hash scan, o Oracle
primeiro obtem o valor hash para aplicar uma função hash para um valor cluster key
especificado pela declaração. O Oracle então localiza os blocos de dados que
contem linhas com o mesmo valor hash.
Index Scans
Um index scan recupera dados de um índice baseado no valor de uma ou
mais colunas de índeces. Para realizar um index scan, o Oracle procura o índice na
coluna indexada por valores associados pela declaração. Se a declaração acessa
somente colunas de indices, então o Oracle lê os valores das colunas indexadas
diretamente para o índice, melhor que da tabela.
O índice não contem somente o valor indexado, mas também o valor dos
rowids de cada linha. Logo, se a declaração acessar outras colunas incluindo
colunas indexadas, então o Oracle pode procurar as linhas na tabela com acesso a
um tabela pelo rowid ou cluster scan.
Rule-Based Optimizer (RBO)
Mesmo o Oracle suportando o otimizador rule-based, deve-se designar as
novas aplicações para usar o otimizador cost-based. Deve-se também usar o CBO
para aplicações de data warehousing, porque ele suporta melhorias para DSS. Várias
melhorias de performance, assim como tabelas particionadas, melhoria do
processamento de star query, e views materializadas, estão somente disponíveis para
o CBO.
Caminhos de acesso para o RBO:
No RBO o otimizador escolhe um plano de execução baseado nos caminhos
de acesso disponíveis e o rank deles. No Oracle o ranking desses caminhos de
acessos é heurístico. Se tiver mais de uma maneira de executar a declaração SQL,
então o RBO sempre a operação com o mais baixo no rank. Usualmente, as
operações mais baixas no rank executam mais rápido do que aquelas associadas
com construtores do topo do rank.
22
Rank e caminhos de acesso:
1a. Single Row by Rowid
Está disponível apenas se a clausula WHERE da declaração identificar as
linhas selecionadas pelo rowid ou com o dado corrente do cursor embutido na
sintaxe SQL suportado pelo pré-compilador do Oracle. Para executar a declaração, o
Oracle acessa a tabela pelo rowid.
2a. Single Row by Cluster Join
Está disponível para declarações que juntam tabelas armazenadas no mesmo
cluster se as duas seguintes condições forem verdadeiras:

a clausula WHERE da declaração contem condições que igualam cada
coluna do cluster key em uma tabela com a coluna correspondente na
outra tabela.

a clausula WHERE da declaração também contem um condição que
garante que a junção retorne uma única linha. Tal condição é feita para
ter uma igualdade de condição na coluna(s) de uma unique ou primary
key.
Essas condições devem ser combinadas com operadores AND. Para executar
a declaração, o Oracle realiza a operação em loops aninhados.
3a. Single Row by Hash Cluster Key with Unique or Primary Key
Está disponível se as duas seguintes condições forem verdadeiras:

A clausula WHERE da declaração usa todas as colunas de uma hash
cluster key em igualdade de condições. Para compor os cluster keys, a
igualdade de condições deve ser combinada com o operador AND.

A declaração garante o retorno de uma única linha, porque a coluna que
faz uma hash cluster key também faz uma unique ou primary key.
Para executar a declaração, o Oracle aplica a função hash do cluster para um
valor hash cluster key especificado na declaracao para obter o valor hash. O Oracle
então usa o valor hash para realizar o hash scan na tabela.
4a. Single Row by Unique or Primary Key
Está disponível se a clausula WHERE da declaração usar todas as colunas de
uma unique ou primary key em igualdade de condições. Para compor as chaves, as
igualdades de condições devem ser combinadas com o operador AND. Para
executar a declaração, o Oracle realiza um unique scan no índice da uma unique ou
primary key para recuperar um único rowid, e então acessar a tabela pelo rowid.
23
5a. Clustered Join
Está disponível para declarações juntam tabelas armazenadas em um mesmo
cluster se a clausula WHERE da declaração conter condições que igualam cada
coluna do the cluster key em uma tabela com a coluna correspondente em outra
tabela. Para compor um cluster key, as igualdades de condições devem ser
combinadas com o operador AND. Para executar a declaração, o Oracle realiza a
operação em loops aninhados.
6a. Hash Cluster Key
Está disponível se a clausula WHERE da declaração usar todas as colunas de
uma hash cluster key em igualdade de condições. Para compor um cluster key, as
igualdades de condições devem ser combinadas com o operador AND. Para
executar a declaração, o Oracle aplica a função hash do cluster para um valor hash
cluster key especificado na declaracao para obter o valor hash. O Oracle então usa o
valor hash para realizar o hash scan na tabela.
7a. Indexed Cluster Key
Está disponível se a clausula WHERE da declaração usar todas as colunas de
um cluster key indexado em igualdade de condições. Para compor um cluster key,
as igualdades de condições devem ser combinadas com o operador AND. Para
executar a declaração, o Oracle realiza um unique scan no cluster index para retirar
o rowid de uma linha com o valor específico do cluster key. O Oracle então usa esse
rowid para acessar a tabela com um cluster scan. Porque todas as linhas com o
mesmo valor do cluster key estão guadados juntos, o cluster scan requer somente
um único rowid para localizar todos eles.
8a. Composite Index
Está disponível se a clausula WHERE da declaração usar todas as colunas de
um índice composto em igualdade de condições combinados com o operador AND.
Para executar a declaração, o Oracle realiza um range scan no índice para retirar os
rowids das linhas selecionadas, e então acessa a tabela por esses rowids.
9a. Single-Column Indexes
Está disponível se a clausula WHERE da declaração usar as colunas de um
ou mais single-column indexes em igualdade de condições. Para múltiplos singlecolumn indexes, as condições devem estar combinadas com o operador AND.
Se a clausula WHERE usar a coluna de um único índice, então o Oracle
executa a declaração realizando um range scan no índice para retirar os rowids das
linhas selecionadas, e então acessa a tabela por esses rowids.
Se a clausula WHERE usar colunas de varios single-column indexes, então o
Oracle executa a declaração realizando um range scan em cada índice para retirar os
24
rowids das linhas que satisfação cada condição. O Oracle então faz o merge dos
rowids para obter os rowids das linhas que satisfação todas as condições. O Oracle
então acessa a tabela usando esses rowids.
O Oracle pode fazer merge em até cinco índices. Se a cláusula WHERE usar
colunas de mais de cinco single-column indexes, então o Oracle faz o merge de
cinco deles, acessa a tabela pelo rowed, e então testa as linhas resultantes para
determinar de qual forma eles satisfazem as condições restantes antes de retorná-los.
10a. Bounded Range Search on Indexed Columns
Está disponível se a clausula WHERE da declaração conter uma condição
que use a coluna de um single-column index ou uma ou mais colunas que fazem
menção a uma porção da um composite index:
column = expr
column >[=] expr AND column <[=] expr
column BETWEEN expr AND expr
column LIKE 'c%'
Cada uma dessas condições especifica um alcance limitado ( bounded range
) dos valores indexados que são acessados pela declaração. O alcance é dito
limitado porque a condição especifica tanto o menor valor quanto o maior valor.
Para executar tal declaração, o Oracle raliza um range scan no índice, e então acessa
a tabela pelo rowid.
Isso não está disponível se a expressão expr referenciar a coluna indexada.
11a. Unbounded Range Search on Indexed Columns
Está disponível se a clausula WHERE da declaração contem uma das
seguintes condições que usa tanto a coluna de um single-column index quanto uma
ou mais colunas que fazem menção a uma porção da um composite index::
WHERE column >[=] expr
WHERE column <[=] expr
Cada uma dessas condições especifica um alcance ilimitado ( unbounded
range ) dos valores indexados que são acessados pela declaração. O alcance é ditto
ilimitado porque a condição especifica tanto o menor valor quanto o maior valor,
mas não os dois. Para executar tal declaração, o Oracle realiza um range scan no
índice, e então acessa a tabela pelo rowid.
12a. Sort-Merge Join
Está disponível para declarações que juntem tabelas que não estão
armazenadas juntas em um cluster e se a clausula WHERE da declaração usar
colunas de cada tabela em igualdade de condições. Para executar tal declaração, o
Oracle usa uma operação sort-merge. O Oracle pode também usar a operação em
loops aninhados para executar a junção.
25
13a. MAX or MIN of Indexed Column
Está disponível para declarações com SELECT, e todos as seguintes
condições são verdadeiras:

A query usa a função MAX ou MIN para selecionar o valor máximo ou o
mínimo tanto de uma coluna de single-column index quanto a menção a
um coluna de um índice composto. O índice não pode ser um índice
cluster. O argumento para a função MAX ou MIN pode ser qualquer
expressão envolvendo a coluna, uma constante, ou o operador adicional
(+), o operador concatenal (||), ou a função CONCAT.

Não tem nenhuma outra expressão na lista de select.

A declaração não tem nenhuma clausula WHERE ou GROUP BY.
Para executar a query, o Oracle realiza um range scan do índice para
localizar o maior ou o menor valor indexado. Porque somente esse valor é
selecionado, o Oracle não precisa acessar a tabela depois de realizar o scan no
índice.
14a. ORDER BY on Indexed Column
Está disponível para declarações com SELECT, e todos as seguintes
condições são verdadeiras:

A query contem uma clausula ORDER BY que usa tanto a coluna de um
single-column index quanto a menção a uma porção de um índice
composto. O índice não pode ser índice cluster.

Tem uma integridade de PRIMARY KEY ou NOT NULL que garante
que no mínimo uma das colunas indexadas listadas na clausula ORDER
BY não contenham nenhum null.

O parametro NLS_SORT é fixado para BINARY.
Para executar a query, o Oracle realiza um range scan do índice para retirar
os rowids das linhas selecionadas na ordem. O Oracle então acessa a tabela por
essas rowids.
15a. Full Table Scan
Está disponível para qualquer declaração SQL, despreocupando-se com as
condições da clausula WHERE, exceto quando a clausula FROM contem SAMPLE ou
SAMPLE BLOCK.
Note que o full table scan está no final da lista do rank, isso significaque o
RBO sempre escolhe um caminho de acesso que usa um índice se um estiver
disponível, mesmo se uma full table scan possa executar mais rápido.
26
As seguintes condições fazem o caminho de acesso ao índice indisponível:
 coluna1 > coluna2
 coluna1 < coluna2
 coluna1 >= coluna2
 coluna1 <= coluna2
onde coluna1 e coluna2 estão na mesma tabela.
 coluna IS NULL
 coluna IS NOT NULL
 coluna NOT IN
 coluna != expr
 coluna LIKE '%pattern'
despreocupando-se de que maneira a coluna é indexada.
 expr = expr2
onde expr é uma expressão que opera em uma coluna com um operador
ou função, despreocupando-se de que maneira a coluna é indexada
 NOT EXISTS subquery
 ROWNUM pseudo-coluna em uma view
 Qualquer condição envolvendo uma coluna que não está indexada
Qualquer declaração SQL que contenha somente esses construtores e não
outros que fazem disponíveis os caminhos de acesso a índices, deve usar o full table
scans.
c) Mecanismo de otimização de consulta distribuída
O otimizador escolhe planos de execução para declarações SQL que acessam
dados em bancos remotos ou somente dados locais:

Se todas as tabelas acessadas pela declaração SQL são alocadas em um
mesmo banco de dados remoto, então o Oracle envia a declaração SQL para
esse banco de dados. A instância remota do Oracle executa a declaração e
envia o resultado de volta para o banco de dados local.

Se a declaração SQL acessar tabelas que estejam alocadas em bancos de
dados diferentes, então o Oracle decompõe a declaração em fragmentos
individuais, cada um acessando tabelas em um único banco. O Oracle então
envia cada fragmento para o banco de dados que este acessa. Cada instância
remota do Oracle executa o seu referente fragmento e retorna o resultado
para o banco de dados local, onde a instância local do Oracle deve realizar
qualquer processamento adicional requerido pela declaração.
Quando escolhe um plano de execução cost-based para declaração distribuída, o
otimizador considera os índices disponíveis no banco de dados remoto assim como no
local. O otimizador também considera estatísticas no banco de dados remoto para CBO.
Além disso, o otimizado considera o local do dado quando estima o custo do acesso a
27
ele. Por exemplo, um full scan de uma tabela remota tem a melhor estimativa de custo
que o de uma tabela local idêntica.
Para um plano de execução rule-based, o otimizador não considera índices em
tabelas remotas.
5) Processamento Distribuído de Transação
a) Suporte ao Processamento Distribuído de Transação
Two-Phase Commit(2PC)
O 2PC permite que grupos de transação em diversos nós sejam tratados
como uma unidade: ou todas as transações tem o commit ou todas tem o rollback.
As duas fases do 2PC:
A fase de preparação, um nó chamado coordenador global notifica todos os
sites envolvidos na transação para estarem prontos para a transação de commit ou
de rollback.
A fase de commit, se não houver problema com a fase de preparação, todos
os sites fazem o commit de suas transações. Se ocorrer uma falha de rede ou de no,
todos os sites fazem o rollback de suas transações.
Se o nó que inicia a transação se esquecer da transação, uma terceira fase, a
fase de esquecimento, e executada.
O trabalho com banco de dados distribuídos aumenta o número de causas de
falhas em potencial durante um conjunto de transações relacionadas. Quando uma
transação distribuída esta pendente , uma entrada para essa transação aparece no
dicionário de dados DBA_2PC_PENDING. Quando a transação e concluída, os
seus registros DBA_2PC_PENDING são removidos. Se a transação estiver
pendente, mas não puder ser concluída, o seu registro permanece no
DBA_2PC_PENDING.
b) Protocolo de Recuperação
O processo de segundo plano RECO(Recoverer) verifica periodicamente as
transações distribuídas cuja conclusão falhou na visão DBA_2PC_PENDING.
Usando essas informações, o processo RECO de um no tenta recuperar
automaticamente a parte local de uma transação em duvida. Em seguida, ele tenta
estabelecer as conexões com quaisquer outros bancos de dados envolvidos na
transação e resolve a parte distribuída da transação. As linhas relacionadas das
visões DBA_2PC_PENDING de cada banco de dados são removidas.
28
6) Suporte a Acesso de Dados de SGBD Heterogêneo
O Oracle suporta o acesso a diferentes BD’s em uma arquitetura de SGBDD’s,
como o INFORMIX e SYBASE. Essa compatibilidade se faz através de um Gateway do
Oracle, onde são rescritos códigos SQL nos dois sentidos do tráfego de dados (E/S).
Para acesso a SGBDD’s diferentes do Oracle , ele possui um Gateway transparente
e agentes de de conectividade genérica, que se encontram dentro de Serviços Heterogêneos.
É necessário rodar um script para criar todos os Serviços Heterogêneos instalando
uma tabela de dicionário de dados, views e pacotes. Na maioria dos sistemas o script é
conhecido como CATHS.SQL e se localiza em $ORACLE_HOME/rdbms/admin.
Se for feita uma requisição do Oracle para um Banco de Dados remoto diferente, os
Serviços Heterogêneos do Oracle atuam da seguinte forma:
1. Traduz a requisição de SQL Oracle em uma requisição SQL equivalente que seja
entendida pelo sistema diferente do Oracle (Gateway).
2. Acessa os dados do site diferente do Oracle.
3. Torna os dados disponíveis para o servidor de BD Oracle para um seguido.
O serviço SQL provê capacidade de:
 Transformar o SQL Oracle em um uma linguagem SQL que possa ser entendida
pelos sistemas diferentes.
 Transforma as requisições SQL da tabela de dicionário de dados do Oracle em
sistemas de dicionário de dados de sistemas diferentes
 Mapeia typos de dados diferentes dos do Oracle para tipos de dados do Oracle.
Genéricamente, os agentes de conectividade usam os seguintes tipos de agentes do
Serviço Heterogêneo:
 Agente ODBC para acessar o provedor de dados ODBC;
 Agente OLE DB para acessar os provedor de dados OLE DB que suporta
processamentos SQL – algumas vezes referenciado como OLE DB (SQL);
 Agente OLE DB SQL para acessar provedores de dados sem suporte de
processamento SQL – algumas vezes referido como OLE DB (FS).
Cada sessão usuária recebe seu próprio processo agente emitido quando o primeiro
acesso ao a sessão usuário for feita por um sistema diferente do Oracle. O processo agente é
finalizado quando a sessão a usuária termina.
Exemplo de uma configuração em SGBD Oracle e SGBD diferente do Oracle em
máquinas diferentes, se comunicando através do agente de Serviços Heterogêneos (SH)
ODBC:
29
Nessa configuração o cliente se conecta ao Oracle8i através do Net8. Depois part
parte do SH do SGBD Oracle se conecta através do Net8 ao agente ODBC do SH (ou HS).
Esse agente se comunica com os SGBD’s diferentes através dos seguintes componentes:
 Um gerenciador de driver ODBC
 Um driver ODBC
 Uma aplicação de um cliente diferente do Oracle
Bibliografia

Oracle Documentation Library, Release 8.1.7.

Internet.

Oracle 9i, o Manual do DBA.
30
Download