Oracle Transparent Gateways

Propaganda
Pontifícia Universidade Católica - PUC-Rio
Tecnólogo em Processamento de Dados - Bacharel em Informática
Construção de Aplicações em Ambiente Cliente-Servidor
Professora: Elvira Maria Antunes Uchôa
Trabalho 1 – Sistemas de Banco de Dados Distribuídos
SGBD Comercial => Oracle
Alunos: Adriano Rodrigues Gonçalves
Adriano Souza Barroso
Elisangela Assis de Oliveira
9915213-1
9620046-9
9824362-5
Data de entrega e apresentação : 30 de abril de 2002.
Parte 1 - Projeto de BD-Distribuído
a)
Suporte à fragmentação (horizontal, vertical, híbrida)
Oracle disponibiliza fragmentações juntamente com mecanismos de replicação
b)
Mecanismos de replicação
Replicação – cópia
Replicação é o processo de esquema de copia e manutenção de objetos em um banco de dados múltiplo que
constitui um sistema de banco de dados distribuído. Uma replicação pode normalmente acessar um
database local ao invés de acessar um servidor remoto para minimizar o trafego de rede e alcançar a melhor
performance. Além disso, a aplicação pode continuar a funcionar se o servidor local falha enquanto outros
servidores com dados replicados permanecem acessíveis. Oracle suporta duas formas de replicação:
replicação básica e avançada.
Replicação básica - snapshot
Com a replicação básica, replicas de dados provêm acesso de read-only (somente leitura) para a tabela
originária de um site mestre. Aplicações podem perguntar dados de replicas de dados locais para evitar
acesso a rede sem se importar com a disponibilidade de rede. Entretanto, aplicações através do sistema
devem acessar dados no primeiro site quando atualizações são necessárias.
Servidor Oracle pode suportar replicação básica, ambientes de replicação read-only usando read-only tabelas
de snapshot.
Replicação avançada
A replicação avançada do Oracle caracteriza a extensão das capacidades da replicação básica por permitir
que as aplicações possam atualizar replicas através do sistema de banco de dados replicado. Com replicação
avançada, quaisquer replicas de dados no sistema podem prover acesso de leitura e atualização aos dados da
tabela. Servidores de banco de dados participativo Oracle automaticamente trabalha para converger o dado
de todas as replicas de uma tabela, e garante a consistencia da transação global e a integridade do dado.
Conceitos de replicação básica
Ambiente de replicação básica suporta aplicações que requerem acesso read-only para tabelas de dados
originadas de um primeiro site.
1
Snapshots de tabelas read-only
Um snapshot de tabela read-only é uma cópia local de uma tabela originária de uma ou mais tabelas mestres
remotas. Uma aplicação pode consultar o dado em um snapshot de tabela read-only, mas não pode inserir,
atualizar ou deletar linhas de um snapshot.
Arquitetura de snapshot read-only
Oracle suporta replicação de dados básica com seu mecanismo de snapshot de tabela. As seções seguintes
explicam a arquitetura de um simples snapshot de tabela read-only
Um snapshot definido por uma query
A estrutura lógica dos dados de um snapshpt de tabela é definida por uma query que referencia dados em
um ou mais tabelas mestres remotas. Uma query de definição de um snapshot determina quais dados o
snapshot vai conter.
Um snapshot definido por query deve ser tal que cada linha no snapshot corresponda diretamente a uma
linha ou a parte de uma linha em uma singular tabela mestre. Especificamente, a query definidora de um
snapshot não deve conter uma clausula distinct ou função agregada, uma clausula de GROUP BY or
CONNECT BY, join, tipos de subquery restritas, ou uma operação. O exemplo a seguir mostra uma
definição simples de snapshot de tabela
CREATE SNAPSHOT sales.customers AS
SELECT * FROM [email protected]
Nota: em todos os caso, a query definidora de um snapshot deve referenciar todas as chaves primárias de
colunas na tabela mestre.
A query definidora do snapshot pode incluir tipos restritos de subqueries que referenciem múltiplas tabelas
para filtrar linhas do snapshot da tabela mestre.
Uma subquery de um snapshot pode ser usada para criar snapshot que “walk up” a muitas-para-uma
referencia de uma filha para tabelas parentes que devem envolver múltiplos níveis. O exemplo a seguir cria
um snapshot simples com subquery
CREATE SNAPSHOT sales.orders AS
SELECT * FROM [email protected] o
WHERE EXISTS
( SELECT c_id FROM [email protected] c
WHERE o.c_id = c.c_id AND zip = 19555);
Snapshots atualizáveis
Um dado de snapshot não necessariamente corresponde ao dado corrente da sua tabela mestre. Um
snapshot de tabela é uma expressão de uma transação consistente de seu dado mestre com aquele dado
existente em um específico ponto no tempo. Para manter um dado de snapshot relativamente corrente com
o dado do seu mestre, Oracle periodicamente atualiza o snapshot. Um snapshot atualizável é uma eficiente
operação de procedimentos que faz com que o snapshot reflita o estado mais atual do seu mestre.
Você deve decidir como e quando atualizar cada snapshot para fazê-lo mais atual possível. Por exemplo,
snapshots originam-se de tabelas mestres que aplicações freqüentemente atualiza usualmente requer
freqüentes atualizações. Em contraste, snapshots dependem relativamente de tabelas mestres estáticas
usualmente requerem infrequentemente atualizações. Em resumo, você deve analisar as características e
exigências da aplicação para determinar o intervalo apropriado de atualização do snapshot.
2
Para atualizar snapshots, Oracle suporta diferentes tipos de atualizações, “completa” e “rápida” atualizações
de grupo de snapshot, bem como atualizações “manual” e “automática”.
Atualização completa
Para executar uma atualização completa de um snapshot, o servidor que gerencia o snapshot executa a query
definidora do snapshot. O resultado da query substitui o dado existente no snapshot para atualizar o
snapshot. Oracle pode executar uma atualização completa para qualquer snapshot.
Atualização rápida
Para executar uma atualização rápida, o servidor que gerencia o snapshot primeiro identifica as mudanças
que ocorreram no mestre desde a mais recente atualização do snapshot e então as aplica para o snapshot.
Atualizações rápidas são mais eficientes do que completas quando existem poucas alterações para o mestre
porque servidores participantes e rede replicam menos dados. Atualizações rápidas estão disponíveis para
snapshots somente quando a tabela mestre tem um snapshot de log.
Snapshot logs – replicação transacional
Quando uma tabela mestre corresponde a um ou mais snapshots, cria um registro de snapshot para a tabela
de maneira que atualizações rápidas de snapshot sejam
uma opção. Um snapshot log de tabela mestre trilha uma atualização rápida para todos os snapshots
correspondentes-somente um snapshot log é possível por tabela mestre. Quando um servidor executa uma
atualização rápida para um snapshot, ele usa dados do seu snapshot log de tabela mestre para atualizar o
snapshot eficientemente. Oracle automaticamente depura atualização específica do dado de um snapshot log
depois de todos os snapshot executarem atualizações tais que o log do dado é não muito necessário.
Atualização automática de snapshot
Quando se cria um grupo de snapshot atualizável, administradores usualmente configuram o grupo então o
Oracle automaticamente atualiza seus snapshots. De outro modo, administradores teriam condições de
realizar atualização manualmente quando necessário.
Tipo de atualizações
Por default, Oracle tenta executar uma atualização rápida de cada snapshot em um grupo de atualização. Se
Oracle não pode executar uma atualização rápida para um snapshot individual, por exemplo quando uma
tabela mestre não tem snapshot log, o servidor executa uma atualização completa para o snapshot.
Atualização manual de snapshot
Programadas, atualizações automáticas de snapshot podem não ser adequadas. Por exemplo, imediatamente
acompanhando um volume de dado carregado em uma tabela mestre, snapshots dependentes não mais
representará o dado da tabela mestre. Ao invés de esperar pela próxima programação automática de
atualizações de grupo, você deve querer manualmente atualizar grupos de snapshot dependentes para
imediatamente propagar as novas linhas de uma tabela mestre para snapshots associados.
Snapshots complexos
3
Quando a query que define um snapshot contém um distinct, ou uma função agregada, uma cláusula group
by ou connect by, join, tipos de subqueries restritas, ou uma operação, o snapshot é um snapshot complexo.
exemplo
CREATE SNAPSHOT scott.emp AS
SELECT ename, dname
FROM [email protected] a, [email protected] b
WHERE a.deptno = b.deptno
SORT BY dname
A primeira desvantagem de um snapshot complexo é que Oracle não pode executar uma atualização rápida
do snapshot, Oracle somente executa atualização completa de um snapshot complexo. Consequentemente o
uso de snapshots complexos pode afetar o desempenho da rede durante as atualizações completas de
snapshot.
ROWID snapshots
Snapshot de Chave primária são o default para Oracle. Oracle baseia um snapshot de chave primária sobre a
chave primária de sua tabela mestre. Por causa desta estrutura, você pode:
Reorganizar as tabelas mestres de um snapshot sem a atualização completa de um snapshot
Criar um snapshot com uma query que inclua tipos de queries restritas.
Oracle também suporta ROWID snapshots baseados nos identificadores físicos da linha ou "ROWIDs" de
linhas na tabela mestre. Somente usa-se ROWID snapshots para snapshots de tabelas mestres no banco de
dados Oracle 7.3 e não quando cria novos snapshots de tabelas mestres em banco de dados Oracle 8.
Nota: para suportar um snapshot ROWID, Oracle cria um índice adicional sobre a tabela base do snapshot
com o nome I_SNAP$_snapshotname
Criando sites de snapshot ou slave
A página inicial do setup de replicação sugere a você para indicar qual tipo de ambiente de replicação que
você quer realizar.
1. Select Setup Snapshot Sites.
2. Click Next.
Especificar o site mestre
The next page of the wizard asks you to identify the master site for the new snapshot site(s) that you will be
creating.
1. Type the name of the master site (for example, DBS1).
2. Type the password for the SYSTEM user at the master site.
Clone de snapshot para ambientes de replicação básica
para reduzir um overhead de rede associado com a criação de sites de snapshot em muitos bd, você pode
realizar snapshot “cloning” pelos passos seguintes:
4
1 – criar o snapshot e o grupo correspondente de atualização que você quer clonar no bd separado do bd
que contém as tabelas mestres. o bd no qual você cria snapshot das tabelas mestres é o exemplo guia de
snapshot para o processo de clonagem.
2- no bd que contém o exemplo guia de snapshot, exporte os esquemas contendo os snapshots e grupos de
atualização que você quer clonar para outros bds de snapshot. o utilitário de exportação não suporta a
exportação individual de snapshots. por isso, você deve exportar snapshots no nível de esquema.
3-prepare todos os outros bd de snapshots para receber os snapshots do bd mestre.
nota: para ter certeza que você preparou um snapshot apropriado, conecte cada snapshot no esquema do
bd.m a seguir, execute a definição das queries do snapshot proposto para certificar que eles executarão sem
erros. adicionalmente, certifique-se que cada novo bd de snapshot tenha espaço livre suficiente para
suportar novos snapshots.
4- a cada novo bd de snapshot, importe os esquemas de snapshots que foram exportados do bd que contém
o exemplo guia de snapshot. este cria e distribui os mesmos snapshot que foram exportados do bd de
snapshot guia.
5-execute uma rápida atualização do todos os snapshots rapidamente atualizáveis. fazendo assim
registros dos novos snapshots no bd mestre.1
os
O Oracle também oferece recursos de instanciação offline de sites mestres e sites de snapshot em sistemas
de replicação avançada, indicando passo a passo para a implantar o uso destes recursos.
instanciação offline de um site snapshot em um ambiente de replicação avançada é aplicável quando você
precisa criar uma grande quantidade de site de snapshot, e o tempo requerido para transferir a replicação de
dados através da rede para o novo site seria proibitiva.
use os passos seguintes para criar um site de snapshot usando instanciação offline
No site mestre
1-antes de iniciar, crie um log de snapshot para cada tabela mestre.
2. Create a snapshot of each master group table. Create each snapshot in the same schema as its master
table. To accomplish this, each snapshot's name must be different from its corresponding master table.
Additionally, the snapshot's defining query must use a loopback database link to reference the master table.
For example, to create a snapshot EMPLOYEE of the EMP table in the same database DBS1:
2- crie um snapshot para cada grupo de tabelas do mestre. crie cada snapshot no mesmo esquema da sua
tabela mestre. para executar isso, cada nome de snapshot deve ser diferente da sua tabela mestre
correspondente. adicionalmente, a query que define o snapshot deve usar um loopback database para
referenciar a tabela mestre. por exemplo, criar um snapshot employee da tabela empregados no mesmo bd
chamadao dbs1.
CREATE SNAPSHOT sales.employee AS SELECT * FROM sales.emp@dbs1
SALES=SITE
EMP E EMPLOYEE = TABELA
BDS1 = BANCO
atenção: antes de criar snapshots, certifique-se que o banco mestre tem amplo espaço de memória.
5
3- como proprietário do esquema, use export para exportar todos os esquemas que contém os snapshots.
4-delete o snapshot no site mestre que foi criado por instanciação offline
5-transferir o arquivo de exportação para o novo site de snapshot
Em um novo site de snapshot
1-usando o gerenciador de replição do setup wizard, prepare o novo site de snapshot para se comunicar
com o site mestre.
2-usando o gerenciador de replicação de grupo de snapshot wizard, crie um grupo de snapshot vazio para
corresponder com o grupo do mestre. não escolha a replicação de nenhum objeto do grupo do mestre.
3-para cada esquema e snapshot, use a procedure dbms_offline_ snapshot.begin_load (gname, sname,
master_site, snapshot_oname) para criar snapshots vazios no esquema especificado e grupo de objeto no
novo site de snapshot, bem como todos os objetos de suporte necessários.
4- importe somente as tabelas base do snapshot do arquivo de exportação.
5- quando a importação estiver completa, para cada esquema e snapshot, use a procedure
dbms_offline_snapshot.end_load (gname, sname, snapshot_oname)
Configurações de replicação avançada
Oracle suporta os requisitos de um ambiente de replicação avançada usando replicação multimaster bem
como sites de snapshots.
Replicação multimaster
Replicação multimaster Oracle permite múltiplos sites, atuando em iguais camadas, para gerenciar grupos de
objetos de banco de dados replicados. Aplicações podem atualizar qualquer tabela replicada em qualquer site
em uma configuração multimaster.
Figura de Sistema de Replicação Multimaster
6
Sites de snapshots e snapshots atualizáveis
Sites mestres em um sistema de replicação avançada pode consolidar informação que aplicações atualizam
em snapshot de sites remotos. Replicação avançada do Oracle permite aplicações para inserir, atualizar e
deletar linhas de tabelas através de snapshots atualizáveis.
Figura de Sistema de Replicação Avançada com Snapshot Atualizável
Configurações híbridas
Replicação multimaster e snapshots atualizáveis podem ser combinados em uma configuração mista ou
híbrida. Configurações mistas podem Ter qualquer número de sites mestres e múltiplos sites de snapshots
para cada mestre
Figura de Configuração Híbrida
O Oracle oferece replicação de objetosd, grupos, sites e catálogos
Arquitetura de replicação avançada oracle
Oracle converge dados de configurações típicas de replicação avançada usando row-level replication com
propagação assíncrona de dados.
Nota: Oracle oferece outras características de replicação avançada tais como replicação procedural e
propagação de dados síncrona para exigências únicas da aplicação.
7
Replicação row-level
Transação típica do processo de aplicações modifica pequeno números de linhas por transação. Tais
aplicações trabalham em ambientes de replicação avançada dependerão usualmente do mecanismo de
replicação row-level do Oracle. Com replicação row-level, aplicações usam padrões de declarações DML
para modificar o dado das replicas de dados locais. Quando uma transação muda um dado local, o servidor
automaticamente captura informação sobre as modificações e forma filas correspondentes de transações
adiadas para encaminhar mudanças locais para sites remotos.
Propagação de dados assíncrona (store-and-forward)
Configurações típicas de replicação avançada que contam com replicação de row-level propaga dado nível
muda usando replicação de dados assíncrona. Replicação de dados assíncrona ocorre quando uma aplicação
atualiza uma replica local de uma tabela, guarda a informação replicada em uma fila local e então encaminha
a informação replicada para outros sites de replicação em um momento posterior. Consequentemente,
replicação de dados assíncrona é também chamada de replicação de dados store-and-forward.
Detecção de conflito em atualização de cópia assíncrona
se todos os sites de um grupo de mestre se comunicam sincronamente com outro, aplicações nunca
experimentam conflitos de replicação. entretanto, se um site está enviando mudanças assincronamente para
outro site, aplicações podem experimentar conflitos em algum site do ambiente replicado.
se a mudança está sendo propagada sincronamente, um erro é gerado e um rollback será requerido. se a
mudança é propagada assincronamente, oracle automaticamente detecta os conflitos e derruba o conflito
ou, se você designar um método de resolução apropriado , resolve o conflito.
Propagação serial
Com a propagação serial, Oracle propaga assincronamente transações replicadas, uma a cada tempo, na
mesma ordem em que elas foram confirmadas no site de origem.
Propagação paralela
Com propagação paralela, Oracle propaga assincronamente transações replicadas usando multiplo, fluxo de
transito paralelo pra alto throughput. Quando necessário, Oracle orderna a execução de transações
dependentes para garantir a integridade global do banco de dados.
Primeiro site – posse estática
Posse primária, também chamado de posse estática, é um modelo de dado replicado que ambiente de
replicação read-only básica suporta. Posse primária previne todas os conflitos de replicação, porque somente
um servidor permite o acesso para atualização de um dado replicado.
Posse dinâmica
O modelo de replicação de dados com posse dinâmica é menos restritivo do que a posse primária. Com a
posse dinâmica, a capacidade de atualizar uma replica de um dado move de site pra site, ainda garantindo
que somente um site provê acesso de atualização para um dado específico em qualquer ponto do sistema.
8
Usando posse dinâmica para evitar conflitos – propriedade do dado
Descreve-se aqui mais um método avançado para designar suas aplicações para evitar conflitos. Este
método, conhecido como token passing, é similar ao método workflow. Você pode usar formas modificadas
deste método para controlar a posse de grupos individuais de colunas dentro da linha.
Workflow e token passing permitem posse dinâmica do dado. Com a posse dinâmica, somente um site em
um determinado tempo é autorizado a atualizar a linha, mas a posse da linha pode ser passada de site para
site. Workflow e token passing usam o valor de um ou mais identificadores de colunas para determinar que
é atualmente autorizado para atualizar a linha.
Workflow – propriedade do dado
com o particionamento workflow, você pode achar que dados do proprietário estão sendo “passados” de
site pra site. somente o proprietário atual de uma linha é autorizado a passar a posse da linha para outro site,
através da mudança de valor do identificador de colunas.
para evitar conflitos com sucesso, aplicações implementam posse de dados dinâmica deve garantir que as
seguintes condições sejam atendidas:
-somente o proprietário da linha pode atualizar a linha
-a linha nunca é posse de mais de um site
-ordenação de conflitos podem ser resolvidos com sucesso por todos os sites.
com o particionamento de workflow, somente o proprietário atual da linha pode passar a posse da linha
para o próximo site para atualizar o identificador de colunas. a nenhum site é dado a posse a menos que
outro site tenha dado a posse, assim garante que nunca terá mais de um proprietário para a linha.
Token passing – variação do workflow – propriedade do dado
Para implementar token passing, ao invés de identificador de colunas, suas tabelas replicadas devem ter
proprietários e período de colunas. O proprietário da coluna guarda o nome global do banco do site
atualmente confiado para possuir a linha.
Uma vez que você tenha designado um mecanismo token passing, você pode usá-lo para implementar uma
variedade de formas de particionamento dinâmico de posse do dado, incluindo workflow.
Você deve designar sua aplicação para implementar token passing para você automaticamente.
Você não deve permitir que o proprietário ou época de colunas seja atualizado fora desta aplicação.
Sempre que você tentar atualizar uma linha, sua aplicação deve:
1-localizar o proprietário atual da linha
2-bloquear a linha para previnir atualizações enquanto a posse está sendo trocada
3-guardar/manter a posse da linha
4-executar a atualização ( Oracle libera o bloqueio quando você confirma sua transação)
Tipos de conflitos de replicação – propriedade do dado – update-anywhere
Replicação avançada inclui facilidades pra detectar e resolver
atualização, conflitos de uniqueness e conflitos de deleção.
três tipos de conflitos: conflitos de
9
Conflitos de atualização - update conflicts
Um conflito de atualização ocorre quando a replicação de uma atualização para uma linha conflita com
outra atualização sobre a mesma linha. Conflitos de atualização podem acontecer quando duas transações,
originárias de sites diferentes, atualizam a mesma linha quase no mesmo tempo
Conflitos de unicidade - uniqueness conflicts
Um conflito de uniqueness ocorre quando a replicação de uma linha tenta violar a integridade de uma
entidade ( uma chave primária ou restrição unique). Por exemplo, considere o que acontece quando duas
transações originadas de dois sites diferentes onde cada um insereuma linha em uma respectiva replica de
uma tabela com o mesmo valor de chave primária. Neste caso, replicação de transações causa um conflito
de unicidade.
Conflitos de deleção - delete conflicts
Um conflito de deleção ocorre quando duas transações originadas de sites diferentes, com uma transação
deletando uma linha que a outra transação atualiza ou deleta.
Recurso para evitar tipos de conflitos específicos - avoiding specific types of conflicts
Quando o site com posse estática e o de posse dinâmica de modelos de dados são restringidos pelas
exigências de sua aplicação, você deve usar um método de posse compartilhada de modelo de dados.
Mesmo assim, tipicamente você pode usar algumas estratégias simples para evitar tipos específicos de
conflitos, tais como:
- Uniqueness Conflicts
- Delete Conflicts
- Update Conflicts
Como oracle detecta diferentes tipos de conflitos
O site mestre de destino em um sistema de replicação avançada detecta conflitos de atualização, unicidade e
deleção.
O site de destino detecta um conflito de atualização se existe alguma diferença entre os valores antigos de
uma linha replicada ( o valor antes da modificação) e os valores atuais da mesma linha no site de destino.
O site de destino detecta um conflito de unicidade se ocorrer uma violação da restrição de unique ocorre
durante um insert ou update de uma linha replicada.
O site de destino detecta um conflito de deleção se ele não pode achar uma linha para a declaração de um
update ou delete porque a chave primária da linha não existe.
Nota: para detectar e resolver um conflito de update para uma linha, o site propagador deve enviar uma
certa quantidade de dados sobre as versões nova e antiga da linha para o site receptor. Para máxima
performance, regule a quantidade de dados qe Oracle usa para suportar detecção e resolução de conflito de
atualização.
10
Resolução de conflitos
Quando conflitos de replicação ocorrem no site mestre de destino, você deve resolvê-los para garantir que o
dado completo o sistema eventualmente converge. Convergência de dados significa que todos os sites com
gerência de dados replicados correspondam a uma mesma informação. Se conflitos de replicação acontece e
você deixar de resolvê-los, o dado replicado em vários sites permance inconsistente. Além disso, pode
trazerm efeitos cascata indesejáveis. Uma inconsistência pode criar conflitos adicionais, os quais criam
inconsistências adicionais e assim sucessivamente.
Se você não pode evitar todos os tipos de conflitos de replicação em seu sistema, você pode configurar o
sistema para usar Características de resolução de conflitos automática do Oracle.
Resolução de conflito automática x manual
Você deve sempre usar as características de resolução de conflitos automática do Oracle para resolver os
conflitos quando eles ocorrem. Quando você não configura a resolução de conflito automática para tabelas
replicadas, Oracle simplesmente registra os conflitos em cada site. Neste caso, você é forçado a resolver os
conflitos manualmente para preservar a integridade do dado replicado. Resolução manual de conflitos pode
ser um desafio para ser executado. Além disso, atrasos na execução manual de resolução de conflitos podem
levar a inconsistências no dado que podem criar efeito cascata de erros.
Resolução de conflitos de atualização e grupos de colunas - (fragmentação vertical)
Oracle usa grupo de colunas para detectar e resolver conflitos de atualização. Um grupo de colunas é um
grupamento lógico de uma ou mais colunas em uma tabela replicada. Toda coluna em uma tabela replicada é
parte de um grupo singular de colunas. Quando é feita a configuração de tabelas replicadas na definição do
site mestre, você pode criar grupos de colunas e associar colunas e corresponder métodos de resolução de
conflito para cada grupo.
Resolução de conflito de unicidade
Na maioria dos casos, você deve construir um sistema de replicação avançada e aplicações correspondentes
para que conflitos de unicidade não sejam possíveis. Entretanto, se você não pode evitar conflitos de
unicidade você pode associar um ou mais métodos de resolução de conflitos para restrições de chave
primária ou unique em uma tabela replicada para resolver conflitos de unicidade quando eles ocorrerem.
Oracle provê poucos métodos de resolução de conflitos de unicidade pré-desenvolvidos. Entretanto você
tipicamente vai querer usar estes métodos com notificação de conflito a fim de que você possa validar a
precisão dos conflitos de unicidade resolvidos.
Resolução de conflito de deleção
Você sempre deve projetar ambientes de replicação avançada tentando evitar conflitos de deleção. Se evitar
conflitos de deleção é restritivo demais para um projeto de aplicação, você pode escrever de modo geral
métodos de resolução de coflitos e designá-los para tabelas replicadas. Oracle não oferece nenhum método
de resolução de conflitos de deleção pré-desenvolvido.
Métodos de resolução de conflitos
Para resolver conflitos de replicação automaticamente, você pode designar um ou mais métodos de
resolução de conflitos. Oracle tem muitos métodos pré-desenvolvido de resolução de conflitos que você
pode usar para resolver conflitos. Se necessário, você pode construir/desenvolver seus próprios métodos
parar resolver conflitos.
11
Métodos pré-definidos de resolução de conflito de atualização
Oracle oferece métodos de conflitos de atualização para designar para grupo de colunas.





Overwrite and discard value.
Minimum and maximum value.
Earliest and latest timestamp value.
Additive and average value.
Priority groups and site priority.
Métodos pré-definidos de resolução de conflito de unicidade
Oracle oferece os métodos para resolução de conflitos de unicidade para associá-los a restrições de chaves
primárias e unique.



Append site name to duplicate value.
Append sequence to duplicate value.
Discard duplicate value.
Restrições para métodos pré-definidos para resolução de conflitos
Métodos pré-definidos de resolução de conflitos do Oracle não suporta as seguintes situações:




Delete conflicts.
Changes to primary key (or identity key) columns.
NULLs in the columns that you designate to resolve the conflict.
Referential integrity constraint violations.
Usando múltiplos métodos de resolução de conflitos
Indicando múltiplos métodos de resolução de conflitos para um grupo de colunas permite ao Oracle
resolver um conflito em diferentes maneirasde outras falhas para resolver o conflito. Quando tenta resolver
um conflito, Oracle executa para cada grupo os métodos na ordem que você listar.
Você deve usar multiplos métodos de resolução de conflitos pelas seguintes razões:
Para empregar alternativas de métodos de resolução de conflitos quando o métedo escolhido não pode
resolver o conflito
Para receber notificação automáticados conflitos de replicação quando eles ocorrerem.
Nota: você pode também designar multiplos métodos de resolução de conflitos para restrição de uma
chave primária ou unique para resolver conflitos de unicidade e para uma tabela replicada para resolver
conflitos de deleção.
Oracle disponibiliza multiplos métodos de resolução de conflitos para Backup e para notificação
Implementando resolução de conflito
Depois de planejar, use o gerenciador de replicação oracle e o gerenciamento de replicação oracle API para
configurar resolução de conflitos para tabelas replicadas em um grupo mestre, com os seguintes passos:
12
1-suspenda a atividade de replicação para o grupo mestre.
2-configure resolução de conflito para as tabelas replicadas no grupo mestre no site de definição mestre. Por
exemplo, quando configurar resolução de conflito de atualização para uma tabela, use o gerenciador de
replicação para criar os grupos de colunas necessárias e designe métodos de resolução de conflitos para os
grupos.
3-regenere o suporte de replicação para as tabelas replicadas ou para todos os objetos no grupo mestre
depois que você terminar a configuração de resolução de conflito.
4-retome a atividade de replicação para o grupo mestre uma vez que você já tenha terminado com todas as
modificações e teste sua configuração de resolução de conflito.
Configuração de resolução de conflito de atualização
Em um ambiente típico de replicação avançada, conflitos de unicidade e deleção não são possíveis, e
conflitos de atualização, portanto, requerem mais atenção durante o projeto e configuração do sistema.
Facilitador de replicação avançada Oracle usa grupos de colunas para detectar e resolver conflitos de
atualização. Oracle explica omo configurar grupos de colunas para tabelas replicadas e associar métodos de
resolução de conflitos de atualização para cada grupod de colunas.
Oracle oferece recursos tais como criar um grupo de colunas, adcionar e remover colunas em um grupo de
colunas, deletar um grupo de colunas.
Para gerenciar um método de resolução de conflito de atualização sobre um grupo, é possível designar
métodos, remover métodos, ordenar os métodos para um grup de colunas.
Oracle também permite usar gerenciar prioridades para grupos para resolução de conflito de atualização,
com recursos de criar uma prioridade de grupo adcionar membros nestes grupos, alterar o valor dos
membros destes grupos, remover membros destes grupos, remover membros por valor ou por prioridade,
remover a prioridade do grupo
Pode-se também criar prioridade para sites para resolução de conflito de atualização, criar uma prioridade
para um grupo de sites, adicionar sites ao grupo, alterar o nível de prioridade do site, remover um site pelo
nome, pela prioridade ou pela prioridade do grupo,
Pode configurar associar e remover métodos
A documentação do oracle explica como resolver os três tipos de conflitos de replicação.
Posse compartilhada
Modelos de replicação de dados de posse primária e posse dinâmica que promovem condições para evitar
conflitos são oferecidos também/com muita restritividade para implementar par alguma aplicação de banco
de dados. Algumas aplicações devem operar usando um modelo de replicação de dado com posse
compartilhada na qual aplicações podem atualizar o dado de qualquer replica de tabela em qualquer tempo.
Quando sistema de posse de dado compartilhada replica mudanças assincronamente (replicação store-andforward), aplicações correspondentes devem evitar o detectar e resolver conflitos de replicação se e quando
eles ocorrerem.
13
Replicação procedural – replicação transacional
Procedimentos de aplicações podem mudar uma grande quantidade de dados dentro de uma única
transação, nesses casos, replicação típica row-level poderia carregas a rede com uma grande quantidade de
alterações de dados. Para evitar esses problemas, um lote de processamento numa aplicação operando em
um ambiente de replicação avançada pode usar a replicação procedural pra replicar a chamada da stored
procedure para converger replicas de dados. Replicação procedural replica somente a chamada a uma
stored procedure que uma aplicação usa para atualizar um tabela. Replicação procedural não replica
modificações de dados.
Propagação de dados síncrona (real-time)
Propagação de dados assíncrona é a configuração normal para ambiente de replicação avançada. Entretanto,
Oracle também suporta propagação de dados síncrona para aplicações com requisitos especiais. propagação
de dados síncrona ocorre quando uma aplicação atualiza um replica local de um tabela, e dentro da mesma
transação também atualiza todas as outras replicas da mesma tabela. Consequentemente, propagação de
dados síncrona é também chamada de propagação de dados real-time. Usa-se esta propagação somente
quando aplicações exigem que sites replicados permaneçam continuamente sincronizados.
nota: um sistema de replicação que usa propagação em tempo real de uma replicação de dados é altamente
dependente da disponibilidade do sistema e da rede porque isto somente pode funcionar quando todos os
sites do sistema estejam concorrentemente disponíveis.
Você pode criar um ambiente replicado com algumas propagações de mudanças sincronamente enquanto
outros usam propagação assíncrona.
Destino de transações replicadas sincronamente
as chamadas necessárias a procedure remota para suporte de replicação síncrona são incluídas no trigger
interno para cada objeto. quando você gera suporte de replicação para um objeto replicado, oracle ativa os
triggers em todos os sites mestres para adicionar as chamadas necessárias a procedure remota para o novo
site. quando você remove um site mestre de um grupo de mestres, oracle remove as chamadas dos triggers
interno.
Triggers e replicação - mecanismo de replicação
Se você tem definido uma replicação de trigger sobre uma tabela replicada, você precisa garantir que o
trigger dispare somente uma vez para cada mudança que você faça. Tipicamente , você somente vai querer
que o trigger dispare quando a mudança é a feita pela primeira vez, e você não vai querer o trigger remoto
dispare quando a mudança é replicada para o site remoto.
Você deve verificar o valor da variável do pacote DBMS_REPUTIL.FROM_REMOTE no início do seu
trigger. O trigger deve atualizar a tabela somente se o valor desta variável for falso.
Alternativamente, você pode desabilitar a replicação no início do trigger e reabilitá-la no final do trigger
quando modifica linhas exceto aquela que levou o trigger a disparar. Usando este método, somente a
mudança origianal é replicada para sites remotos. Então o trigger de replicação será disparado para cada site
remoto. Qualquer atualização executada pela replicação de trigger não será passada para nenhum outro site.
Usando este método, a resolução de conflito não é invocada. Portanto, você deve garantir que as mudanças
resultantes do trigger não afetem a consistência do dado.
14
Parte 2 – Controle do Ambiente Distribuído
a)
Gerenciamento de view
View - Visão
Definida por uma query no nível de esquema externo do banco do dados e o seu usuário criador deve ter
associado a ele o privilégio de criação de view - create view - ou para criar views em qualquer esquema, o
privilégio create any view.
Ela deve ter um proprietário e ela terá os privilégios do seu proprietário.
Se o proprietário da view quiser dar acesso da view a outro usuário deverá ter privilégio para isso através de
grant option.
Exemplo de criação de uma view
CREATE VIEW sales_staff AS
SELECT empno, ename, deptno
FROM emp
WHERE deptno = 10
WITH CHECK OPTION CONSTRAINT sales_staff_cnst;
Oracle permite criar uma view com erros de sintaxe que não será executada sendo considerada “created
with errors”
Para criar view com erros deve-se usar o comando force
CREATE FORCE VIEW AS ....;
Recurso de modifiação da view






DISTINCT operator
aggregate functions: AVG, COUNT, GLB, MAX, MIN, STDDEV, SUM, or VARIANCE
set operations: UNION, UNION ALL, INTERSECT, MINUS
GROUP BY or HAVING clauses
START WITH or CONNECT BY clauses
ROWNUM pseudocolumn
Pode-se utilizar comandos de DML para composição da view: update, delete e insert.
Views podem ser alteradas e deletadas e possui recursos de segurança através das permissões de acesso a
objetos oferecidas pelo Oracle.
b)
Controle de segurança
Política de Segurança
Segurança de dados inclui mecanismos de controle de acesso ao nível de objeto de banco de dados. A
política de segurança do dado determina quais usuários possuem acesso a um objeto específico do esquema
e especifica os tipos de ações permitidas aos usuários sobre cada objeto.
15
A segurança do dado será determinada primeiramente pelo nível de seguridade que você deseja estabelecer
para o dado no seu banco de dados.
Segurança do dado é baseada na sensibilidade do dado. Se a informação não é sensível, então a política de
segurança do dado pode ser mais frouxa. Entretanto, se o dado é sensível, uma política de segurança deve
ser desenvolvida para manter o controle do acesso ao objeto.
A seguridade do dado pode ser feita através de senha e privilégios ou concessões.
Segurança do administrador
Quando o banco é grande e existem vários tipos de administradores do banco, a segurança do administrador
deve decidir regras para os grupos de administradores e seus privilégios. As regras de administrador somente
devem ser concedidas para usuários administradores apropriados.
c) Controle de Integridade
Tipos de restrições de integridade
Para ser usado associado a valores de colunas:





NOT NULL Integrity Constraints
UNIQUE Key Integrity Constraints
PRIMARY KEY Integrity Constraints
FOREIGN KEY (Referential) Integrity Constraints
CHECK Integrity Constraints
Usando restrições de integridade
Você pode definir restrições para forçar regras de negócio sobre o dados nas suas tabelas. Uma vez que uma
restrição de integridade é ativada, todos os dados da tabela devem estar de acordo com as regras específicas
para ela. Oracle garante que o resultados das operações sobre o dado satisfaçam a restrição de integridade.
Usando restrições de integridade referenciais
Toda vez que duas tabelas são relacionadas por uma coluna comum ou um conjunto de colunas, defina uma
restrição de chave primária ou unique sobre a coluna na tabela pai e defina uma restrição de chave
estrangeira na tabela filha, para manter o relacionamento entre as duas tabelas.
Chaves estrangeiras podem ser de múltiplas colunas. Entretanto, uma chave estrangeira deve referenciar
uma chave primária ou unique para a mesma estrutura, tendo o mesmo número de colunas e tipos de dados.
O limite dado pelo Oracle é de 16 colunas para chaves primárias e estrangeiras.
Pode-se dar nomes às restrições de integridade e elas podem ser habilitadas ou desabilitadas
Violações de restrição de integridade
Se uma linha de uma tabela não adere a uma restrição de integridade, esta linha é dita ser a violação da
restrição e é conhecida como uma exceção para a restrição. Se existir qualquer exceção, a restrição não pode
ser habilitada. A linha que viola a restrição deve ser atualizada ou deletada para a restrição ser habilitada.
16
Definição da integridade do dado
É importante que o dado atenda a um conjunto de regras pré-definidas, como determinado pelo
administrador do banco de dados ou pelo desenvolvedor da aplicação.
Tipos de integridade do dado
Nulls or Not null
Unique Column Values
Primary Key Values
Referential Integrity
Restrict
Set to Null
Set to Default
Delete Cascade
No Action
Como Oracle impõe integridade do dado
Oracle habilita você a definir e forçar para cada tipo de integridade regras definidas anteriormente. Maioria
dessas regras são facilmente definidas usando restrições de integridade ou triggers de banco de dados.
Triggers e restrições de integridade
Oracle também permite você forçar regras de integridade com um método não declarativo usando triggers (
procedimento armazenado disparado automaticamente invocado por operações de insert, update, or delete)
Parte 3 – Transparência
Transparência em um Sistema de Banco de Dados Distribuído
Com esforço mínimo, você pode fazer a funcionalidade de um sistema da base de dados distribuída
do oracle transparente aos usuários que trabalham com o sistema. O objetivo da transparência é fazer um
sistema da base de dados distribuída parecer uma única base de dados do Oracle.
As seções seguintes explicam mais sobre a transparência em um sistema da base de dados distribuída.
1 - Transparência de Distribuição
Existem dois aspectos a serm obervados quando se trata de Transparência de Distribuição, um é
quanto à Transparência de Localização dos dados, permitindo que o comando usado por um cliente seja
independente da localizaçào física dos dados sobre os quais o comando deverá atuar, o outro refere-se à
Transparência de Denominação, que trata dos conflitos entre nomes dos objetos do BD distribuído, de
forma que cada objeto tenha um identificador único.
Um sistema da base de dados distribuída do oracle tem as características que permitem que os
desenvolvedores e os administradores de aplicação escondam a posição física de objetos da base de dados
das aplicações e dos usuários. A transparência de localização existe quando um usuário pode
universalmente consultar a um objeto da base de dados tal como uma tabela, não obstante o nó a que uma
aplicação conecta. A transparência da localização tem diversos benefícios, incluindo:
17
O acesso aos dados remotos é simples, porque os usuários da base de dados não necessitam
conhecer a posição física de objetos da base de dados;
Os administradores podem mover objetos da base de dados com nenhum impacto nos usuário
finais ou em aplicações existentes da base de dados.
Usando Views
As views locais podem fornecer a transparência de localização para acesso à tabelas remotas em um
sistema da base de dados distribuída, uma vez que, ao acessar uma visão os usuários não necessitam saber
onde os dados são armazenados fisicamente, ou se os dados de mais de uma tabela estão sendo acessados.
EX: Criação de View que Junta dados de dois sites
CREATE VIEW company
AS
SELECT a.empno, a.ename, b.dname
FROM scott.emp a, [email protected] b
WHERE a.deptno = b.deptno;
Após a criação desta View é possível executar a seguinte consulta:
SELECT * FROM company;
Views e Privilégios
O proprietário local da view só pode conceder privilégios aos objetos da view local que foram
possuídos pelo usuário remoto. O mesmo para view que referenciam dados locais.
Usando Sinônimos
Freqüentemente, os administradores e os colaboradores usam sinônimos para estabelecer a
transparência para as tabelas e os objetos em um schema da aplicação distribuida. Por exemplo, comandos
a seguir criam sinônimos em uma base de dados para tabelas em uma outra base de dados remota.
A sintaxe de criação de um sinônimo é a seguinte:
CREATE [PUBLIC] synonym_name
FOR [schema.]object_name[@database_link_name]
onde …
[ PUBLIC ] - Especifica que este sinônimo está disponível a todos os usuários. Omitir este parâmetro faz
um sinônimo confidencial, e acessível somente pelo criador. Os sinônimos públicos podem ser criados
somente por um usuário com o privilégio CREATE PUBLIC SYNONYM.
[ synonym_name] - Especifica o nome através do qual o objeto será referenciado pelos usuários e
aplicações.
18
[ schema ] - Especifica o banco do objeto especificado no object_name. Omitir este parâmetro usa o banco
do criador como o banco do objeto.
[ object_name ] - Especifica o objeto do sinonimo.
[ database_link_name ] - Especifica a base de dados remota e o banco em que o objeto especificado em
[object_name] se encontra.
Exemplo:
CREATE PUBLIC SYNONYM dept
FOR [email protected]_auto.com
Agora, as tabelas remotas, que só podiam ser acessadas com uma query como:
SELECT ename, dname
FROM [email protected]_auto.com e,
[email protected]_auto.com d
WHERE e.deptno = d.deptno;
Podem ser acessadas através de uma consulta muito mais simples que não tenha que esclarecer a posição das
tabelas remotas, como:
SELECT ename, dname
FROM emp e, dept d
WHERE e.deptno = d.deptno;
Sinônimos e Privilégios
Um sinônimo é uma referência ao objeto real. Um usuário que tenha o acesso a um sinônimo para
um objeto particular do schema, tem também os privilégios no objeto do schema. Por exemplo, se o
usuário tentar acessar um sinônimo mas não tiver privilégios na tabela que identifique, um erro ocorrerá
indicando que a tabela ou a visão não existem.
Suponha que um sinônimo local seja um pseudônimo para um objeto remoto. O proprietário do
sinônimo local não pode conceder nenhum privilégio ao objeto do synonym a nenhum outro usuário local.
Este comportamento é diferente da gerência do privilégio para os sinônimos que são pseudônimos para
tabelas ou visões locais. No argumento onde um sinônimo é um pseudônimo para um objeto remoto, os
privilégios locais para o sinônimo não podem ser concedidos, porque isto implicaria em conceder privilégios
para o objeto remoto, que não é permitido. Conseqüentemente, nenhuma gerência local do privilégio pode
ser executada quando os sinônimos são usados para a transparência da localização.
Usando Procedures
Através do mecanismo de Stored Procedures o Oracle oferece Transparência de Distribuição,
podendo ser de três tipos.
Procedures Locais Referenciando Dados Remotos
Procedures ou functions (standalone ou em Pacotes)
remotos.
podem conter consultas que referencia dados
19
Exemplo:
CREATE PROCEDURE fire_emp (enum NUMBER) AS
BEGIN
DELETE FROM [email protected]
WHERE empno = enum;
END;
Quando o usuário de uma aplicação chama fire_emp procedure, não necessita saber que uma tabela remota
está sendo acessada.
As procedures podem também usar sinônimos para acesso aos objetos remotos.
Procedures Locais Referenciando Procedures Remotas
Procedures podem fazer acesso a procedures em outros sites para acesso aos dados remotos.
Exemplo:
Criação da Procedure local que Chama uma Procedure Remota
CONNECT elvira/tiger@local_db
CREATE PROCEDURE fire_emp (enum NUMBER)
AS
BEGIN
EXECUTE [email protected];
END;
Criação da Procedure remota
CONNECT elvira /[email protected]
CREATE PROCEDURE term_emp (enum NUMBER)
AS
BEGIN
DELETE FROM emp WHERE empno = enum;
END;
Quando um usuário de uma aplicação conectado a local_db chamar a Procedure fire_emp, esta procedure
irá chamar a procedure remota term_emp em hq.acme.com., acessando assim, dados remotos de forma
transparente ao usuário.
Sinônimos Locais Referenciando Procedures Remotas
Como já vimos, podem der criados sinônimos para Procedures remotas.
Exemplo:
Elvira se conecta ao banco sales.acme.com no site local e cria a seguinte procedure:
CREATE PROCEDURE fire_emp (enum NUMBER) AS
BEGIN
DELETE FROM [email protected]
WHERE empno = enum;
20
END;
Elisangela se conecta ao banco supply.acme.com e cria um sinônimo para a procedure remota criada por
Elvira no banco sales:
SQL> CONNECT elisangela/hill@supply
SQL> CREATE PUBLIC SYNONYM emp FOR [email protected];
O usuário pode acessar o sinônimo para executar a procedure remota.
Procedures e Privilégios
Suponha um procedimento local inclua uma consulta que referencie uma tabela remota ou uma
view. O proprietário do procedimento local pode conceder o privilégio executar a todo o usuário, dando
desse modo a esse usuário a abilidade de executar o procedimento e, de alcançar indiretamente dados
remotos.
Em geral, os privilégios para os objetos referenciados dentro de um procedimento não necessitam
ser concedidos explicitamente aos usuários de chamada.
2 - Transparência de Replicação
É quando o SGBD transparece ao usuário a existência de réplicas dos objetos do Banco de Dados,
sendo sua existência controlada pelo Sistema e não pelo usuário.
A replicação dá suporte a uma variedade das aplicações com diferentes necessidades e exigências.
Algumas aplicações permitem a existência de sites locais com visões materializadas em sistemas onde o mais
immportante é a autonomia. Por exemplo, a automatização da equipe de vendas, o serviço de campo, o
varejo, e outras aplicações maciças da distribuição requerem tipicamente que os dados das bases centrais
estejam atualizados com grande número pequenos sites, remotos, que são desconectados frequentemente
da base de dados central. Os membros de uma equipe de vendas devem poder executar transações,
independentemente de estarem conectados à base central. Neste caso, os sites remotos devem ser
autônomos
Sendo assim, o Oracle oferece transparência de replicação, pois para que se faça acesso aos dados
em uma tabela remota através de um snapshot, por exemplo é necessário apenas que a aplicação se
referencie ao nome do snapshot criado, como se os dados fossem locais:
Create Snapshot COMPANY
as SELECT * FROM COMPANY@link_to_master;
SELECT *
FROM COMPANY
WHERE state = ‘DE’;
Fonte: Oracle 8 Advanced Tuning & Administration pag.511
3 - Transparência de Fragmentação
Para acesso a dados fragmentados, o usuário não tem transparência oferecida diretamente pelo Oracle, o
usuário tem que usar view para fazer o acesso.
Redefine the accounts view.
21
CREATE OR REPLACE VIEW accounts AS
SELECT * FROM accounts_jan98
UNION ALL
SELECT * FROM accounts_feb_98
UNION ALL
...
UNION ALL
SELECT * FROM accounts_new PARTITION (nov98)
UNION ALL
SELECT * FROM accounts_new PARTITION (dec98);
Parte 4 – Processamento Distribuído de Consulta
Processamento Distribuído de Consulta
1 – Suporte ao Processamento Distribuído de Consulta
O Oracle oferece suporte à consultas distribuídas transparentes para acesso a dados das bases de
dados múltiplas. Fornece também muitas outras características distribuídas, tais como transações
distribuídas transparentes e two-phase commit inteiramente automático.
Se uma consulta SQL referencia uma ou mais tabelas remotas o otimizador determina
primeiramente se todas as tabelas remotas estão situadas em um mesmo local. Se todas as tabelas estiverem
situadas no mesmo local remoto, o oracle emite a consulta inteira ao local remoto para a execução. O site
remoto emite o resultado ao site local. Isto é chamado de consulta remota (remote SQL statement). Se as
tabelas estiverem situadas em mais de um site, o otimizador irá decompor a consulta em outras consultas
separadas para alcançar cada uma das tabelas remotas. Isto é chamado de consulta distribuída (distributed
SQL statement). O site onde a consulta é executada, chamado "coordenador" é normalmente o site local.
Consulta Remota
Se toda a query SQL for emitida à um mesmo site remoto, o otimizador usa os pseudônimos A1 da
tabela, A2, e assim por diante, para todas as tabelas e colunas na query, a fim evitar conflitos de nome.
Por exemplo:
SELECT DNAME, ENAME
FROM DEPT@REMOTE, EMP@REMOTE
WHERE DEPT.DEPTNO = EMP.DEPTNO;
É enviado so site remoto como:
SELECT A2.DNAME, A1.ENAME
FROM DEPT A2, EMP A1
WHERE A1.DEPTNO = A2.DEPTNO;
Consulta Distribuída
Quando uma consulta alcança dados em um ou mais sites, um site "coordena" a execução da
consulta. Ele é conhecido como "coordenador"; é onde os dados serão juntados, agrupados e requisitados.
Por default, o site local será o diretor. Uma constante chamada DRIVING_SITE permite especificar
manualmente o site coordenador.
22
Por Exemplo:
SELECT
O.CUSTNAME,
P.PROJNO,
E.ENAME,
FROM
ORDERS@DB2
O,
EMP@ORACLE9
E,
WHERE O.PROJNO = P."PROJNO" AND
P."EMPNO"
=
GROUP BY O.CUSTNAME, P."PROJNO", E.ENAME
SUM(E.RATE*P."HOURS")
"PROJECTS"@SYBS
P
E.EMPNO
2 – Tipo de Otimizador de Consulta Utilizado
1- Mecanismo de Otimização
O mecanismo de otimização de consultas do Oracle procede da seguinte forma:

O usuário submete uma query.

O parser passa aquery para o otimizador.

O otimizador (que pode estar usando o RBO (Buled-Based Otimization) ou CBO (Cost-Based
Otimization). Se está usando CBO ele irá buscar informações estatísticas no dicionário.

O plano gerado pelo otimizador é enviado ao Row Source Generator.

È feita a execução da query eretornado o resultado ao usuário.
23
Parser
O parser realize duas tarefas:

Análise Sintática;

Análise Semântica:
Optimizer
O optimizer usa dados internos ou métodos de avaliação de custo para determinar a maneira a mais
eficiente de produzir o resultado da consulta. A saída do optimizer é um plano que descreve o melhor
método de execução.
O Oracle fornece dois tipos de optimização: cost-based optimizer (CBO) and rule-based optimizer
(RBO).
Row Source Generator
Recebe o plano ótimo do otimizador e gera a saída do plano. O plano de execução é uma coleção de
linhas estruturadas em forma de árvore. Neste passo, cada linha retorna uma quantidade de tuplas.
SQL Execution Engine
SQL Execution Engine é o componente que opera sobre o plano de execução gerado para a
consulta, produzindo o resultado da consulta. Cada linha produzida pelo Row Source Generator é executada
pelo SQL Execution Engine.
Tipos de Otimizadores
Rule-Based Optimization (RBO)
Usando o RBO, o otimizador escolhe um plano da execução baseado nos métodos de acesso
disponíveis e no ranking destes trajetos de acesso. O ranking do oracle dos métodos de acesso é
determinado por uma heurística. Se houver mais do que um modo de executar uma consulta, então o RBO
usa sempre a operação com o Ranking mais baixo. Geralmente, as operações de um Rank mais baixo
executam mais rapidamente do que aqueles associados com as construções de um Rank mais elevado. Por
exemplo, um Full Table Scan de uma tabela remota tem um custo estimado maior do que a mesma
operação em uma tabela local idêntica. Para um plano de execução, o otimizador não considera índices em
tabelas remotas.
Métodos de Acesso:
RBO Path 1: Single Row by Rowid
RBO Path 2: Single Row by Cluster Join
RBO Path 3: Single Row by Hash Cluster Key with Unique or Primary Key
RBO Path 4: Single Row by Unique or Primary Key
RBO Path 5: Clustered Join
RBO Path 6: Hash Cluster Key
RBO Path 7: Indexed Cluster Key
RBO Path 8: Composite Index
RBO Path 9: Single-Column Indexes
RBO Path 10: Bounded Range Search on Indexed Columns
RBO Path 11: Unbounded Range Search on Indexed Columns
RBO Path 12: Sort Merge Join
RBO Path 13: MAX or MIN of Indexed Column
24
RBO Path 14: ORDER BY on Indexed Column
RBO Path 15: Full Table Scan
Cost-Based Optimization (CBO)
Pode considerar mais planos de execução do que o RBO. Cost-Based Optimization sabe se os
índices em tabelas remotas estão disponíveis, e em que casos faria a sentido os usar. Considera também
estatísticas dos objetos do esquema envolidos na consulta, além de considerar sugestões de otimização
colocadas como comentários da consulta (hints).
O CBO é mais poderoso que o RBO, por exemplo visões materializadas e tabelas particionadas só
podem ser avaliadas pelo CBO.
O CBO executa as seguintes etapas:
1.
O otimizador gera um conjunto de plantos potenciais de execução para a consulta baseado
em seus trajetos de acesso disponíveis e sugestões.
2.
O otimizador estima o custo de cada plano baseado em estatisticas no dicionário dos dados
para as características da distribuição e do armazenamento dos dados das tabelas, dos índices, e dos
fragementos acessados pela consulta.
O custo é um valor estimado proporcional ao uso previsto do recurso necessitado para a execução executar
de um plano em particular. O optimizer calcula o custo de trajetos de acesso e junções baseado no uso
estimado dos recursos do computador, incluindo I/O, CPU, e memória.
3.
O optimizer compara os custos dos planos e escolhe o plano com o custo o mais baixo.
3 – Mecanismos de Otimização de Consulta Distribuida
Distributed Query Otimization usa o Cost-Based Optimization do Oracle para encontrar ou gerar as
expressões que extraem somente os dados necessários das tabelas remotas, processar os dados em um site
remoto ou às vezes no site local, e emitir os resultados ao site local para o processamento final.
25
O otimizador escolhe planos de execução para as consultas que acessam dados em bases de dados
remotas da mesma maneira que escolhe planos as consultas que acessam somente dados locais:

Se todas as tabelas acessadas por uma consulta estiverem no mesmo site remoto o oracle
emitirá a consulta a essa base de dados remota. O site remoto executa a consulta e emite somente os
resultados de volta à base de dados local.

Se uma consulta acessa tabelas que estão situadas em bases de dados diferentes, o oracle
decompõe a consulta em fragmentos individuais, e cada um acessa as tabelas de um mesmo site remoto . O
oracle emite então cada fragmento à base de dados que acessa. O site remoto para cada uma destas bases de
dados executa seu fragmento e retorna os resultados à base de dados local, onde o site local pode executar
algum processamento adicional se quiser.
Ao escolher um plano de execução para uma consulta distribuída, o optimizador considera os índices
disponíveis em bases de dados remotas da mesma maaneira que faz para índices na base de dados local. O
optimizador considera também estatisticas em bases de dados remotas para o CBO. Além disso, o optimizer
considera a localização dos dados ao estimar o custo de acesso. Por exemplo, um Full-Table Scan em uma
base remota tem um custo estimado maior que em uma tabela local idêntica.
Parte 5 – Processamento Distribuído de Transação
Processamento Distribuído de Transação

Suporte ao processamento distribuído de transação
O que é uma transação distribuída?
Uma transação distribuída é um comando que individualmente ou em grupo altera dois ou mais
participantes de um banco de dados distribuído. Se os comandos referenciarem apenas um participante a
transação será remota e não distribuída.
26
1.
Session Tree
O Oracle® define uma session tree de todos os participantes da transação distribuída. A Session Tree é um
modelo hierárquico que descreve as relações entre os participantes envolvidos. Cada participante possui
uma tarefa na transação, por exemplo, o participante que originou a transação é o coordenador global, e o
participante que inicia o commit ou o rollback é chamado de commit point site.









Todos os participantes de uma session tree de uma transação distribuída assume uma ou mais das seguintes
responsabilidades:
Cliente;
Servidor de Banco de Dados;
Coordenador;
Participante;
O Ponto de Commit.
As definições das responsabilidades dos participantes de uma transação distribuída são definidas por:
Se a transação é local ou remota;
A força do Ponto de Commit;
Se todos os dados requeridos estão disponíveis no local, ou outros participantes tiverem que
referenciá-los para completarem a transação;
O Participante é Read-Only.
O Cliente
Um participante age como cliente quando referencia informações em um banco de dados de outro
participante, no exemplo acima o site SALES.FINANCE.COM é um cliente dos participantes (servidores
de banco de dados) onde estão hospedados os bancos WAREHOUSE e FINANCE.
27
Servidores e Servidores de Banco de Dados
O servidor é um participante que seja diretamente referenciado por uma transação distribuída ou é
requisitado para participar da transação por outro participante necessitar de dados de seu banco.
No exemplo uma aplicação no participante que hospeda o banco de dados SALES inicia uma transação
distribuída que acessa dados dos participantes que hospedam os bancos WAREHOUSE e FINANCE.
Neste caso o SALES.FINANCE.COM é um cliente e WAREHOUSE e FINANCE são servidores de
banco de dados. SALES é um servidor de banco de dados e um cliente uma vez que está requisitando uma
mudança no banco de dados SALES.
Coordenador Local (local coodinator)
Um participante que referencie dados em outros participantes para completar a transação é chamado de
coordenador local.
No exemplo SALES.ACME.COM aparece como coordenador global, mas também é considerado um
coordenador local por coordenar diretamente os participantes que referencia: WAREHOUSE.ACME.COM
e FINANCE.ACME.COM.
O Coordenador local é responsável por coordenar a transação pelos participantes ligados diretamente a ele:




Recebendo e propagando informações sobre o estado destes participantes;
Passando as queries para eles;
Recebendo queries desses participantes e repassando a outros;
Retornando os resultados das queries para o participante que a iniciou.
Coordenador Global (Global Coodinator)
O participante onde a transação distribuída se originou (onde a aplicação de banco de dados está conectada
diretamente) é chamado de coordenador global. Ele realiza as seguintes operações durante uma transação
distribuída:

Todos os atributos SQL, procedimentos armazenados, etc... São enviados pelo coordenador
global para os participantes ligados a ele diretamente.
No exemplo o coordenador global é o participante SALES.ACME.COM, que referencia informações dos
servidores de banco de dados WAREHOUSE.ACME.COM e FINANCE.ACME.COM



Algumas atribuições do coordenador global:
Informa a todos os participantes diretos que não sejam o commit point site para executar a
preparação da transação;
Se todos os participantes executarem o prepare corretamente o coordenador global instrui o
commit point site para iniciar o commit global da transação;
Se houver uma ou mais mensagens de abort o coordenador global instrui todos os participantes
a executarem o rollback da transação.
28
Ponto de Commit (Commit Point Site)
O Trabelho do ponto de commit é de iniciar um commit ou rollback instruído pelo coordenador global. O
Administrador do sistema deve designar um participante para ser o commit point site na session tree
definindo para todos os participantes um commit point strength. O participante selecionado para ser o
commit point site deve ser o que possua mais dados críticos.


O participante commit point site distingui-se dos demais por:
Nunca entrar no modo de prepare. Essa é uma grande vantagem uma vez que contendo os
dados mais críticos, seus dados estarão sempre disponíveis sem gerar lock ou ficar em espera.
Determina quando toda a transação terminou o commit ou rollback.
A transação pode ser considerada pronta para o commit quando todos os participantes enviam a mensagem
de prepared e já foi executado o commit no ponto de commit. Seu log é atualizado no momento em que seu
commit é finalizado.
Commit Point Strength
Todos os participantes do modelo distribuído que sejam servidores de banco de dados devem possuir um
commit point strength. De todos os participantes referenciados diretamente pelo coordenador global o
commit point site será o que possuir maior commit point strength.
29
2.
Two-Phase Commit
Todos os participantes de uma transação distribuída devem tomar a mesma decisão quanto à ação a ser
tomada para a transação. Todos devem executar um commit ou rollback.
O Oracle® controla e monitora o Commit e Rollback de uma transação distribuída
automaticamente e mantém a integridade do Banco de Dados utilizando o mecanismo de two-phase
commit. Esse mecanismo é totalmente transparente ao usuário e ao desenvolvedor.
Para executar um commit de uma transação distribuída existem duas fases distintas (two-phase commit).
Fase de Preparação
Fase de Commit
a.
Fase onde o Coordenador manda os participantes se prepararem
(para o commit ou rollback se houver alguma falha).
Caso todos os participantes respondem que estão preparados, o
Coordenador ordena que todos os participantes executem o
commit. Caso algum não possa, ele ordena a todos que executem
um rollback.
Fase de Preparação
A primeira fase para commitar uma transação distribuída é a fase de preparação onde o commit da transação
não foi totalmente carregado. Na preparação os participantes registram a informação necessária para
posteriormente possa ser efetuado um commit ou um rollback
Quando um participante recebe uma ordem de preparação ele pode responder de 3 maneiras:
Preparado
Somente-Leitura
Abortar
O participante está preparado, garantindo um posterior rollback ou
commit.
Nenhum dado foi alterado ou pode ser alterado, então a
preparação não é necessária.
O participante não conseguiu se preparar..
Fase de Preparação pelos Participantes






Para executar a preparação os participantes devem executar os seguintes passos:
O participante manda a ordem para seus descendentes prepararem;
Checa se a transação alterou algum dado nele ou em algum de seus descendentes. Caso não haja
alteração, passa ao próximo passo em responde com mensagem de Somente-Leitura (read-only);
O participante aloca todos os recursos necessários para a execução do commit no caso existir
alguma alteração;
O participante grava em seu log todas as entradas correspondentes à alteração dos dados;
O participante garante que, o lock desta transação está habilitado a sobreviver a uma possível falha;
O participante responde ao Coordenador com uma mensagem de preparado ou caso não tenha sido
possível executar o prepare em ele mesmo ou em algum de seus descendentes, responde com uma
mensagem de Abort.
A execução desses passos garante que a transação pode executar um commit ou um rollback neste SGBD.
Sendo enviada a mensagem de preparado o SGBD fica em estado de espera até que receba um comando de
commit ou rollback.
30
Resposta Read-Only
Quando um participante é perguntado para preparar e as operações executadas no banco não alteram os
dados do participante em questão, ele responde com uma mensagem de Read-Only. Esses SGBD não
participam da segunda fase, a do commit.
Preparação sem sucesso (mensagem de abort)


Quando o participante não consegue se preparar, ele segue os seguintes passos:
O participante libera os recursos alocados para a transação e executa um rollback da parte local
da transação;
Responde ao seu coordenador a mensagem de “abort”.
Essas ações se propagam para os outros participantes que executam o rollback da transação mantendo a
integridade do banco. Forçando assim a regra principal de uma transação distribuída no Oracle e do
protocolo de two-phase commit, ou executa um commit em todos participantes ou é executado o rollback.
b.
Fase de commit
Esta é a segunda fase para o commit de uma transação distribuída. Antes da ocorrência desta fase todos os
participantes referenciados garantiram que possuem todos os recursos necessários para executar o commit
na transação.


A fase de commit consiste nos seguintes passos:
O Coordenador envia a mensagem aos participantes que devem executar o commit da transação;
O Oracle8® executa o commit na porção local da transação distribuída, liberando os locks, e
guarda no arquivo de log indicando o fim da transação.
Quando finalizada a fase de commit, os dados em todos os participantes estão consistentes uns com os
outros.

Protocolo de recuperação (recovery)
The Recoverer (RECO) Background Process
O processo de background RECO de uma instancia do Oracle8® resolve automaticamente todos os erros
envolvendo transações distribuídas.
O RECO pode utilizar uma conexão já aberta ou estabelecer uma nova conexão com os participantes
envolvidos na transação que falhou. Quando a conexão for estabelecida, o RECO resolve todos os erros da
transação distribuída. As linhas correspondentes dos participantes a transação são removidas de cada banco
de dados.
O processo de recuperação, RECO, pode ser habilitado ou desabilitado no sistema usando o comando
ALTER SYSTEM ENABLED/DISABLE DISTRIBUTED RECOVERY.
31
Ações do Coordenador para casos de falha

Falha no Estágio Inicial
Reenvia o comando de prepare para os participantes.

Falha no Estágio Wait
Espera o timeout e reenvia o comando de prepare para o participante que não respondeu.

Falha no Estágio Abort ou Commit
Reenvia o comando de abort ou commit, caso o participante não receba o comando após o timeout executa o
abort.
Ações do Participante para casos de falha

Falha no Estágio Inicial
Executa o abort por não conseguir o prepare.

Falha no Estágio Ready
Envia decisão abort ou commit. E espera a decisão do coordenador.

Controle de Conflitos
Resolução de Conflitos

Automatic versus Manual Conflict Resolution
Você pode usar sempre as características de resolução de conflitos do Oracle® para resolvê-los quando
ocorrer. Quando você não configurar a resolução automática de conflitos para tabelas replicadas, o Oracle®
simplesmente registra no log dos sites os conflitos. Neste caso você é forçado a resolver os conflitos
manualmente para preservar a integridade do banco.

Update Conflict Resolution and Column Groups
O Oracle® usa grupos de colunas para resolver conflitos. Um grupo de colunas é um grupamento lógico de
uma ou mais colunas de uma tabela replicada. Toda coluna numa tabela replicada faz parte de um grupo de
coluna simples. Quando configurando as tabelas replicadas no Master site, você pode criar grupos de
colunas e associá-los colunas e métodos de resolução de conflitos.

Uniqueness Conflict Resolution
Na construção de ambientes replicados avançados podem ocorrer erros de chaves ou campos únicos. Para
isso associa-se métodos de resolução de conflitos a PRIMARY KEY ou UNIQUE constraint numa tabela
replicada.

Delete Conflict Resolution
Para o caso de conflitos de deleção pode-se escrever os métodos e associá-los as tabelas replicadas. O
Oracle® não oferece nenhum método para resolução de conflitos de deleção.





Métodos de resolução de conflitos de update (concorrência)
O Oracle® possui alguns métodos já prontos para a solução de problemas de concorrência:
Additive and Average;
Minimum and Maximum;
Timestamp;
Overwrite and discard;
Priority groups and site priority.
32
Additive and Average (Adição e Média)
Este método funciona com grupos de colunas, consistido de uma coluna numérica simples.
Additive:




Valor corrente = valor corrente + (valor novo – valor antigo).
Average:
Valor corrente = (valor corrente + Valor Novo)/2.
Maximum and Minimum (Máximo e mínimo)
Neste método ele compara o novo valor do site original com o valor corrente do site de destino. Chamando
o método de resolução de conflito Minimum, se o novo valor for maior do que o valor corrente ele altera o
valor corrente para o novo valor. Caso seja menor o valor corrente permanece inalterado. O contrario
acontece caso seja chamado o método Maximum.
Para o método Maximum, o valor da coluna está sempre crescendo;
Para o método Minimum, o valor está sempre decrescendo.
Timestamp
Para a utilização deste método você deve designar uma coluna da tabela replicada do tipo date. Quando uma
aplicação muda alguma coluna no grupo, a aplicação deve alterar o timestamp com a data do sistema atual.
Para a alteração do site de destino o timestamp registro do site de origem deve ser maior do que o do
destino.
Overwrite and discard
Este método ignora os dados existentes no site original e no de destino e não se pode garantir a
convergência para o caso de houver mais de um master site. Esses métodos são utilizados para o caso de um
único master e vários snapshots.



Esses métodos são usáveis quando:
Possui um master site apenas;
Não existe regra de negócio se executar um update após o outro;
Se existir vários sites master e haja a necessidade de se alterar.
Priority Groups and Site Priority
Possibilita atribuir um valor de prioridade para cada coluna. Caso o Oracle® detecte um conflito, ele
atualiza a tabela cuja prioridade seja menor usando os dados da tabela com maior prioridade.
Parte 6 – Suporte a acesso a dados de SGBD Heterogêneo
A Oracle possui duas soluções para o acesso e a integração de dados de uma base não Oracle. São elas o
Oracle Transparent Gateways e o Generic Conectivity.
Generic Conectivity
O Generic Conectivity é uma solução genérica que utiliza os drivers ODBC ou OLE DB para acessar
qualquer compilador ODBC ou OLE DB de um sistema não Oracle. Permitindo assim transparência de
conexão com bases de dados como Acess, Excel, DBase e FoxPro.
33
Oracle Transparent Gateways
Em contraste com o Generic Conectivity o Oracle Transparent Gateways possui soluções especialmente
codificadas para o sistema não Oracle. Gerando uma solução otimizada, com mais funcionalidades e melhor
performance do que o generic Conectivity.
Acesso a dados do SGBD não Oracle
O Oracle cria um link com a base de dados não Oracle.
Para acessar dados de uma tabela em um banco não Oracle:
SELECT SUBSTR(ENAME,1,5) FROM EMP@GTWLINK
34
Download