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!