Windows环境下,本地Oracle创建dblink连接远程mysql
前言
我的情况是,本地安装了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的更多相关文章
- Windows环境下修改Oracle实例监听IP地址
Windows环境下修改Oracle实例监听IP地址. 配置文件路径:<ORACLE_HOME>\NETWORK\ADMIN 如:C:\Oracle11gR2\product\11.2.0 ...
- Windows环境下在Oracle VM VirtualBOX下克隆虚拟机镜像(克隆和导入)
Windows环境下在Oracle VM VirtualBOX下克隆虚拟机镜像: 注:直接复制一个.vdi 虚拟硬盘再挂上去就可以,但Virtualbox居然提示UUID重复,无法使用. 则,可以通过 ...
- Windows 环境下安装 Oracle JDK
本页面中描述了如何在 Window 环境下安装 Oracle JDK. 我们使用的版本是 Window 10,我们需要安装的版本是 Oracle JDK 8u191. 检查当前版本 在进行新的 JDK ...
- Android开发之 Windows环境下通过Eclipse创建的第一个安卓应用程序(图文详细步骤)
第一篇 windows环境下搭建创建的第一个安卓应用程序 为了方便,我这里只采用了一体包进行演示. 一.下载安卓环境的一体包. 官网下载:安卓官网(一般被墙了) 网盘下载: http://yunpa ...
- Windows环境下安装Oracle数据库
Windows环境 1.解压文件 1)Oracle下载官网地址: http://www.oracle.com/technetwork/cn/database/enterprise-edition/do ...
- Windows环境下在Oracle VM VirtualBOX下克隆虚拟机镜像
1.定位到Vritualbox的安装目录 2.将安装好的.vdi文件复制一份到指定目录下 3.执行 VBoxManage internalcommands sethduuid F:\VirtualBo ...
- Windows环境下Android Studio安装和使用教程
Windows环境下Android Studio安装和使用教程 来源: http://www.cnblogs.com/liuhongfeng/archive/2015/12/30/5084896.ht ...
- oracle通过dblink连接mysql配置详解(全Windows下)
关于oracle通过dblink连接mysql,经过了两周的空闲时间研究学习,终于配置好了,真是不容易啊,仔细想想的话,其实也没花多长时间,就是刚开始走了一段弯路,所以把这次的经验分享出来,让大家少走 ...
- Windows环境下Oracle数据库的自动备份脚本
批处理文件(.bat) @echo off echo ================================================ echo Windows环境下Oracle数据 ...
随机推荐
- RAID 划分
RAID0:N块盘组成,逻辑容量为N块盘容量之和:RAID1:两块盘组成,逻辑容量为一块盘容量:RAID3:N+1块盘组成,逻辑容量为N块盘容量之和:RAID5:N块盘组成,逻辑容量为N-1块盘容量之 ...
- Centos7添加新源
yum repolist # 查看yum源列表yum localinstall http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epe ...
- ssh远程访问失败 Centos7
ssh远程访问失败 Centos7 命令ssh远程访问另外一台主机hadoop.master失败 #ssh hadoop.master 报以下信息 [root@hadoop ~]# ssh hadoo ...
- 软件测试之实际工作工作方式001--log4
软件测试之实际工作工作方式001--log4 Dotest软件测试-董浩整理 领导安排任务后: 1)首先要确认理解:是指的某工作吗?具体有什么要求吗?时间截止到什么时候? 解析: a.万一 ...
- Linux 技巧:让进程在后台可靠运行的几种方法【转】
我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开 ...
- 【原创】大数据基础之Logstash(4)高可用
logstash高可用体现为不丢数据(前提为服务器短时间内不可用后可恢复比如重启服务器或重启进程),具体有两个方面: 进程重启(服务器重启) 事件消息处理失败 在logstash中对应的解决方案为: ...
- c++入门篇五
默认参数: //默认参数//函数的默认参数,参数后面有'='//函数参数注意事项,如有一个位置有了默认参数//那么从该位置的后面就必须要有参数 , ) { //b有默认参数,b的后面也应该要有默认参数 ...
- 源码解析Django CBV的本质
Django CBV模式的源码解析 通常来说,http请求的本质就是基于Socket Django的视图函数,可以基于FBV模式,也可以基于CBV模式. 基于FBV的模式就是在Django的路由映射表 ...
- GraphQL ---02 GraphQL和C#结合的实战项目
本文章是介绍和记录如何创建GraphQL项目,以及如何使用GraphQL进行数据的相关操作.项目参照GraphQL .Net 的官方文档进行实践 一.项目结构: 为了更好的和原有的项目结合在一起,尽可 ...
- jdbc连接数据库以及crud(简单易懂,本人亲测可用 有源代码和数据库)
今天呢!重新整理了一边jdbc的相关操作:现在来说对于很多框架都使用mybatis和hibernate来操作数据库 ,也有很多使用自己简单封装的ssm或者是其他的一些框架来操作数据库,但是无论使用哪一 ...