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
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
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
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
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.
...
