Esse artigo faz parte da revista SQL Magazine edição 59. Clique aqui para ler todos os artigos desta edição

o:p>

O Oracle Heterogeneous Services, denominado simplesmente OHS, é um recurso que estende o uso de database links fornecendo um meio mais simples de acessar bancos de dados de diferentes fabricantes a partir de um banco de dados em Oracle. Além de ser usado como uma solução para processos de ETL (Extração, Transformação e Carga de Dados) entre sistemas diferentes, ele é particularmente útil para alcançar bancos de dados legados com custos baixos de implementação. Nesse artigo, será demonstrado como recuperar dados de uma aplicação antiga cujo os dados de um sistema de vendas se encontram em um servidor MySQL, através do Oracle XE. Como ambos estão instalados em um mesmo computador, este estudo de caso dispensa  o uso de dois servidores físicos, facilitando assim o entendimento deste recurso.

 

Introdução aos Database Links

Um database link, ou simplesmente dblink, é representado como um objeto particular de um banco de dados. Diversos fabricantes implementam este recurso de diferentes maneiras, obedecendo aos critérios e conceitos de um sistema de banco de dados em particular. Sua principal função é promover um tipo de conexão na qual um determinado banco de dados seja capaz de se comunicar com outro banco de dados, situado em um local remoto da rede. Dessa maneira, um banco de dados qualquer que disponha de um objeto do tipo dblink passa a atuar como cliente deste banco de dados remoto, podendo consultar e manipular os objetos deste banco remoto (tais como tabelas, visões, sinônimos, procedures, functions, entre outros).

Para o banco de dados Oracle XE, um dblink é um objeto que pertence a um  schema em particular (ver Nota 1) e que pode ter até dois níveis de acesso: privado ou público. Um dblink do tipo privado é aquele em que apenas o usuário que possui o objeto pode acessar, ou seja, um cliente que se conecta ao Oracle XE com o usuário XPTO não será capaz de fazer uso de um dblink de propriedade do usuário SERGIO, por exemplo.  Um database link do tipo Público permite que qualquer usuário do banco de dados possa utilizá-lo indistintamente para acessar um objeto remoto. A sintaxe do comando para se criar um dblink do tipo público ou privado é praticamente a mesma. O que define o nível de acesso do objeto que está sendo criado, na verdade, é a existência da palavra chave “PUBLIC” ou não na construção do dblink, conforme exemplificado na Listagem 1.

 

Listagem 1. Criando um dblink do tipo público

 

1: create PUBLIC database link “DBLINK_PUBLICO”

2:    connect to “SERGIO”

3:    identified by “senha do usuário SERGIO”

4: using ‘TNS_MYSQL’;

 

 

Nota 1: Schema

Na arquitetura Oracle, um schema é o local onde os objetos de um banco de dados são agrupados. (Tabelas, visões, índices, procedures, etc). Por definição, um schema pertence a um e somente um usuário do banco de dados. Portanto, ao se criar um usuário no Oracle, automaticamente um schema também é criado e atribuído a este novo usuário. Não é possível, por exemplo, forçar o Oracle a entender que um determinado schema pertence a um outro usuário. Apesar de simples, este conceito é muito importante, já que muitos tratam um schema e um usuário como sendo a mesma coisa. No Oracle, essa associação é válida, mas pode confundir quando lidamos com outros tipos de banco de dados onde esse conceito de schema/usuário é distinto e completamente desassociado. No MySQL5, por exemplo, um schema é o mesmo que um banco de dados.

 

Na Listagem 1, a palavra chave PUBLIC (linha 1) define o nível de acesso ao database link que está sendo criado. Na linha 2, o parâmetro “connect to” diz ao Oracle XE o nome do usuário do banco de  dados remoto para o qual o dblink deverá apontar, neste caso um usuário do MySQL. O parâmetro “identified by” contém a senha para este usuário remoto e, por último, na linha 4, o nome do parâmetro “USING” contém o valor do que é chamado, pela documentação da Oracle, de “connect_string”. Este parâmetro informa a string de conexão para o banco de dados remoto, e ao longo deste artigo entenderemos melhor como podemos nomear uma conexão. Caso tivéssemos omitido na linha 1 a palavra chave PUBLIC, o Oracle XE entenderia que o DBLINK que está sendo criado é do tipo privado, e somente o próprio usuário que está criando-o poderia fazer uso dele. Um exemplo de como manipular e recuperar dados de um database remoto é mostrado na Listagem 2.

 

Listagem 2. Selecionando e manipulando dados de um dblink

 

1: select * from tb_pagamentos@dblink_publico;

2: insert into tb_pagamentos@dblink_publico

3:       (favorecido,valor)

4:       values(‘Casas Bahia’,’9,99’);

5: update tb_pagamentos@dblink_publico

6:       set conciliado =’sim’;

 

Na Listagem 2 há três exemplos de como usar um database link para recuperar e manipular dados de uma tabela remota chamada “tb_pagamentos” usando o database link criado na Listagem 1 (DBLINK_PUBLICO) . Na linha 1, o usuário simplesmente realiza um SELECT informando o nome da tabela (exatamente como faria se a tabela fizesse parte do perfil de acesso definido para o usuário que está conectado ao servidor de banco de dados) e acrescenta o símbolo “@” seguido do nome do dblink recém-criado. O comando irá trazer todos os registros da tabela selecionada.

Nas linhas 2 a 4 o usuário está inserindo um novo registro na tabela remota, praticamente igual ao que seria feito se a tabela fosse localmente acessível. O que está sendo adicionado, novamente, é o símbolo “@” seguido do nome do dblink.

Por último, está sendo feita uma atualização no campo “conciliado” que compõe a tabela remota “tb_pagamentos”, novamente adicionando o símbolo “@” e o nome do dblink.

Um dblink depende diretamente de alguns elementos de rede que devem ser configurados apropriadamente. Em sua forma mais elementar, ele só é capaz de interagir com um banco de dados remoto que também seja Oracle. Além disso, esta conectividade seria promovida pelos próprios serviços de rede do Oracle, também conhecidos por “serviços do SQL*Net” que, por sua vez, foram projetados exatamente para que diferentes servidores Oracle, inclusive de diferentes versões, interajam entre si. Sendo assim, como fazer com que o Oracle XE alcance um banco de dados MySQL, por exemplo, através de um dblink? A solução é utilizar um driver ODBC para integrar os serviços do SQL*Net e torná-lo capaz de entender a comunicação com um servidor de outro tipo.

...

Quer ler esse conteúdo completo? Tenha acesso completo