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
实测,只要配置第二个就不会出现中文乱码
相关文章:

ORACLE透明网关ODBC连接MYSQL
客户需求oracle访问mysql数据,客户是linux7.3 11.2.0.4单实例,字符集GBK,mysql是5.7.31,字符集UTF8,下面结合网上的文档和自己的实践,配置过程如下 1.安装oracle透明网关 首先在oracle服务器上面安装ora…...
Flutter网络请求框架Dio源码分析以及封装(二)--Cookie管理分析
Flutter网络请求框架Dio源码分析以及封装--Cookie管理分析 前言问题如何使用CookieJarCookieManagerPersistCookieJar总结 前言 上一篇文章我们简单分析了一下Dio发出请求时的大致工作流程,这个只是Dio最基本的功能,而且我们还没有分析走到httpClientA…...
Unity如何设计一个技能系统
一、技能系统的设计思路 技能系统是游戏中非常重要的一部分,因此在设计技能系统时需要考虑以下几个方面: 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬࿰…...

测试流程体系
目录: 软件测试基本概念软件测试模型软件测试工作流程测试左移和测试右移 1.软件测试基本概念 通过手工或者工具对"被测对象"进行测试验证实际结果与预期结果之间是否存在差异 软件测试作用 通过测试工作可以发现并修复软件当中存在的缺陷ÿ…...
Linux下CentOS KVM 虚拟化
介绍: KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,它是基于Linux内核的虚拟化解决方案。KVM可以将一台物理服务器分割成多个虚拟机,每个虚拟机都可以运行不同的操作系统和应用程序,从而实现…...

< vue + ElementUi 组件封装:实现弹窗展示富文本数据,允许全文搜索高亮显示搜索内容 >
实现弹窗展示富文本数据,允许全文搜索高亮显示搜索内容 👉 前言👉 一、效果演示👉 二、实现思路👉 三、实现案例👍 卷王必胜!往期内容 💨 👉 前言 在 Vue elementUi 开…...

MATLAB 之 低层绘图操作和光照及材质处理
这里写目录标题 一、低层绘图操作1. 曲线对象2. 曲面对象3. 文本对象4. 其他核心对象4.1 区域块对象4.2 方框对象 二、光照和材质处理1. 光照处理2. 材质处理2.1 图形对象的反射特性2.2 material 函数 一、低层绘图操作 MATLAB 将曲线、曲面、文本等图形均视为对象,…...

LLM-Client一个轻量级的LLM集成工具
大型语言模型(llm)已经彻底改变了我们与文本交互的方式,OpenAI、Google、AI21、HuggingfaceHub、Anthropic和众多开源模型提供了不同的功能和优势。但是每个模型都有其独特的体系结构、api和兼容性需求,集成这些模型是一项耗时且具有挑战性的任务。 所以…...
leetcode动态数组vector实现杨辉三角
链接: leetcode动态数组vector实现杨辉三角 由题意可易得,从第三行开始,除了开始和末尾的位置上的元素,其余位置上的元素都是由上方的元素以及上方左侧的元素相加得到的,此时就很容易的到从第三行开始状态转移方程为vv[i][j] vv[…...

第二十三章_Redis高性能设计之epoll和IO多路复用深度解析
before 多路复用要解决的问题 并发多客户端连接,在多路复用之前最简单和典型的方案:同步阻塞网络IO模型 这种模式的特点就是用一个进程来处理一个网络连接(一个用户请求),比如一段典型的示例代码如下。 直接调用 recv 函数从一个 socket 上读…...

基于OpenCV-车辆检测项目(简易版)
车辆检测 1.项目介绍2. 读取一段视频3.通过形态学处理识别车辆4.描画轮廓5. 车辆计数并显示 本项目使用的视频地址链接 1.项目介绍 对一个视频进行车辆数量的检测,用到的知识有视频的读取,滤波器,形态学,添加直线、文本ÿ…...
用python获取海康摄像机视频
要调用海康摄像机视频,需要使用海康SDK提供的API。以下是一个简单的示例代码,可以连接到海康摄像机并获取视频流: python import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel from PyQt5.QtGui import QPixmap from PyQ…...

【Linux】遇事不决,可先点灯,LED驱动的进化之路---2
【Linux】遇事不决,可先点灯,LED驱动的进化之路---2 前言: 一、Pinctrl子系统重要概念 1.1 重要概念 1.1.1 pin controller 1.1.2 client device 1.1.3 补充概念 二、GPIO子系统重要概念 2.1 在设备树指定GPIO引脚 2.2 在驱动代码中…...

【计算机网络】数据链路层--点对点协议PPP
1.概念 2.构成 3.封装成帧 - 帧格式 4.透明传输 4.1字节填充法(面向字节的异步链路) 4.2.比特填充法(面向比特的同步链路) 5.差错检测 6.工作状态 7.小结...

【⑦MySQL】· 一文了解四大子查询
前言 ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL标量/单行子查询、列子/表子查询的讲解✨ 目录 前言一、子查询概念二、标量/单行子查询、列子/表子查询三、总结 一、子查询概念 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从My…...

ValSuite报告可以帮助改善您的验证过程的6种方式
热验证工艺是一项复杂而微妙的工作,但它是确保制药和生物技术产品的安全性和有效性的重要组成部分。同时,管理整个验证过程中产生的数据可能很费时,而且容易出错——这就是ValSuite的意义。 这款直观的验证软件简化了数据分析和报告…...

【机器学习】机器故障的二元分类模型-Kaggle竞赛
竞赛介绍 数据集描述 本次竞赛的数据集(训练和测试)是从根据机器故障预测训练的深度学习模型生成的。特征分布与原始分布接近,但不完全相同。随意使用原始数据集作为本次竞赛的一部分,既可以探索差异,也可以了解在训…...

ADB usage
查看手机设备的信息 获取设备的Android版本号 adb shell getprop ro.build.version.release 获取设备的API版本号 adb shell getprop ro.build.version.sdkAdb 获得 sdk版本 adb shell getprop ro.build.version.sdk27 Adb 获得Android版本 adb shell getprop ro.build.vers…...
利用有限元法(FEM)模拟并通过机器学习进行预测以揭示增材制造过程中热场变化:基于ABAQUS和Python的研究实践
1. 引言 增材制造(Additive Manufacturing,AM)近年来引起了大量的研究关注,这主要是因为它可以提供定制化、复杂结构的零件制造解决方案。在AM过程中,热场的分布和变化直接影响了零件的质量和性能。对此,采…...
Kafka与Flume的对比分析
Kafka与Flume的对比分析 一、Kafka和Flume1. Kafka架构2. Flume架构3. Kafka和Flume异同点 二、Kafka和Flume的性能对比1. 数据处理性能对比2. 大规模数据流处理的性能对比 三、性和稳定性对比1. 高可用集群的搭建KafkaFlume 2. 数据丢失和重复消费的问题处理KafkaFlume 四、适…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...