前言

我的情况是,本地安装了oracle(安装完成后带有SQL Developer,不需要再安装instantclient),创建dblink去连接远程的mysql。有些朋友可能是 本地使用PL\SQL(需安装instantclient)去连接 远程oracle,连接成功后创建并使用dblink去连接远程mysql,这时候要注意的是在远程的oracle环境中配置对应的mysql-odbc。如果还是无法实现,可以看看我在文章里对于这个过程的理解,再对照自己的情况,逐步排查问题,希望对你有帮助。

实现参考:Oracle连接odbc数据源 http://www.cnblogs.com/mellowsmile/p/5218882.html

oracle 不同安装包的区别(结合网上答案,自己整合琢磨的,如有错误,请大佬指出):

个人的Oracle安装情况

oracle安装参考教程:https://www.cnblogs.com/hoobey/p/6010804.html

我安装的是32位的Oracle Database 11g R2(之所以选择32位,是因为成功的案例都是用32位的,具体选择的依据我没查出来,有知道的大佬请不吝赐教,谢谢~),具体路径见下截图

oracle_home D:\guowenwen\product\11.2.0\dbhome_1,错误信息查找是在D:\guowenwen\product\11.2.0\dbhome_1\hs\trace目录下

个人的安装记录

1、安装32位mysql odbc驱动

下载路径:https://dev.mysql.com/downloads/connector/odbc/

我是选择后缀为.msi的包进行安装的,如果选择zip文件那就不用再安装了。安装mysql odbc注意选择32位/64位,选择的依据不是根据你的操作系统的位数,而是根据软件(Oracle版本)的位数,我安装的oracle位数是32位,所以这里选择安装32位的mysql odbc。如果你不知道怎么选择,那就64位和32位的mysql odbc都安装了,你可以在C:\Program Files (x86)\Mysql中查看到32位的odbc,在C:\Program Files\MySQL中查看到64位的odbc(这边查看的odbc的路径或有不同,在这里,我给出我的安装路径,目的是为了指出在C:\Program Files (x86)中安装的是32位的程序,在C:\Program Files安装的是64位的程序,我之前一直没有搞清楚)

2、新建32位系统DSN(unicode driver)并需要测试成功

这里需要清楚,安装了32位的odbc那就需要新建32位的系统DSN。

1】在控制面板=》管理工具=》数据源(ODBC)=》新建系统DSN(unicode driver) 是64位的

2】在C:\Windows\SysWOW64\odbcad32.exe路径下 新建的系统DSN  是32位的

注意这里的Data Source Name,我这里设置的是TESTMYSQL,在接下来的配置中会用到这个名称。在TCP/IP中输入你要远程连接的mysql数据库的IP地址,要点击Test按钮进行测试,测试成功方可

       

3、在D:\guowenwen\product\11.2.0\dbhome_1\NETWORK\ADMIN目录的listener.ora 文件中添加红色的信息(如果该目录下没有listener.ora文件,那就自己新建一个,下面是我所有的配置内容)

#ORACLE_HOME按需替换
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC=
(SID_NAME=TESTMYSQL) #这里SID_NAME一定要和第二步建立的odbc名字一致
(ORACLE_HOME=D:/guowenwen/product/11.2.0/dbhome_1)
(PROGRAM=dg4odbc) #一定要写dg4odbc
)
(SID_DESC=
(SID_NAME=dg4odbc)
(ORACLE_HOME=D:\guowenwen\product\11.2.0\dbhome_1)
(PROGRAM=dg4odbc)
)
#就我本人来说,这个目录下是没有listener.ora文件的,此时我可以用SQL Developer连接上本地oracle数据库,但是我自己配置了listener.ora文件后,就无法连接本地oracle了
#解决方案就是添加以下的代码块,再重启监听就可以了
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = D:\guowenwen\product\11.2.0\dbhome_1)
(SID_NAME = ORCL)
)
) LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = PNPKEY))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)

4、在D:\guowenwen\product\11.2.0\dbhome_1\NETWORK\ADMIN目录的tnsnames.ora文件中添加红色的信息(如果该目录下没有tnsnames.ora文件,那就自己新建一个,下面是我所有的配置内容)

#这里的内容和listener.ora是对应的
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
) TESTMYSQL =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)) #ORACLE服务器的IP,我是在本地oracle上创建dblink,所以HOST填localhost
(CONNECT_DATA=
(SID=TESTMYSQL)) #这里的SID和第二步的odbc名字一致
(HS=OK) #一定要加
) dg4odbc =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
(CONNECT_DATA=(SID=dg4odbc))
(HS=OK)
)

5、在D:\guowenwen\product\11.2.0\dbhome_1\hs\admin目录下创建initXXX.ora文件,XXX的名字要与第二步odbc的名字一致,本例中创建 initTESTMYSQL.ora文件,添加以下代码

HS_FDS_CONNECT_INFO = TESTMYSQL #注意这里的名字
HS_FDS_TRACE_LEVEL = debug #调试状态,如果连接出错,在路径D:\guowenwen\product\11.2.0\dbhome_1\hs\trace下可以看到错误信息

6、重启监听

两个选择,一是图形化界面操作,二是打开cmd操作,这里选择第二种

右键单击cmd,以管理员身份运行(不然可能会提示:TNS-01190: The user is not authorized to execute the requested listener command),输入以下命令(都需要执行成功,有错误自己找一下解决方案)

C:\Users\guowenwen>lsnrctl stop
C:\Users\guowenwen>lsnrctl start
C:\Users\guowenwen>tnsping MYSQL_LOCAL

7、打开SQL Developer,创建DBLINK

如果使用dblink出错,查看Oracle_HOME\hs\trace的报错信息,如果出现类似内容Access denied for users 'mysql用户名'@‘mysql的ip地址’,原因可能是创建dblink时用户名和密码没加“ ”

create database link MYSQL_LOCAL connect to "mysql用户" identified by “mysql用户密码” using 'MYSQL_LOCAL'; //using后面的名字应该与第二步odbc名字一致

8、使用DBLINK

select * from "表名"@MYSQL_LOCAL;

个人的原理解析

参考:oracle HS 深入解析 及协同Gateway工作流程 http://www.cnblogs.com/wwwiori/archive/2009/06/22/1508068.html

要点(个人的理解,没有深入研究,如果有错误请大佬们不吝赐教):oracle——dg4odbc——odbc——mysql

在本地oracle上使用dblink时(步骤7,8),oracle会连接到HS,HS会去对应目录下查找设置的Agent Componet Code(步骤5),因为我是直接安装了Oracle database(默认安装ODBC Agent),对应的Agent Componet Code是dg4odbcc.exe(对应的步骤3,4,这也是步骤4中设置PROGRAM=dg4odbc的原因),Agent Componet Code接下来去查找Driver(需要连接的数据库的驱动,即步骤1步骤的操作),连接到Driver后,Driver去连接DB(即步骤2,其意义是让Driver知道怎么连接对应的DB),远程DB接收到来自本地Oracle的命令,执行并一步步返回。

 总结

实现需求的过程中,搜索问题的解决方案时我发现有些文章说需要用到Database Gateways(举的例子是sqlserver),当时也不知道连接mysql不成功是不是因为没安装Gateways的原因(虽然现在知道对于连接mysql来说并不需要),就去找Gateways的知识。但问题是,我找gateways的下载路径就找了很久,更别说其他,现在贴出相关的链接,给有需要的朋友一点参考,减少搜索时间。

gateway下载地址参考:http://www.cnblogs.com/tuyile006/p/4142395.html

oracle database gateway for odbc 介绍:https://docs.oracle.com/database/122/ODBCU/database-gateway-for-odbc-introduction.htm#ODBCU100

最后,还是这句话,如果在阅读的过程中发现了任何问题,还请各位大佬们不吝赐教,感谢~~

Windows环境下,本地Oracle创建dblink连接远程mysql的更多相关文章

  1. Windows环境下修改Oracle实例监听IP地址

    Windows环境下修改Oracle实例监听IP地址. 配置文件路径:<ORACLE_HOME>\NETWORK\ADMIN 如:C:\Oracle11gR2\product\11.2.0 ...

  2. Windows环境下在Oracle VM VirtualBOX下克隆虚拟机镜像(克隆和导入)

    Windows环境下在Oracle VM VirtualBOX下克隆虚拟机镜像: 注:直接复制一个.vdi 虚拟硬盘再挂上去就可以,但Virtualbox居然提示UUID重复,无法使用. 则,可以通过 ...

  3. Windows 环境下安装 Oracle JDK

    本页面中描述了如何在 Window 环境下安装 Oracle JDK. 我们使用的版本是 Window 10,我们需要安装的版本是 Oracle JDK 8u191. 检查当前版本 在进行新的 JDK ...

  4. Android开发之 Windows环境下通过Eclipse创建的第一个安卓应用程序(图文详细步骤)

    第一篇  windows环境下搭建创建的第一个安卓应用程序 为了方便,我这里只采用了一体包进行演示. 一.下载安卓环境的一体包. 官网下载:安卓官网(一般被墙了) 网盘下载: http://yunpa ...

  5. Windows环境下安装Oracle数据库

    Windows环境 1.解压文件 1)Oracle下载官网地址: http://www.oracle.com/technetwork/cn/database/enterprise-edition/do ...

  6. Windows环境下在Oracle VM VirtualBOX下克隆虚拟机镜像

    1.定位到Vritualbox的安装目录 2.将安装好的.vdi文件复制一份到指定目录下 3.执行 VBoxManage internalcommands sethduuid F:\VirtualBo ...

  7. Windows环境下Android Studio安装和使用教程

    Windows环境下Android Studio安装和使用教程 来源: http://www.cnblogs.com/liuhongfeng/archive/2015/12/30/5084896.ht ...

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

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

  9. Windows环境下Oracle数据库的自动备份脚本

    批处理文件(.bat) @echo off echo ================================================ echo  Windows环境下Oracle数据 ...

随机推荐

  1. Java中ArrayList类的用法

    1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和ILis ...

  2. RLException: XXX is neither a launch file in package XXX nor is XXX a launch file name问题解决

    在运行roslaunch时出现了类似下面的错误: RLException: XXX is neither a launch file in package XXX nor is XXX a launc ...

  3. IDEA中 GIT与SVN版本控制插件的切换

    https://www.cnblogs.com/yccmelody/p/7794220.html

  4. python matplotlib 简单生成图

    import numpy as np import pandas as pd from matplotlib import pyplot as plt data = pd.DataFrame([[1, ...

  5. CF1153D Serval and Rooted Tree

    题目地址:CF1153D Serval and Rooted Tree 挺好玩儿也挺考思维的一道题 思路:树形DP+贪心 数组 \(d\) 维护这样一个值: 对于一个节点 \(x\) ,它的值最大可以 ...

  6. 强大的Resharp插件(转)

    使用VS有段时间了,一直深深的折服于其强大的功能.之前一直听说有Resharp这个工具,小猪一直也没有太在意.直到今天…… 下载安装: http://www.jetbrains.com/resharp ...

  7. BaiduMap路程计算

    #BaiduMap路程计算def getDistance(deslat,deslng,originlat,originlng): url='http://api.map.baidu.com/direc ...

  8. APP测试中iOS和Android的区别

    一.常识性区别 二.导航方式 iOS:Tab放在页面底部,不能通过滑动来切换,只能点击.也有放在上面的,也不能滑动,但有些Tab本身可以滑动,比如天猫的.还有新闻类的应用. Android:一般放在页 ...

  9. C++的变量初始化

    C++中变量的初始化有很多种方式,如:默认初始化,值初始化,直接初始化,拷贝初始化,列表初始化. 1.默认初始化:默认初始化是指定义变量时没有指定初值时进行的初始化操作. 如:int a:这些变量被定 ...

  10. bootstrap学习(二)页面

    响应式图片: //当图片大的时候,逐渐缩小浏览器大小,图片会显示为自适应大小 ,img-responsive <div class="container"> <d ...