http://blog.csdn.net/dbanote/article/details/10488581

版权声明:本文为博主原创文章,未经博主允许不得转载。

业务上有这么一个需求,需要把Oracle的一些数据同步到MySQL,如果每次都是手动同步的话,实在太麻烦,因此花了点时间研究了下Oracle直连MySQL的方式。

参考文档:Detailed Overview of Connecting Oracle to MySQL Using DG4ODBC Database Link (Doc ID 1320645.1)

版本信息:

Oracle: 11.2.0.1.0     OS: CentOS 5.9

MySQL: 5.5.27          OS: CentOS 5.8

原理:

Oracle使用DG4ODBC数据网关连接其它非Oracle数据库,其原理图如下:

从上图可知,Oracle连接MySQL需要涉及到如下组件:DG4ODBC, ODBC Driver Manager, ODBC Driver,本文将一一讲解它们的配置。

1)判断32位还是64位

因为32位和64位的配置不一样,64位更复杂一些,因此我们首先得确定Oracle和DG4ODBC是32位还是64位:

  1. [oracle@lx16 ~]$ file $ORACLE_HOME/bin/dg4odbc
  2. /home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/dg4odbc: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), not stripped

从上面的输出可知是64位。

2)下载并安装ODBC Driver Manager

到这个页面(http://www.unixodbc.org/download.html)根据你的OS下载unixodbc(注意:版本不能低于2.2.14)

  1. $ wget http://sourceforge.net/projects/unixodbc/files/unixODBC/2.2.14/unixODBC-2.2.14-linux-x86-64.tar.gz/download

解压缩:

  1. $ tar -zxvf unixODBC-2.2.14-linux-x86-64.tar.gz

解压缩后会在当前目录下自动创建usr的目录,我们创建一个目录(~/app/unixodbc-2.2.14)用于放置unixodbc,然后把usr 迁移到该目录下:

  1. $ mkdir ~/app/unixodbc-2.2.14
  2. $ mv usr ~/app/unixodbc-2.2.14

3)下载并按照ODBC Driver for MySQL

到这个页面(http://dev.mysql.com/downloads/connector/odbc/5.2.html#downloads)根据你的OS下载ODBC-5.2.5,本例选择64位tar版本:

  1. $ wget http://dev.mysql.com/get/Downloads/Connector-ODBC/5.2/mysql-connector-odbc-5.2.5-linux-glibc2.5-x86-64bit.tar.gz/from/http://cdn.mysql.com/
  2. $ tar -zxvf mysql-connector-odbc-5.2.5-linux-glibc2.5-x86-64bit.tar.gz

解压缩成功后是一个文件夹,把该文件夹迁移至~/app目录下,并给它创建一个软链接:

  1. $ mv mysql-connector-odbc-5.2.5-linux-glibc2.5-x86-64bit ~/app
  2. $ cd ~/app
  3. $ ln -s mysql-connector-odbc-5.2.5-linux-glibc2.5-x86-64bit myodbc-5.2.5

4)配置ODBC Driver

在~/etc目录下创建odbc.ini如下:

  1. [myodbc5]
  2. Driver = /home/oracle/app/myodbc-5.2.5/lib/libmyodbc5w.so
  3. Description = Connector/ODBC 5.2 Driver DSN
  4. SERVER = 192.168.1.15
  5. PORT = 3306
  6. USER = mysql_user
  7. PASSWORD = mysql_pwd
  8. DATABASE = mysql_db
  9. OPTION = 0
  10. TRACE = OFF

其中,Driver指向第3步上按照的ODBC Driver,这里要特别注意:MySQL的Datbase是大小写敏感的。

5)验证ODBC连接

  1. $ export ODBCINI=/home/oracle/etc/odbc.ini
  2. $ export LD_LIBRARY_PATH=/home/oracle/app/unixodbc-2.2.14/usr/local/lib:$LD_LIBRARY_PATH
  3. $ cd ~/app/unixodbc-2.2.14/usr/local/bin
  4. $ ./isql myodbc5 -v
  5. +---------------------------------------+
  6. | Connected!                            |
  7. |                                       |
  8. | sql-statement                         |
  9. | help [tablename]                      |
  10. | quit                                  |
  11. |                                       |
  12. +---------------------------------------+

上面显示连接成功。

6)配置tnsnames.ora

  1. myodbc5 =
  2. (DESCRIPTION=
  3. (ADDRESS=
  4. (PROTOCOL=TCP) (HOST=localhost) (PORT=1521)
  5. )
  6. (CONNECT_DATA=
  7. (SID=myodbc5)
  8. )
  9. (HS=OK)
  10. )

7)配置listener.ora

  1. SID_LIST_LISTENER=
  2. (SID_LIST=
  3. (SID_DESC=
  4. (SID_NAME=myodbc5)
  5. (ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1)
  6. (PROGRAM=dg4odbc)
  7. (ENVS=LD_LIBRARY_PATH=/home/oracle/app/unixodbc-2.2.14/usr/local/lib:/home/oracle/app/oracle/product/11.2.0/dbhome_1/lib)
  8. )
  9. )

如上所示,为了避免和其它已存在的ODBC Driver Manager冲突,强烈设置LD_LIBRARY_PATH在listener.ora
8)创建init<sid>.ora文件
创建文件$ORACLE_HOME/hs/admin/initmyodbc5.ora,内容如下:

  1. HS_FDS_CONNECT_INFO=myodbc5 # Data source name in odbc.ini
  2. HS_FDS_SHAREABLE_NAME=/home/oracle/app/unixodbc-2.2.14/usr/local/lib/libodbc.so
  3. HS_FDS_SUPPORT_STATISTICS=FALSE
  4. HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P15
  5. # ODBC env variables
  6. set ODBCINI=/home/oracle/etc/odbc.ini

9)使上述配置文件生效

  1. $ lsnrctl reload
  2. $ lsnrctl status
  3. Service "myodbc5" has 1 instance(s).
  4. Instance "myodbc5", status UNKNOWN, has 1 handler(s) for this service...

10)验证配置是否正确

  1. $ tnsping myodbc5
  2. TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 29-AUG-2013 10:54:46
  3. Copyright (c) 1997, 2009, Oracle.  All rights reserved.
  4. Used parameter files:
  5. /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/sqlnet.ora
  6. Used TNSNAMES adapter to resolve the alias
  7. Attempting to contact (DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (HOST=localhost) (PORT=1521)) (CONNECT_DATA= (SID=myodbc5)) (HS=OK))
  8. OK (0 msec)

11)创建dblink

  1. SQL> create public database link mysqltest connect to "mysql_user" identified by "mysql_pwd" using 'myodbc5';
  2. SQL> select count(*) from trans_expert_map@mysqltest;
  3. COUNT(*)
  4. ----------
  5. 371
 
4
0

[Oracle, MySQL] Oracle通过dblink连接MySQL的更多相关文章

  1. oracle通过dblink连接mysql配置详解(全Windows下)

    关于oracle通过dblink连接mysql,经过了两周的空闲时间研究学习,终于配置好了,真是不容易啊,仔细想想的话,其实也没花多长时间,就是刚开始走了一段弯路,所以把这次的经验分享出来,让大家少走 ...

  2. 如何登录mysql? cmd怎么连接mysql数据库

    Mysql开源数据库,任何人都可以下载安装使用.那么安装好的mysql如何登陆连接mysql数据库呢? 连接mysql数据库的几种方法 一 Mysql命令行连接 一般对于刚刚安装好的mysql,如果勾 ...

  3. MySQL学习(一)——Java连接MySql数据库

    MySQL学习(一)——Java连接MySql数据库 API详解: 获得语句执行 String sql = "Insert into category(cid, cname) values( ...

  4. Mysql(九):Python连接MySQL数据库之pymysql模块使用

    Python3连接MySQL 本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用. PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服 ...

  5. Oracle通过dblink连接MySQL

    需要把MySQL的一些数据同步到Oracle,用ETL工具太麻烦了,通过参考官方文档实现了oracle to mysql dblink.每次修改配置后,需要重启监听才能生效,或者 reload一下,确 ...

  6. 如何登录mysql? cmd怎么连接mysql数据库||从MYSQL客户端登录MYSQL

    1 2 3 4 5 6 7 分步阅读 Mysql开源数据库,任何人都可以下载安装使用.那么安装好的mysql如何登陆连接mysql数据库呢?本经验咗嚛介绍几种常见的方法 工具/原料   mysql 连 ...

  7. mysql——jdbc驱动下载&连接mysql例子

    mysql-connector-java-5.1.46.zip[解压后里面jar文件就是所需要的] https://dev.mysql.com/get/Downloads/Connector-J/my ...

  8. Ubuntu安装MySQL及使用Xshell连接MySQL出现的问题(2003-Can't connect to MySql server及1045错误)

    不管在什么地方,什么时候,学习是快速提升自己的能力的一种体现!!!!!!!!!!! 以下所有的命令都是在root用户下操作(如果还没有设置root密码)如下: 安装好Ubuntu系统之后,打开终端先设 ...

  9. mysql 同时支持多少连接MYSQL 查看最大连接数和修改最大连接数

    MySQL查看最大连接数和修改最大连接数 1.查看最大连接数 show variables like '%max_connections%'; 2.修改最大连接数 set GLOBAL max_con ...

随机推荐

  1. 数学 Codeforces Round #308 (Div. 2) B. Vanya and Books

    题目传送门 /* 水题:求总数字个数,开long long竟然莫名其妙WA了几次,也没改啥又对了:) */ #include <cstdio> #include <iostream& ...

  2. 准确计算CoreText高度的方法:

    - (int)getAttributedStringHeightWithString:(NSAttributedString *) string WidthValue:(int) width { ; ...

  3. 208 Implement Trie (Prefix Tree) 字典树(前缀树)

    实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个方法.注意:你可以假设所有的输入都是小写字母 a-z.详见:https://leetcode.co ...

  4. html5表单新增元素与属性2

    1.标签的control属性 在html5中,可以在标签内部放置一个表单元素,并且通过该标签的control属性来访问该表单元素. <script> function setValue() ...

  5. 支付宝-API接口解析-转账到银行

    支付宝-API接口解析-转账到银行 扫码转账 测试地址 解析内容: alipays://platformapi/startapp?appId=09999988&actionType=toCar ...

  6. jmeter 连接 mysql 进行压力测试

  7. RDO、SAD、SATD、λ相关概念【转】

    率失真优化概述: 率失真优化(Rate D isto r t i on Op t i m ized)策略是在率失真理论[3 ]的基础上提出的一种代价函数方案, RDO 的主要思想是, 在计算代价函数时 ...

  8. Vue.js语法糖整理

    el:element 需要获取的元素,一定是HTML中的根容器元素 data:用于数据的存储 methods:用于存储各种方法 数据绑定字面量只加载一次{{* msg}} data里面可以进行简单的运 ...

  9. js设计模式-发布/订阅模式

    一.前言 发布订阅模式,基于一个主题/事件通道,希望接收通知的对象(称为subscriber)通过自定义事件订阅主题,被激活事件的对象(称为publisher)通过发布主题事件的方式被通知. 就和用户 ...

  10. org.springframework.orm.hibernate4.support.OpenSessionInViewFilter

    ---恢复内容开始--- /* * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache ...