Por : Edivaldo Vicente dos Santos & Érika Oliveira de Granado
st3\:*{behavior:url(#ieooui) }st2\:*{behavior:url(#ieooui) }st1\:*{behavior:url(#ieooui) }

I – Introdução:

 

                Em diversas situações temos a necessidade de integrar bases de dados que se encontram em Sistemas de Gerenciamento de Dados diferentes(Oracle, MS SQL Server, MySQL, DB2, Informix, etc...). Existem diversas formas de realizar essa tarefa,  transferências de dados via arquivos de carga, comunicação via serviços(XML, webservices), acesso direto via Gateways de banco de dados, etc...nesse artigo trataremos da conectividade entre o SGBD Oracle e outros SGBDs  Não-Oracle lançando mão de Serviços Heterogêneos HS.

 

            HS, Herterogeneous Services, no SGBD Oracle permite a conexão entre SGBDs Oracle e Não-Oracle, sendo parte integrante do produto, inclusive na versão 10XE (Express Edition – gratuita mas com restrições de capacidade). Os dois serviços fornecidos por HS são:

 

·    Oracle Transparent Gateway – Que permite  o acesso a outras bases de forma totalmente transparente, nesse caso não é necessário levar em conta, por exemplo, as diferenças de dialeto no SQL, ou o fato do dicionário de dados do Oracle ser inteiramente em maiúscula, trataremos desses pontos oportunamente.

 

·     Generic Connectivity – Que permite a conexão entre as bases de dados utilizando-se  de drives ODBC(acrônimo de:Open Data Base Connectivity) ou OLEDB. Esse tipo de conexão, Generic Connectivity, será o foco do presente artigo.

 

 

II – Características de uma Conexão Genérica.

 

 

                Arquitetura de conexão genérica é implementada utilizando-se  um  Agente de ODBC de HS.Um agente de ODBC é incluído como parte de seu SGBD Oracle e instalado diretório de instalação ORACLE_HOME.

 

               

 

III –Estabelecendo uma conexão entre o SGBD Oracle e o MySQL

 

 

        Iremos realizar um passo a passo conectando o SGBD Oracle ao MySQL, versão 5 ou superior, via uma conexão genérica ODBC, nesse exemplo usaremos um SGBD Oracle 10G instalado em um ambiente Windows.

 

1.  Providencie a instalação do drive de ODBC na máquina onde está instalado o Oracle. Esse drive pode ser obtido em: http://dev.mysql.com/downloads/connector/odbc/5.1.html

 

 

2.  Proceda a inclusão de uma entrada de ODBC no Windows para o banco MySQL. Dois detalhes importantes: 1) Esses passos são genéricos servem para qualquer banco Não-Oracle; 2)Não esquecer que esse nome, dado na entrada de ODBC, será utilizado abaixo.

 

 

3.  Nesse momento iremos inserir uma entrada no arquivo tnsnames.ora, em Oracle_Home\NETWORK\ADMIN, em máquinas Unix $ORACLE_HOME/network/admin.

 

Exemplo de arquivo tnsnames.ora

 

# tnsnames.ora Network Configuration File: C:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora

# Generated by Oracle configuration tools.

 

BABYLON =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = EXCALIBUR)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME =CAMELOT)

    )

  )

 

MySQL =                            # Esse nome deve ser o mesmo que foi dado na entrada de ODBC
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = EXCALIBUR)(PORT = 1521))
)
(CONNECT_
DATA =
(SID = MySQL)                # o SID  deve
ser o mesmo que foi dado no ODBC )
(HS=OK)
)

 

LISTENER_BABYLON =

  (ADDRESS = (PROTOCOL = TCP)(HOST = EXCALIBUR)(PORT = 1522))

 

 

EXTPROC_CONNECTION_DATA =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

    )

    (CONNECT_DATA =

      (SID = PLSExtProc)

      (PRESENTATION = RO)

    )

  )

 

 

# fim do arquivo

 

 

   Nesse arquivo criamos a entrada MySQL com o HS habilitado.

 

4. Realizaremos e a inclusão de uma entrada no arquivo Listerner.ora, sua localização é o mesmo que o item anterior, tnsnames.ora, em Oracle_Home\NETWORK\ADMIN, em máquinas Unix $ORACLE_HOME/network/admin.

 

Exemplo de arquivo listener.ora

 

# listener.ora Network Configuration File: C:\oracle\product\10.2.0\db_1\network\admin\listener.ora

# Generated by Oracle configuration tools.

 

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)

      (PROGRAM = extproc)

    )

 (SID_DESC =
(SID_NAME = MySQL) # SID é o
mesmo que foi dado no ODBC
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)

(PROGRAM = hsodbc)  # Este é o nome do executavel do hs(Agente)
)  

  )

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

      (ADDRESS = (PROTOCOL = TCP)(HOST = EXCALIBUR)(PORT = 1522))

    )

  )

 

<!--[if !supportLists]-->5.<!--[endif]-->Devemos nesse momento realizar a configuração do HS propriamente dito, para isso criaremos um arquivo em  C:\oracle\product\10.2.0\db_1\hs\admin (ORACLE_HOME\hs\admin). Um detalhe o nome do arquivo deverá ser init<Nome_entrada>.ora no nosso caso initMySQL.ora.

 

 

# This is a sample agent init file that contains the HS parameters that are

# needed for an ODBC Agent.

 

#

# HS init parameters

#

HS_FDS_CONNECT_INFO = MySQL # Entrada do ODBC  
HS_FDS_TRACE_LEVEL = 0  # Nível do  trace 0 - 4 (Verifique a documentação) , LOG.
HS_FDS_TRACE_FILE_NAME = MySQL.trc  # Nome do arquivo de trace

 

#

# Environment variables required for the non-Oracle system

#

#set =

 

#### Fim do arquivo 


6. Nesse momento devemos re-iniciar o Listener, podemos utilizar os seguintes comandos:

 

 

lsnrctl stop


                                lsnrctl start
 

7. Criar um dblink no banco oracle apontado para usar o servico MySQL:
CREATE DATABASE LINK dblink_MYSQL  connect to "USER_MYSQL" identified by "PASSWORD_USER"  using     ‘MySQL’ ;    #    O usuário e senha devem estar entre aspas duplas, pois  o Oracle é case não-sensitivo e dessa foram estamos instruindo ao banco que o usuário e a senha devem ser enviado respeitando a forma o qual foram digitados(Case Sensitive).

 
8. Concluídos esses procedimentos podemos então a partir da base Oracle acessar a base MySQL, não-Oracle, da seguinte forma:

 

      SELECT  * FROM  “Tabela”.@ dblink_MYSQL;

 

 Nesse caso tenhamos que acessar os campos, e eles não estejam em maisuculas no Banco de Dados, teremos que fazer o seguinte:

 

        SELECT  “Nome”,”Departamento” FROM  “Departamento”.@ dblink_MYSQL;

 

         Repare a necessidade das aspas duplas(“ “) em função do dicionário de dados do Oracle ser em maiúsculas todos esses campos são convertidos para maiúsculas, o que para alguns bancos acessados dessa maneira isso pode se tornar um problema.

 

      Concluindo essa é  mais uma  possibilidade para acessar um outro  Banco de Dados, devemos ter em foco  que essa opção deixa a dever muitas vezes em desempenho, porém sua praticidade e usabilidade para pequenos volumes de dados nos permite utilizar essa técnica para produzir um ambiente de SGBD mais integrado e gerenciavel.

    

   

IV – Para saber mais

 

 

 

 

http://www.databasejournal.com/features/oracle/article.php/10893_3442661_1/Making-a-Connection-from-Oracle-to-SQL-Server.htm

 

http://download-east.oracle.com/docs/cd/B19306_01/gateways.102/b14270.pdf

 

http://www.iselfschooling.com/mc4articles/odbc4sqlserver.htm

 

 

http://www.scribd.com/doc/3146805/Oracle-Heterogeneous-Configuration-for-MySQL-with-ODBCOLEDB