前言

我的情况是,本地安装了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. JavaScript之iframe页面间通信

    [1] iframe父子页面间通信 1.相互调用对方的方法 |> 子级页面调用父级页面 window.parent.父级页面方法(args) |> 父级页面调用子级页面 document. ...

  2. 阿里云服务器ftp连接后21端口无法使用的问题

    今天在阿里云Centos上搭了一个ftp 服务,开启了20和21端口的权限.但是用工具和ftp命令登录,均超时. ftp命令登录成功后不能使用ls 命令,直接超时. 工具登录成功后 获取根目录失败,也 ...

  3. Moment.js简单使用

    1.设置语言环境,如设置中文环境: moment.locale("zh-cn"); 2.当前时间.指定时间: // 假设当前时间为:2018年12月10日 moment(); // ...

  4. codeforces 1151 B

    codeforces 1151  B codeforces 1151  B  1600fen 题意:n*m的矩阵,问能否从n行中每行选一个数 异或 大于0 解析:刚开始看没思路,想用dfs跑一遍,看到 ...

  5. Spring Cloud 之 服务注册与发现实战

    一. 启动Eureka Server集群 准备二台云主机,二个eureka server服务互相进行复制.准备二个application.yml配置,分别如下: application-server1 ...

  6. numpy数组取每一列的数据

    也可以运用到列表中,a原本是一个列表的嵌套,将a转为了数组进行此操作,可以取固定的值,这就是numpy的好处.

  7. 04mycat数据切分

    自定义切分文件 [root@mycat mycat]# cat conf/customer-hash-int.txt 101=0 102=0 103=0 104=1 105=1 106=1 Rule. ...

  8. hikey960编译记录

    arm64内核编译命令: 1 make ARCH=arm64 hikey960-defconfig 2 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- ...

  9. 【原创】大叔经验分享(49)hue访问hdfs报错/hue访问oozie editor页面卡住

    hue中使用hue用户(hue admin)访问hdfs报错: Cannot access: /. Note: you are a Hue admin but not a HDFS superuser ...

  10. python3 集合(set)

    一.定义:集合是一个无序不重复元素序列 语法: #---------------两种写法-------------------------# parame = {value1,value2,value ...