DataARTIGO

DBLink do Oracle para o MySQL

A ideia aqui é exemplificar passo a passo como é configurado esse recurso no Oracle e também abordar os possíveis erros que venham a ocorrer.

É comum a necessidade de integração entre diferentes SGBD para finalidades diversas, tais como relatórios, DW, iteração de sistemas secundários, entre outras. O OracleOracle22 conteúdosOracle lança Java 26 para aumentar produtividade de desenvolvedoresDev (Back & Front) · mar 2026Oracle oferece o primeiro cluster de computação em nuvem em escala ZettaDevSecOps · jan 2025Oracle abre inscrições para o ONE, programa gratuito de formação em tecnologia e inteligência artificialData · dez 2024Ver tudo em Data disponibiliza um recurso chamado DBLINK que proporciona a conexão a databases remotos, sendo esses o Oracle ou NON-ORACLE. As conexões NON-ORACLE são realizadas com o auxilio do ODBC, a ideia aqui é exemplificar passo a passo como é configurado esse recurso no Oracle e também abordar os possíveis erros que venham a ocorrer e as diferenças entre o Oracle 10 e 11g.

O exemplo, a seguir, foi executado em um servidor Oracle LinuxLinux34 conteúdosKali Linux em um Servidor VPS: como, quando e por que usar?DevSecOps · dez 2024Construindo um Windows Service ou Linux Daemon com Worker Service & .NET Core – Parte 2Dev (Back & Front) · jul 2020Criando uma WebApi utilizando .NET, Linux e VSCodeDev (Back & Front) · ago 2019Ver tudo em DevSecOps 6.5 com unix-ODBC 64bits, MySQL-ODBC 64bits e Oracle 11.2.0.4.

1. Instalação do unix-ODBC:

yum install unixODBC

2. Download do mysql-connector-odbc:

Faça o download do driver correspondente a sua distribuição Linux em: https://dev.mysql.com/downloads/connector/odbc/

odbc

3. Instalação do mysql-connector-odbc:

Trocar mysql-connector-odbc-5.3.4-1.el6.x86_64.rpm pelo arquivo correspondente:

rpm -ivh mysql-connector-odbc-5.3.4-1.el6.x86_64.rpm

4. Certifique-se que o arquivo “/etc/odbcinst.init” está com as seguintes entradas:

[MySQL ODBC 5.3 Unicode Driver]
Driver        = /usr/lib64/libmyodbc5w.so
UsageCount        = 1
 
[MySQL ODBC 5.3 ANSI Driver]
Driver        = /usr/lib64/libmyodbc5a.so
UsageCount        = 1

5. Edite o arquivo /etc/odbc.ini e inclua o seguinte conteúdo, substituindo pelo database e ip correspondente:

[mysql]
Driver      = MySQL ODBC 5.3 Unicode Driver
DATABASE    = NOME-DO-DATABASE-AQUI
DESCRIPTION = MySQL ODBC 5.3 Unicode Driver
PORT        = 3306
SERVER      = IP-DO-SERVIDOR-AQUI
CHARSET     = latin1
TRACEFILE   = /tmp/myodbc-demodsn.trc
TRACE       = OFF

6. Teste com o “isql” se a conexão ODBC está funcionando:

isql -v mysql USUARIOAQUI SENHAAQUI
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select now() from dual;
+--------------------+
| now()              |
+--------------------+
| 2015-08-31 16:13:54|
+--------------------+
SQLRowCount returns 1
1 rows fetched

Teste a conexão e faça selects no servidor MySQL através do driver odbc com o client isql, se a conexão for efetivada assim como os comandos sem retorno de erros, poderemos seguir para a inclusão das configurações no Oracle.

7. Configuração do HS:

Crie o arquivo: $ORACLE_HOME/hs/admin/initmysql.ora

touch $ORACLE_HOME/hs/admin/initmysql.ora

Nota: O nome do arquivo é initmysql.ora onde temos initSID.ora, ou seja, o mysql será o nome do SID dessa conexão. Sendo assim, se forem criados vários DBLINKs para várias instâncias, modifique apenas a parte correspondente ao SID.

Inclua o seguinte conteúdo através do editor de sua preferência:

#
# HS init parameters
#
HS_FDS_CONNECT_INFO=mysql
HS_FDS_TRACE_LEVEL=0
HS_FDS_SHAREABLE_NAME=/usr/lib64/libodbc.so
HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P15
# HS_NLS_NCHAR=AL32UTF8
HS_NLS_NCHAR=UCS2
#
# ODBC specific environment variables
#
set ODBCINI = /etc/odbc.ini
set LD_LIBRARY_PATH="/u01/app/oracle/product/11.2.0.4/db_1/lib:/usr/lib:/usr/lib64/"

8. Configuração do Listener:

Edite o arquivo $ORACLE_HOME/network/admin/listener.ora e inclua o seguinte conteúdo:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/db_1)
      (SID_NAME = mysql)
      (PROGRAM = dg4odbc)
      (ENVS =”LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0.4/db_1/lib:/usr/lib64:/usr/lib:$ORACLE_HOME/lib”)
    )
  )

Como destacado acima, podem ocorrer várias entradas em SID_LIST, certifique-se de incluir a entrada destaca em vermelho dentro do “SID_LIST” corretamente, de forma que os parênteses estejam correspondendo.

Dica: PROGRAM=dg4odbc funciona para as versões do Oracle 11G em diante, para o Oracle 10g (ou inferior) deve-se utilizar a configuração PROGRAM=HS, pois são binários diferentes que Oracle utiliza para realizar essa integração. Na versão do Oracle 11G o binário correspondente ao HS não existe mais.

Recarregue as configurações do LISTENER com:

lsnrctl reload
 
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 31-AUG-2015 16:27:28
 
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
 
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
The command completed successfully
 
lsnrctl status

Verique as configurações se existe a entrada correspondente:

Service "mysql" has 1 instance(s).
Instance "mysql", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

9. Configurar entrada no TNSNAMES:

Edite o arquivo $ORACLE_HOME/network/admin/tnsnames.ora, e inclua a entrada para conexão:

MYSQL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SID =  mysql)
)
(HS = OK)
)

10. Criando o DBLINK:

create public database link mysql
connect to "dblink"
identified by "dblink"
using 'MYSQL';

connect to “USUARIO” identified by “SENHA” using “ENTRADA TNSNAMES“

11. Testando o acesso:

select "campo1","campo3" from "tabela1"@mysql;

Erros: Unable to retrieve text of NETWORK/NCR message 65535 ORA-02063: preceding 2 lines from XXX

Houve algum erro ao conectar a sua instância MySQL. Verifique se os dados de conexão estão corretos (“IP”,”USUARIO”,”SENHA”) ou se existe qualquer tipo de bloqueio de firewall, rede ou qualquer outro impeditivo nessa camada.

Se houver qualquer outro erro genérico na conexão, certifique-se de que a conexão via isql está funcionando e que todos as bibliotecas que foram referenciadas nos arquivos estão corretas. Faça as validações via “ldd” para garantir que não exista nenhuma dependência pendente ou falta de PATH que impacte não não localização das dependências.

Deixe sua dúvida ou comentário aqui!

é formado em Sistemas de Informação trabalha como Consultor MySQL, também atua como Consultor de outros SGBD. Desenvolveu uma solução de monitoramento integrado para ambientes Oracle, SQL Server, DB2 e MySQL chamada DBAWEB na DBAOnline onde atua como Consultor. Possui certificação Oracle Certified Professional MySQL 5 Database Administrator, é especialista em modelagem e otimização de bancos de dados.

Ver perfil