当前位置: 首页 > news >正文

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

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

http://www.lryc.cn/news/94148.html

相关文章:

  • Flutter网络请求框架Dio源码分析以及封装(二)--Cookie管理分析
  • Unity如何设计一个技能系统
  • 测试流程体系
  • Linux下CentOS KVM 虚拟化
  • < vue + ElementUi 组件封装:实现弹窗展示富文本数据,允许全文搜索高亮显示搜索内容 >
  • MATLAB 之 低层绘图操作和光照及材质处理
  • LLM-Client一个轻量级的LLM集成工具
  • leetcode动态数组vector实现杨辉三角
  • 第二十三章_Redis高性能设计之epoll和IO多路复用深度解析
  • 基于OpenCV-车辆检测项目(简易版)
  • 用python获取海康摄像机视频
  • 【Linux】遇事不决,可先点灯,LED驱动的进化之路---2
  • 【计算机网络】数据链路层--点对点协议PPP
  • 【⑦MySQL】· 一文了解四大子查询
  • ValSuite报告可以帮助改善您的验证过程的6种方式
  • 【机器学习】机器故障的二元分类模型-Kaggle竞赛
  • ADB usage
  • 利用有限元法(FEM)模拟并通过机器学习进行预测以揭示增材制造过程中热场变化:基于ABAQUS和Python的研究实践
  • Kafka与Flume的对比分析
  • docker启动redis哨兵报错(sentinel.conf is not writable: Permission denied)
  • 如何编写优秀代码
  • 信道编码:Matlab RS编码、译码使用方法
  • 数据结构第六章 图 6.1-6.3 错题整理
  • 12 MFC常用控件(一)
  • Springboot搭配Redis实现接口限流
  • php中的双引号与单引号的基本使用
  • 【Neo4j教程之CQL命令基本使用】
  • Apikit 自学日记:发起文档测试-TCP/UDP
  • 坚鹏:中国邮储银行金融科技前沿技术发展与应用场景第1期培训
  • HBase分布式安装配置