ORACLE透明网关ODBC连接MYSQL

客户需求oracle访问mysql数据,客户是linux7.3  11.2.0.4单实例,字符集GBK,mysql是5.7.31,字符集UTF8,下面结合网上的文档和自己的实践,配置过程如下

1.安装oracle透明网关

首先在oracle服务器上面安装oracle透明网关,在oracle的安装包的第5个包:

p13390677_112040_Linux-x86-64_5of7.zip

安装很简单,下一步就行了,在安装选项那里勾选for odbc即可。

2.在oracle服务器上安装odbc和mysql驱动

这里挂载镜像iso,然后使用yum进行安装,也比较简单

yum install unixODBC*  mysql* mariadb*

主要是安装下面这些包:

安装mariadb是为了可以使用mysql命令行来连接测试。

3.配置mysql DSN连接

配置一下驱动文件的软连接:

cd /usr/lib64/
ln -s libodbcinst.so.2.0.0 libodbcinst.so.1
ln -s libodbc.so.2.0.0 libodbc.so.1

查看odbc配置文件

[oracle@db66 oradata]$ odbcinst  -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/oracle/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

查看一下mysql的驱动是否都安装了:

[oracle@db66 oradata]$ cat /etc/odbcinst.ini 
# Example driver definitions
# Driver from the postgresql-odbc package
# Setup from the unixODBC package
[PostgreSQL]
Description = ODBC for PostgreSQL
Driver      = /usr/lib/psqlodbcw.so
Setup       = /usr/lib/libodbcpsqlS.so
Driver64    = /usr/lib64/psqlodbcw.so
Setup64     = /usr/lib64/libodbcpsqlS.so
FileUsage   = 1
# Driver from the mysql-connector-odbc package
# Setup from the unixODBC package
#####这里下面的64位驱动是否都有,正常安装了mysql-connect-odbc之后就都有了
[MySQL]
Description = ODBC for MySQL
Driver      = /usr/lib/libmyodbc5.so
Setup       = /usr/lib/libodbcmyS.so
Driver64    = /usr/lib64/libmyodbc5.so
Setup64     = /usr/lib64/libodbcmyS.so
FileUsage   = 1

修改odbc.ini配置文件,这一步是关键点1,配置连接mysql的odbc DSN:

[oracle@db66 oradata]$ cat /etc/odbc.ini 
[vte]
Driver=MySQL     #这里是上面odbcinst.ini里面的驱动名称,下面其它的都是很简单mysql的连接信息
SERVER=192.168.50.104
PORT=3306
USER=vte1
PASSWORD=611048sl
DATABASE=vtedb
OPATION=0
TRACE=OFF

配置完成之后使用isql测试连接是否正常:

[oracle@db66 oradata]$ isql vte
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select version();
+-----------+
| version() |
+-----------+
| 5.7.31-log|
+-----------+
SQLRowCount returns 1
1 rows fetched

这里表示连接正常。

4.配置oracle透明网关配置文件

cd $ORACLE_HOME/hs/admin

vi initodbcvte.ora

这里注意这个文件的名称叫initodbcvte.ora,这里的odbcvte是第二个关键点,需要和后面监听里面的保持一致

[oracle@db66 admin]$ pwd
/u01/app/oracle/product/11.2.0/dbhome_1/hs/admin
[oracle@db66 admin]$ cat initodbcvte.ora 
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
​
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = vte       ##这里是odbc.ini里面的DSN名称
HS_FDS_TRACE_LEVEL = ON
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
​
HS_LANGUAGE=AMERICAN_AMERICA.UTF8    ##这两段如果不配会出现乱码
HS_NLS_NCHAR=UCS2
​
#
# ODBC specific environment variables
#
set ODBCINI= /etc/odbc.ini
​
​
#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>

5.配置监听和tnsnames

配置listener.ora文件,这里为了不和现在的监听冲突,我选择新建一个端口号为1522的listener2,这里的SID需要和配置文件的文件名保持一致

[oracle@db66 admin]$ cat listener.ora 
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
​
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = db66)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
​
ADR_BASE_LISTENER = /u01/app/oracle
​
LISTENER2 =
(DESCRIPTION_LIST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.50.66)(PORT = 1522))
  )
)
SID_LIST_LISTENER2=
    (SID_LIST=
      (SID_DESC=
            (SID_NAME=odbcvte)
            (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
            (PROGRAM=dg4odbc)
      )
  )
​
 

配置tnsnames.ora连接此listener的服务命名:


odbcvte=
(DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.50.66)(PORT = 1522))
  (CONNECT_DATA =
    (SID = odbcvte)
  )
    (HS = OK)
)

配置完成之后启动listener2,并测试

lsnrctl start listener2

再用tnsping odbcvte测试:

[oracle@db66 admin]$ tnsping odbcvte
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 25-JUN-2023 16:16:14
Copyright (c) 1997, 2013, Oracle.  All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.50.66)(PORT = 1522)) (CONNECT_DATA = (SID = odbcvte)) (HS = OK))
OK (0 msec)

6. 在数据库创建dblink

SQL> create public database link to_vte connect to "root" identified by "123456" using 'odbcvte';

这里注意,mysql是区分大小写的,所以这里的用户名和密码需要加双引号

7.验证dblink

 

8.遇到的问题

在oracle中连接到mysql之后数据都是乱码。需要在initodbcvte.ora中配置语言:

HS_LANGUAGE=AMERICAN_AMERICA.UTF8    

HS_NLS_NCHAR=UCS2

实测,只要配置第二个就不会出现中文乱码

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle透明网关Oracle数据库提供的一种技术,它允许用户在Oracle数据库透明地访问其他非Oracle数据库,如SQL Server、DB2、Sybase等。透明网关的安装和配置需要在Oracle数据库服务器上进行,并在Oracle数据库中创建相应的透明网关链接。透明网关的作用类似于一个桥梁,使得用户可以使用SQL或PL/SQL语言访问其他数据库中的数据,而不必关心其他数据库的技术细节。需要注意的是,透明网关是一个单向网关,只能从Oracle数据库访问其他非Oracle数据库,而不能反过来访问Oracle数据库透明网关Oracle数据仓库和数据迁移中扮演着重要的角色。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [oracle透明网关](https://blog.csdn.net/m0_47254108/article/details/129630663)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Oracle Database Gateways透明网关的安装和配置](https://blog.csdn.net/qfjewq/article/details/130237207)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值