mysql远程访问oracle_Windows环境下,本地Oracle创建dblink连接远程mysql

前言

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

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

25f88e2509c5e881dbc90f4824d4c4f4.png

个人的Oracle安装情况

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

6177ca86945546e59dcb1778cc3c1019.png

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按钮进行测试,测试成功方可

446e1b95f01c0fe773600a02d521ee09.png       

ef21e9bf8343482a620fba82faf2d44c.png

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——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的命令,执行并一步步返回。

99951fe6e187407022a949dd6a89228c.png

efa773d0b039a64d0e214a041e297717.png

总结

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值