domingo, 31 de maio de 2015

Integração de banco de dados Oracle com MySQL - Ambiente Linux

Oi pessoal!

Depois de um bom tempo sem postar nada aqui no Blog, decidi retomar e ajudar os "navegantes" da tecnologia a resolver os problemas do cotidiano, coisas que enfrentamos no dia-a-dia e que certamente nos tiram um bocado de tempo. Tenho um bom conteúdo de documentos e pretendo ir postando assim que possível, afinal, não tenho tanto tempo disponível assim.

Como sempre digo, vamos ao que interessa!

Objetivo

O objetivo desta postagem é abordar de uma maneira bem objetiva, como integrar os bancos de dados Oracle e MySQL. É isso mesmo que você ouviu, soltar um select no MySQL de dentro do Oracle, criar views, fazer JOIN entre os bancos e muito mais.

Pré-requisitos

Banco de dados Oracle funcionando
Banco de dados MySQL funcionando

Implementação

Utilizaremos um componente do Oracle chamado HS (Heterogeneous Service). Para quem quiser saber mais sobre: http://docs.oracle.com/cd/B28359_01/server.111/b28277/intro.htm#i1005900

Parte 1

No servidor Oracle, instale o MySQL ODBC. A versão linux utilizada para a integração foi Oracle Linux 5.8 e a versão do MySQL ORDBC foi a 5.1 (https://dev.mysql.com/downloads/connector/odbc/5.1.html):

rpm -ivh mysql-connector-odbc-5.1.13-1.rhel5.x86_64.rpm

Após instalado, realize a configuração do arquivo de configuração do ODBC:

Em /etc/odbc.ini

[NOMEDACONEXAO]
DRIVER = MySQL64
DATABASE = NOMEDOBANCOMYSQL
DESCRIPTION = MySQL ODBC 5.1 Driver
PORT = 3306
SERVER = IPDOSERVIDORMYSQL
USERNAME = USUARIOBANCOMYSQL
PASSWORD = SENHABANCOMYSQL
CHARSET = latin1
TRACEFILE = /tmp/myodbc-demodsn.trc
TRACE = ON


Faça um teste de conexão, a fim de minimizar possíveis problemas lá na frente:

isql -v NOMEDACONEXAO

show tables

Se o resultado for listar as tabelas do seu banco de dados MySQL, ótimo, vamos seguir adiante.

Parte 2

Configure o Oracle HS:

Para isso, crie um arquivo $ORACLE_HOME/hs/admin/initNOMEDACONEXAO.ora

HS_FDS_CONNECT_INFO = NOMEDACONEXAO #ODBC DSN
HS_FDS_TRACE_LEVEL = OFF
HS_FDS_FETCH_ROWS = 1
HS_NLS_NCHAR = UCS2
HS_LANGUAGE=american_america.we8iso8859P1
HS_FDS_SHAREABLE_NAME=/usr/lib64/libmyodbc5.so
HS_FDS_SQLLEN_INTERPRETATION=32
HS_FDS_SUPPORT_STATISTICS = FALSE


set ODBCINI=/etc/odbc.ini

Configure o listener.ora:

Adicione a seguintes entradas em $ORACLE_HOME/network/admin/listener.ora

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC = (SID_NAME=NOMEDACONEXAO)
(ORACLE_HOME=/u01/product/11.2.0/db_1)
(PROGRAM=dg4odbc)
)
)


Obs.: Substitua o ORACLE_HOME conforme sua instalação

Configure o tnsnames.ora:

Adicione as seguintes entradas em $ORACLE_HOME/network/admin/tnsnames.ora

NOMEDACONEXAO = (DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)
(HOST=localhost)
(PORT=1521))

(CONNECT_DATA = (SID=NOMEDACONEXAO))

(HS = OK))

Estamos na reta final, vamos criar o database link.

Acesse seu banco pelo sqlplus:

sqlplus /nolog

conn /as sysdba

CREATE PUBLIC DATABASE LINK NOMEDODBLINK CONNECT TO "USUARIOBANCOMYSQL " IDENTIFIED BY "SENHABANCOMYSQL" USING 'NOMEDACONEXAO';

Reinicie o listener:

lsnrctl stop
lsnrctl start

Pronto!

Faça um select para testar:

select * from "tabela"@NOMEDODBLINK;

Conclusão

O Oracle HS permite integração entre outros bancos também, como MSSQL, DB2 etc. Basta ler a documentação, mas basicamente o que muda é o driver do banco terceiro.

É isso pessoal, até a próxima!