Oracle通过透明网关连接mysql数据库

本文详细介绍了如何在Oracle和MySQL数据库之间使用Oracle透明网关创建视图和存储过程查询。包括环境配置、安装MySQL ODBC驱动、配置数据源、透明网关设置、创建数据库链接及跨库视图创建步骤。
摘要由CSDN通过智能技术生成

公司项目需求,要在不同类型数据库间创建视图和存储过程查询,这就需要将从不同数据库(比如:Oracle和MYSQL两种数据库)中取数据。老板提出一个叫做“Oracle透明网关”的概念,然后让我去研究。网上其实已经有大手子做了一些文档,我这篇博客也是在这些文档的基础上自己实践后整理出来的(由于有一段时间了,所以当初的参考博客忘了,在此没办法贴出源地址,说一声抱歉!)。

根据个人理解,Oracle透明网关就是将Oracle数据库作为”宿主“,在你想要获取数据的数据库间搭建”通道“,然后在这些通道间获取数据加以处理,这样的话不同类型数据库间的数据并非直接进行交互,而是通过Oracle来进行,这样就可以实现诸如:在Oracle和MySQL数据库间创建视图等操作。

废话说完,下面开搞!

1.操作环境

系统:

Oracle版本信息:

MySQL版本信息:

注意:

1.在操作中我们需要用到gateway,由于Oracle11g安装时自带gateway,所以我不用再手动安装了。大家不知道自己是否已经安装的话,可以根据下面的方法检查的是否安装了oracle透明网关,如下。

打开cmd,输入dg4odbc ,如果已经安装将出现以下界面。

2.安装MySQL的数据源驱动(ODBC) 64位

数据源下载地址:

百度网盘:https://pan.baidu.com/s/18TJEq4_5EektWlLwHUH23Q

知道很多都是过路党,没有积分,所以就直接提供网盘下载地址了,当然,你也可以自行去官网(https://dev.mysql.com/downloads/connector/odbc/)下载,然后默认方式安装好。

2.配置数据源

以上准备工作做好后,接下来就是配置数据源了。根据我的图片引导一步步往下做就行了。

搜索数据源并打开(也可以再控制面板中搜索打开)

参数配置好,先测试,成功后然后点击ok保存确定,这样odbc数据源就配置好了。

3.配置透明网关

前面那么多麻烦事结束后,大家最关心的一步来了。

注意:此部分涉及Oracle配置问价的一些修改,建议修改前要备份。很重要!!!

首先你必须找到Oracle_Home所在文件位置,

我的oracle_Home位置是:C:\app\orange\product\11.2.0\dbhome_1

你可以参考查找,或者去环境变量配置中查找Oracle_Home的配置位置,下面很多配置文件和配置参数都需要知道Oracle_Home的具体位置。

3.1 找到initdg4odbc.ora文件

在C:\app\orange\product\11.2.0\dbhome_1\hs\admin目录下找到initdg4odbc.ora。

复制一份,重新命名,命名规则为:init+sid.ora

比如我的sid为MYSQLODBC,所以此处我的文件名为:initMYSQLODBC.ora。

打开你复制重命名的文件,并添加以下内容。

HS_FDS_CONNECT_INFO = mysqlodbc 说明:和mysql的odbc保持一致

HS_FDS_TRACE_LEVEL = off 说明:需要调试时可以改为debug,调试完成改为off;

3.2 找到listener.ora文件

一般情况下,在C:\app\orange\product\11.2.0\dbhome_1\NETWORK\ADMIN目录下,找到listener.ora文件

注意:

有一般情况,必然会有特殊情况,在这里提一下吧(因为我自己就是特殊情况,哭唧唧)。

因为可能会出现多次安装Oracle导致卸载残留和环境变量没有清理干净,所以此处的文件以及3.3中的文件路径可能会在类似

C:\app\orange\product\instantclient_11_2\network\admin这样的位置。

只要找到就行,这两处位置,都是可以的,我的就是没有卸载完全,所以在上一行的位置中,实测可行。

打开listener.ora文件,进行如下修改,红色字体代表修改部分:

# listener.ora Network Configuration File: C:\app\orange\product\instantclient_11_2\network\admin\listener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = CLRExtProc)

      (ORACLE_HOME = C:\app\orange\product\11.2.0\dbhome_1)

      (PROGRAM = extproc)

      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\orange\product\11.2.0\dbhome_1\bin\oraclr11.dll")

    )

      (SID_DESC =

      (SID_NAME = MYSQLODBC)

      (ORACLE_HOME = C:\app\orange\product\11.2.0\dbhome_1)

      (PROGRAM = dg4odbc)

     )

  )

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-SDG5GMA)(PORT = 1521))

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

    )

  )

ADR_BASE_LISTENER = c:\app\orange

修改之后,重启Oracle服务,这一操作实现方式多样,可以直接在service.msc里重启,也可以在cmd使用命令lsnrctl stop ,lsnrctl start。

3.3 找到tnsnames.ora文件(和3.2的文件在同一目录下)

打开并进行修改:

# tnsnames.ora Network Configuration File: C:\app\orange\product\instantclient_11_2\network\admin\tnsnames.ora

# Generated by Oracle configuration tools.

LISTENER_ORCL =

  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

ORACLR_CONNECTION_DATA =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

    )

    (CONNECT_DATA =

      (SID = CLRExtProc)

      (PRESENTATION = RO)

    )

  )

  ORCL =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )

MYSQLODBC =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = mysqlodbc)

    )

    (HS = OK)

  )

创建dblink

在sqlplus环境下执行如下语句,创建数据库连接:

create database link mysqlodbc connect to "root" identified by "123456" using 'mysqlodbc';--注意使用单引号

如果顺利,会出现创建成功提示,为了进一步确认连接是否可用,可以执行如下语句:

Select * from dual@mysqlodbc;

出现如上界面,即代表连接可用,大功告成。

当然,你也可以直接查询你建立透明网关的MySQL数据库的表,来验证是否是否成功,比如:

Select * from provinces@mysqlodbc;--provinces是我MySQL数据库中的表名

注意:

  不知道是不是MySQL独有的特性还是怎么回事,在单独查询某个字段时,必须在此字段上加上双引号,像下面这样。否则,就会报错:ORA-00904: "PROVINCE": 标识符无效。

Select "province" from provinces@mysqlodbc;

既然说到这,就顺便说一下如何跨数据库创建视图吧,在宿主Oracle数据库和MySQL之间创建一个视图,如下:

CREATE OR REPLACE FORCE VIEW "C##WISH"."VI_TEST" ("CZXM", "province") AS 
select u.czxm,p."province" from tuser u,provinces@mysqlodbc p where u.czdh='99300' and p."id"=13;

查询结果如下:

如果你看懂上面视图的创建,那么存储过程也就没什么问题了。

水平有限,如果有什么地方说的不对,欢迎指正!

好了,行文至此,打完收工。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值