Heterogeneous Services Oracle Linux, Select on Mysql

0

Posted on : 21-03-2009 | By : .rafa | In : Banco de Dados, MySQL, Oracle

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

Post a comment

*