Home - www.devmedia.com.br

Criação de Database Links

Um database link é um objeto criado em um esquema de um banco de dados que possibilita o acesso a objetos de outro banco de dados, seja ele Oracle ou não. Esse tipo de sistema é conhecido como Sistema de Banco de Bados Diatriuídos e pode ser Homogêneo – quando acessa outros banco de dados Oracle - e Heterogêneo – quando acessam outros tipos de bancos de dados.

Para acessar bancos de dados que não sejam Oracle é necessário utilizar o Serviço Oracle Heterogeneous Services em conjunto com um agente.

O Heterogeneous Services é um componente integrante do Oracle server a partir de sua versão 8i que habilita a tecnologia dos produtos Oracle Transparent Gateway, sendo que Heterogeneous Services provê uma arquitetura comum e mecanismos de administração para os produtos Oracle gateway, além de outras facilidades de acesso a bancos heterogêneos.

Para acessar um banco de dados não Oracle utilizando um Oracle Transparent Gateway (agente) deve-se selecionar uma aplicação específica do sistema, ou seja, cada banco de dados específico requer um agente diferente.

Por exemplo, para criar um database link com um banco de dados Sybase é necessário obter um gateway transparente específico para Sybase para que então o banco de dados Oracle possa comunicar-se com ele. O agente executa comandos SQL e requisições de transações a bancos de dados não Oracle em nome do usuário da base de dados Oracle.

Pode-se, também, utilizar uma conectividade genérica para acessar bancos de dados não Oracle, como os protocolos ODBC ou OLE DB, através do uso dos Heterogeneous Services ODBC e OLE-DB, sem a necessidade de adquirir e configurar um agente específico para o banco de dados que se deseja acessar.

Neste artigo irei ensinar, em detalhes, a criar um database link homogêneo entre bancos de dados (inclusive de diferentes versões) Oracle. Ao criar um database link é possível utilizar e referenciar tabelas e visões do outro banco de dados, acrescentando ao final do nome destes objetos @nome_do_dblink.

Com o dblink e os privilégios necessários é possível utilizar comandos SELECT, INSERT, UPDATE, DELETE ou LOCK TABLE sobre os objetos desejados do banco de dados remoto, sabendo que uma transação do banco de dados irá incluir os comandos DML (linguagem de manipulação de dados) direcionados a dblinks, tornando as operações de COMMIT e ROLLBACK sobre tais bases transparente.

Para a criação de um database link alguns pré-requisitos devem ser observados:

  • O usuário que irá criar o database link precisa ter o privilégio de sistema CREATE DATABASE LINK (para database links privados) ou CREATE PUBLIC DATABASE LINK (para database links públicos), além do privilégio de sistema CREATE SESSION no banco de dados Oracle remoto.
  • A ferramenta Oracle Net precisa estar instalada tanto para o banco de dados local quanto para o remoto.
  • O valor da variável GLOBAL_NAMES na instância onde o database link será criado, se configurada no arquivo de inicialização ou na sessão corrente (ALTER SESSION SET) do banco de dados como TRUE o nome global do banco de dados remoto deve ser utilizado (composto pelo nome_do_banco.domínio, ou seja, os parâmetros db_name.db_domain do arquivo de inicialização: initSID.ora). O nome global do banco de dados também pode ser descoberto através da execução do seguinte comando SELECT no banco remoto:

select GLOBAL_NAME from GLOBAL_NAME;

A criação, propriamente dita, de um database link é realizada conectando-se no banco de dados local com um usuário que possua os privilégios necessários e executando o seguinte comando:

CREATE DATABASE LINK nome_do_dblink
CONNECT TO usuário_banco_remoto IDENTIFIED BY senha
USING 'connect_string';

Exemplo:

CREATE DATABASE LINK PRODUC
CONNECT TO scott IDENTIFIED BY tiger
USING 'PRODUC';

Com o comando especificado acima, o usuário atualmente conectado pode conectar-se ao banco de dados remoto PRODUC com se fosse o usuário Scott/tiger deste banco de dados remoto. Vale lembrar que o usuário especificado na criação do dblink deve existir no banco de dados remoto e caso a senha do usuário de conexão neste banco seja alterada é necessário destruir (DROP DATABASE LINK) e recriar o dblink com a identificação da nova senha do usuário de conexão, caso contrário o dblink deixará de funcionar.

Quando o usuário é especificado, juntamente com sua senha, na cláusula CONNECT TO, tem-se um database link especificado, caso contrário, tem-se um database link anônimo (ou conectado). No caso de database links anônimos o usuário da sessão corrente será utilizado como padrão. Por exemplo:

CREATE DATABASE LINK PRODUC USING 'PRODUC';

O valor especificado na cláusula USING é conhecido como connect_string (ou net_connect_string a partir do Oracle8i). A connect string precisa estar definida no Net8, no arquivo de configurações de nome TNSNAMES.ORA.

Por Exemplo:

PRODUC = (DESCRIPTION = (ADDRESS = (COMMUNITY = tcp.world)
       (PROTOCOL = TCP) (Host = meteoro) (Port = 1521))
       (CONNECT_DATA = (SID = PRODUC) (GLOBAL_NAME = PRODUC.com.br)
      (SERVER = DEDICATED)))

Para testar se o dblink foi criado com sucesso pode-se utilizar o seguinte comendo SELECT:

SELECT * FROM emp@PRODUC;

Para manter-se a transparência no acesso a objetos de outros bancos de dados pode-se criar sinônimos públicos para os objetos acessados através do dblink.

Por exemplo:

CREATE PUBLIC SYNONYM emp
FOR scott.emp@PRODUC

Pode-se também criar um dbkink como PUBLIC, que permite a todos os usuários do banco de dados local acessar os objetos do banco de dados remoto. Em geral, a opção de databases links públicos são criados apenas quando se utiliza a cláusula de autenticação, garantindo o aspecto de segurança no acesso a dados. Esta opção de database link está disponível apenas em configuração de servidores multi-thread.

Exemplo:

CREATE SHARED PUBLIC DATABASE LINK PUBLIC
CONNECT TO scott IDENTIFIED BY tiger
AUTHENTICATED BY admin IDENTIFIED BY adm123
USING 'PRODUC';

A cláusula AUTHENTICATED especifica o usuário e senha, neste exemplo ADMIN/ADM123 na instância remota, permitindo autenticar o usuário para o servidor remoto, potencializando o aspecto de segurança.

Para identificar quais os database links disponíveis ao usuário atual e para onde os mesmos apontam o seguinte comando SELECT pode ser utilizado para acessar a view de DBA, dba_db_links:

select OWNER, DB_LINK, USERNAME, HOST,
to_char(CREATED,'MM/DD/YYYY HH24:MI:SS') Criação
from dba_db_links
order by OWNER, DB_LINK;

Onde:

Owner – Nome do usuário criou o dblink;
DBLink – Nome do dblink;
Username – Nome do usuário para log no banco remoto;
Host – SQL*Net de conexão (encontrada no arquico TNSNAMES.ORA);
Created – Data e hora de criação do dblink.

Restrições:

  • As seguintes operações não podem ser desenvolvidas utilizando-se database links:
    Conceder privilégios em objetos remotos;
  • Executar operações de DESCRIBE em alguns objetos remotos, com exceção de tabelas, views, procedures e functions;
  • Realizar operações de ANALYZE objetosremotos;
  • Definir integridade referencial;
  • Conceder roles à usuários em a banco de dados remoto;
  • Obter roles além das padrões do usuário de conexão no banco de dados remoto e
    Executar consultas com hash joins.

 

 

Damaris Fanderuff é mestre e doutoranda em Engenharia de Produção e Sistemas pela UFSC e bacharel em Ciência da Computação pela FURB. Ministra as disciplinas de Banco de Dados I e II na UNIFEBE – Brusque. É autora dos livros Oracle 8i - Utilizando SQL*Plus e PL/Sql (2000) e Dominando Oracle 9i - Modelagem e Desenvolvimento (2003), ambos publicados pela Makron Books e Pearson Education do Brasil. Presta consultoria e treinamentos em Business Intelligence e ferramentas Oracle para diversas empresas em todo o pais.

  Definição de Tabelas e Registros de PL/SQL    
  SQL Dinâmico no Oracle    
  Criação de Database Links    
  Leitura e Gravação em Arquivo Texto    
  Manipulação de Cursores em PL/SQL    
  Boas-Vindas    
     

 

Todos os direitos reservados: DevMedia Group
SQL Magazine - 2004