segunda-feira, 24 de dezembro de 2012
[ORACLE/MYSQL] Criando um dblink entre Oracle e MysQL:
Passo 1:
No servidor MySQL crie um usuário com os privilégios necessários de acesso ao database que será feito o dblink:
Exemplo:
mysql> grant all privileges on db_mysql.* to 'usuario'@'192.168.%' identified by 'senha';
Query OK, 0 rows affected (0.00 sec)
Passo 2:
Instale no servidor Oracle o Connector/ODBC.
Link para download http://www.mysql.com/downloads/connector/odbc/#downloads
[root@oraserver ~]# rpm -ivh mysql-connector-odbc-5.1.11-1.rhel5.x86_64.rpm
Passo 3:
Após instalado o Connector/ODBC, vamos configura-lo:
O arquivo /etc/odbcinst.ini contém os dados dos drivers:
[root@oraserver ~]# cat /etc/odbcinst.ini
[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/lib/libodbcpsql.so
Setup = /usr/lib/libodbcpsqlS.so
FileUsage = 1
[MySQL ODBC 5.1 Driver]
Driver = /usr/lib64/libmyodbc5.so
UsageCount = 1
Adicione a seguinte entrada no arquivo /etc/odbc.ini:
[root@oraserver ~]# cat /etc/odbc.ini
[oracle_mysql]
Driver = MySQL ODBC 5.1 Driver
DATABASE = db_mysql
PWD = senha
PORT = 3306
SERVER = 10.145.0.181
UID = usuario
SOCKET = /tmp/oracle/mysql.sock
CHARSET = latin1
Dessa forma criamos um acesso com o nome de oracle_mysql, usando o driver 'MySQL ODBC 5.1 Driver' no database db_mysql.
Passo 4:
Testando o acesso:
[root@oraserver ~]# isql oracle_mysql
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
SQL> show tables;
+-----------------------------------------------------------------+
| Tables_in_db_mysql |
+-----------------------------------------------------------------+
| tabela01 |
| tabela02 |
+-----------------------------------------------------------------+
SQLRowCount returns 1
1 rows fetched
SQL> select * from tabela02;
+-----------+-------------------
| campo1 | name
+-----------+-------------------
| 1 | RAFAEL SILVA
| 2 | MARIA JOSEFINA
| 3 | JOSE GALDERIO
+-----------+-------------------
SQLRowCount returns 3
3 rows fetched
Passo 5:
Deve ser criado um 'init' no servidor Oracle em $ORACLE_HOME/hs/admin/initmysqloracle.ora com as seguintes configurações:
[oracle@oraserver admin]$ cat initmysqloracle.ora
HS_FDS_CONNECT_INFO = oracle_mysql
HS_FDS_TRACE_LEVEL = DEBUG
HS_FDS_SHAREABLE_NAME = /usr/lib64/libmyodbc5.so
HS_FDS_SQLLEN_INTERPRETATION = 32
HS_FDS_REPORT_REAL_AS_DOUBLE = TRUE
HS_FDS_FETCH_ROWS = 1
HS_FDS_RECOVERY_ACCOUNT = RECOVER
HS_FDS_RECOVERY_PWD = RECOVER
HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P1
HS_NLS_NCHAR=UCS2
set ODBCINI=/etc/odbc.ini
set SQL_MODE='ANSI_QUOTES'
Atenção aos parâmetros HS_LANGUAGE e HS_NLS_NCHAR para garantir que não haja problemas com o charset.
Link com mais detalhes sobre os parâmetros acima:
http://docs.oracle.com/cd/E18283_01/gateways.112/e12070/apd.htm#BABEFBHB
Passo 6:
Adicione ao listener uma entrada para o novo init fazendo acesso ao ODBC:
(SID_DESC =
(PROGRAM = dg4odbc)
(ORACLE_HOME = /u00/app/oracle/product/11.2.0)
(SID_NAME = oracle_mysql)
(ENVS = LD_LIBRARY_PATH=/usr/lib64:/u00/app/oracle/product/11.2.0/lib:/lib64:/usr/lib64)
)
)
E faça um reload:
[oracle@oraserver admin]$ lsnrctl reload
Passo 7:
Adicione uma entrada no tnsnames.ora:
MYSQLORACLE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = mysqlserver)(PORT = 1521))
)
(CONNECT_DATA =
(SID = oracle_mysql))
(HS = OK)
)
Passo 8:
Crie o dblink:
SQL> create public database link mysql_orcl_db connect to "usuario" identified by "senha" using 'MYSQLORACLE';
Database link created.
Teste o acesso:
SQL> desc "tabela01"@mysql_orcl_db;
Name Null? Type
----------------------------------------- -------- ----------------------------
campo1 NUMBER(10)
campo2 CHAR(255)
SQL>select * from "tabela01"@mysql_orcl_db;
campo1 campo2
---------- ------------------------------
1 RAFAEL STOEVER
2 JOSE GALDERIO
3 MARIA DAS GRACAS
Considerações:
Lembrando que tudo que usar no MySQL em minusculo, no Oracle deverá ser tratado como string em minusculo contendo as aspas.
Para o Oracle 11g deve ser usado o (PROGRAM = dg4odbc)
E para 10g 64bits não há suporte hsodbc conforme feito neste artigo, desta forma deve ser comprado o Oracle Gateway para conseguir efetuar o procedimento.
Fonte: DESUPPORTED: How to Setup Generic Connectivity – HSODBC – to MySQL (Doc ID 260981.1)
Adaptado de:
http://www.oraclehome.com.br/2011/10/14/oracle-linux-acessando-mysql-em-windows-heterogeno/
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário