Bom para entender melhor o que estarei explicando vou mostrar uma imagem que irá nos ajudar a entender o processo de acessar o mysql apartir do Oracle.
como mostra na imagem abaixo o Cliente(eu) vou conectar no meu Oracle database onde irá ter um DBlink para o Non-Oracle que no nosso caso é o MySQL. Assim podendo efetuar insert,delete,update e select apartir do Oracle lá no MySQL.
Isto tudo é feito apartir de um intermediador que vamos utilizar o ODBC. Particularmente falando não gosto muito, porem para quebrar um galho ajuda p/ caramba.

Maquina Oracle Database em Linux RH4 x86: orars
IP ORARS: 192.168.0.200
Maquina MySQL Database em Windows x86: hprs
IP HPRS: 192.168.0.10
Vamos primeiramente configurar tudo no Linux onde há o Oracle.
O ideal é verificar se não há nenhum mysql instalado. (rpm -q | grep mysql)
Claro estou trabalhando com um servidor dedicado a Oracle não deve ter mysql rodando junto.
ex.: rpm -e mysql-4.1
Segundo passo é instalar o unixodbc que é o ODBC para sistemas unix.
Para maiores detalhes e versões mais atuais visitar www.unixodbc.org
# wget www.unixodbc.org/unixODBC-2.2.14.tar.gz
# ./configure --prefix=/usr/local/etc --sysconfdir=/usr/local/etc --enable-gui=no
# make
# make install
Instalado o ODBC agora temos que instalar o Connector ODBC entre o ODBC e o MySQL.
Baixar o rpm da página do MySQL.com
MySQL ODBC driver (Connector/ODBC 3.51)
dev.mysql.com/downloads/#connector-odbc
Obs.: Para a versao do ODBC tem q ser essa 3.51 conforme informa no site da unixODBC
E Agora vamos começar a configurar o acesso a partir do linux via ODBC ao MySQL.
Como eu configurei na instalação o unixodbc em /usr/local/etc/ nesta pasta irá estar dois arquivos importantes para essa comunicação entre os dois bancos.
Porem ao instalar o connector ODBC o mesmo irá gerar os mesmos arquivos em /etc, pelo foi o que aconteceu comigo, desta forma copiei /etc/odbc* /usr/local/etc/
ex.:
cp /etc/odbc* /usr/local/etc/
E após isto fiz links simbolicos para não ter problemas com os arquivos de configuração.
ln -sf /usr/local/etc/odbc.ini /etc/odbc.ini
ln -sf /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
Agora sim vamos começar a altera os arquivos assim nada irá ficar perdido:
cat /usr/local/etc/odbcinst.ini [MySQL] Description = Driver = /usr/lib/libmyodbc3.so Driver64 = /usr/lib64/libmyodbc3.so UsageCount = 1 CPTimeout = CPReuse = cat /usr/local/etc/odbc.ini [mysqloracle] Driver = MySQL DATABASE = dbrafa PWD = stoever PORT = 3306 SERVER = 192.168.0.10 UID = rafale SOCKET = /tmp/oracle/mysql.sock
Agora para testar se estamos nos comunicando com o mysql
/usr/local/etc/bin/isql mysqloracle -v
+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ Se não apareu isso volte ao tutorial e reveja tudo novamente pois aki ja funcionou. SQL> show tables +-----------------------------------------------------------------+ | Tables_in_dbrafa | +-----------------------------------------------------------------+ | teste | +-----------------------------------------------------------------+ SQLRowCount returns 1 1 rows fetched SQL> select count(1) from teste; +---------------------+ | count(1) | +---------------------+ | 0 | +---------------------+ SQLRowCount returns 1 1 rows fetched
Blz já estamos chegando no mysql agora temos que conseguir fazer o Oracle chegar ao MySQL
Agora vamos configurar o init do mysqlOracle
cat $ORACLE_HOME/hs/admin/initmysqloracle.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 = mysqloracle
HS_FDS_TRACE_LEVEL = 4
HS_FDS_SHAREABLE_NAME = /usr/lib/libodbc.so
#
# ODBC specific environment variables
#
set ODBCINI=/usr/local/etc/odbc.ini
LISTENER.ORA
# listener.ora Network Configuration File: $ORACLE_HOME/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dbcorp)
(ORACLE_HOME = /oraprd01/app/oracle/product/10.2.0)
(SID_NAME = dbcorp)
)
(SID_DESC =
(PROGRAM = hsodbc)
(ORACLE_HOME = /oraprd01/app/oracle/product/10.2.0)
(SID_NAME = mysqloracle)
(ENVS = (ENVS = LD_LIBRARY_PATH=/usr/lib:/u01/app/oracle/product/10.2.0/lib:/lib:/usr/lib)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orars)(PORT = 1521))
)
TNSNAMES.ORA
MYSQL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = orars)(PORT = 1521))
)
(CONNECT_DATA =
(SID = mysqloracle))
(HS = OK)
)
Restart listener se o listener iniciar sem erro é por que está tudo ok.
Criar um database link no oracle
Deve-se prestar atencao se o usuário que se conecta no mysql está em minusculo deve ser criar o database link para se conectar com aspas. Pois o Mysql é case sensitive com usuário e senha.
SQL> create public database link mysql connect to "rafael" identified by "stoever" using 'MYSQL';
E agora é testar o dblink
SQL> select count(1) from teste@mysql;
COUNT(1)
----------
0
Este procedimento foi feito com Oracle 10g para as versões 11g deve ser trocado o program do listener para dg4odbc
Bom e se for instalar em um ambiente 64b, é soh baixar os componentes para 64 e as alterar as libs para 64.
Ref.:
Metalink Doc ID: 260981.1
database-gateway-dg4odbc
Generic Connectivity
Oracle® Transparent Gateway for Microsoft SQL Server Administrator's Guide
0