实战篇:oracle配置透明网关访问mysql详细教程(代码片段)

Lucifer三思而后行 Lucifer三思而后行     2023-02-04     820

关键词:

前言

从 Oracle 无法直接访问 Mysql 数据库,需要配置透明网关后通过 DBLink 实现访问。

今天搞了一下午透明网关配置,流程比较复杂,并且有一些坑,这不立刻来给大家排排坑,说不定以后就用的着呢!

废话不多说,直接实战走起~

一、环境准备

本次环境准备了 3 台主机,分别是 Oracle 数据库,MySQL 数据库,透明网关。

❤️ Oracle 安装包合集和补丁下载地址:2021年Oracle第三季度补丁合集

环境信息:

用途主机名IP地址主机版本数据库版本DB名称端口号
Oracle 数据库orcl10.211.55.100RHEL7.611GR2orcl1521
MySQL 数据库mysql10.211.55.101RHEL7.68.0.26lucifer3306
透明网关主机gateway10.211.55.102RHEL7.611GR21521

为什么透明网关需要单独配置一台主机?

  • 不影响数据库主机的正常运行
  • 便于安装配置以及管理
  • 数据库迁移时不需要重新配置透明网关
  • RAC 环境下,无需重复安装配置多个节点

📢 注意: 透明网关主机的配置不需要很高,无需安装 Oracle 数据库,仅安装透明网关即可!

二、实战演示

1、介质装备

首先,需要下载 GateWay 和 MySQL ODBC安装包:

  • mysql-connector-odbc-8.0.27-1.el7.x86_64.rpm
  • p13390677_112040_Linux-x86-64_5of7.zip

方便大家学习,我直接上传到百度网盘供大家下载:

链接: https://pan.baidu.com/s/1ybJGu1JCbOgRbjCTqtl9TA 
提取码: l062

2、安装透明网关

2.1、主机环境配置

下载上述安装介质并上传透明网关主机:

📢 注意: 安装透明网关之前需要配置环境和创建用户等等,可以参照 Linux 安装单机 Oracle 的环境配置步骤,这里就不再详述了!

使用 Oracle 一键安装脚本配置即可:

cd /soft
./OracleShellInstall.sh -i 10.211.55.102 -txh Y

📢 注意: 由于主机安装时选择了最小化安装,并且安装透明网关需要图形化,因此加上 -txh Y 安装图形化界面!

稍许等待几分钟之后,即可配置完成,由于没有上传 DB 安装包,这个报错是正常!

2.2、正式安装

主机配置完成后,开始安装透明网关:

## 首先 root 用户下,授权 oracle 访问 /soft 目录
chown -R oracle:oinstall /soft
## 切换到 oracle 用户下
su - oracle
## 解压透明网关安装包
unzip -q p13390677_112040_Linux-x86-64_5of7.zip
## 配置 vnc 访问图形化界面
vncserver

使用 VNC 客户端连接:

开始安装:

确认安装位置:

这里选择 for ODBC 即可:

开始安装,静待结束:

root 用户下执行 root.sh 脚本:

/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/11.2.0/db/root.sh

配置监听:

至此,透明网关安装结束!

2.3、安装 mysql-connector

首先需要安装 unixODBC 依赖,否则报错:

安装 unixODBC 依赖后安装 mysql-connector

yum install -y unixODBC*
rpm -ivh mysql-connector-odbc-8.0.27-1.el7.x86_64.rpm

📢 注意: 透明网关的安装到这里就全都结束了,接下来就是配置部分了。

3、透明网关配置

透明网关安装好之后,自然是需要配置才能使用的。

3.1、配置 odbc.ini

odbc.ini 文件用来存放 MySQL 数据库相关信息,默认不存在,root 用户下手动创建即可:

cat<<EOF>/etc/odbc.ini
[lucifer]
Description     = ODBC for MySQL
Driver          = /usr/lib64/libmyodbc8w.so
Server          = 10.211.55.101
Port            = 3306
User            = lucifer
Password        = lucifer
Database        = lucifer 
EOF

配置文件中的配置信息如下:

  • [lucifer] 可以理解为是一个 SID 名称,可以自定义,后面配置需要用到;
  • Server 是指 MySQL 数据库主机的 IP 地址;
  • Port 是指 MySQL 数据库的端口;
  • User 是指 Oracle 需要访问的用户名;
  • Password 是指被访问用户的登录密码;
  • Database 是指需要 MySQL 数据库需要被访问的 DB 名称;

📢 注意: 如果有多个 MySQL 数据库需要配置,则填写多个即可!

[lucifer]
Description     = ODBC for MySQL
Driver          = /usr/lib64/libmyodbc8w.so
Server          = 10.211.55.101
Port            = 3306
User            = lucifer
Password        = lucifer
Database        = lucifer 

[lucifer1]
Description     = ODBC for MySQL
Driver          = /usr/lib64/libmyodbc8w.so
Server          = 10.211.55.105
Port            = 3306
User            = lucifer1
Password        = lucifer1
Database        = lucifer1

3.2、配置 init[SID].ora

切换至 oracle 用户,进入 $ORACLE_HOME/hs/admin 目录下,新建一个 init[SID].ora 文件:

cat<<EOF>$ORACLE_HOME/hs/admin/initlucifer.ora
##HS Configuration
HS_FDS_CONNECT_INFO = lucifer
HS_FDS_TRACE_LEVEL = debug
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
HS_FDS_SUPPORT_STATISTICS=FALSE
HS_LANGUAGE=AMERICAN_AMERICA.UTF8
HS_NLS_NCHAR = UCS2
##ODBC Configuration
set ODBCINI=/etc/odbc.ini
EOF

这里 initSID.ora 中的 SID 名称和文件中 HS_FDS_CONNECT_INFO 参数值,就是上一步中我们配置 odbc.ini 文件中的 [lucifer] 名称。

📢 注意: 如果有多个 MySQL 数据库需要配置,则创建多个 init[SID].ora 文件 即可!

3.3、配置监听

oracle 用户下,进入 $TNS_ADMIN 配置 listener.ora 文件:

cat<<EOF>>$TNS_ADMIN/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
  (SID_DESC=
  (SID_NAME=lucifer)
  (ORACLE_HOME=/u01/app/oracle/product/11.2.0/db)
  (PROGRAM=dg4odbc)
  )
)
EOF

📢 注意: 如果有多个 MySQL 数据库需要配置,则写成如下格式!

cat<<EOF>>$TNS_ADMIN/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
  (SID_DESC =
  (SID_NAME = lucifer)
  (ORACLE_HOME=/u01/app/oracle/product/11.2.0/db)
  (PROGRAM=dg4odbc)
  )
  (SID_DESC =
  (SID_NAME = lucifer1)
  (ORACLE_HOME=/u01/app/oracle/product/11.2.0/db)
  (PROGRAM=dg4odbc)
  )
)
EOF

重启监听:

lsnrctl stop
lsnrctl start
lsnrctl status

配置完成之后,测试是否可以连接 MySQL 数据库:

isql lucifer

成功连接 MySQL 数据库,至此透明网关配置完成!

4、Oracle 数据库配置

透明网关配置完成后,就只需要配置 Oracle 数据库来连接透明网关。

4.1、配置 TNS

通过配置 TNS 来连接透明网关,进入 TNS 配置文件目录 $TNS_ADMIN 配置 TNS:

cat<<EOF>>$TNS_ADMIN/tnsnames.ora
lucifer =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.211.55.102)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = lucifer)
    )
   (HS = OK)
  )
EOF

通过 tnsping 测试后,发现访问没有问题!

4.2、配置 DBLink 连接 MySQL 数据库

接下来只需要创建你 DBLink 即可连接 MySQL 数据库:

create public database link lucifer connect to "lucifer" identified by "lucifer" using 'lucifer';

测试连接操作 MySQL 数据库:

select * from "lucifer"@lucifer order by "id";
delete from "lucifer"@lucifer where "id"=1;

至此,整个 Oracle 配置透明网关访问 MySQL 就完成了!

三、最后总结

如果按照我的步骤来操作,整个流程走下来应该会比较顺畅,下面罗列一下我操作过程中遇到的一些报错:

1、init[sid].ora 配置文件的 HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so 不正确,应该是 ODBC 的 Lib包:

ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
ORA-02063: preceding line from DLK

2、init[sid].ora 里配置的 HS_LANGUAGE=AMERICAN_AMERICA.zhs16gbk 字符集不正确或者没有配置,应该是 Oracle 数据库字符集:

ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[

3、执行查询操作时,表名需要带双引号,因为 MySQL 默认表名是区分大小写,而 Oracle 是不区分大小写的:

ERROR at line 1:
ORA-00942: table or view does not exist
[MySQL][ODBC 8.0(w) Driver][mysqld-5.7.18-log]Table 'test.T1' doesn't exist
42S02,NativeErr = 1146
ORA-02063: preceding 2 lines from DLK

4、Oracle 数据库配置 TNS 时,没有加 (HS = OK)

ERROR at line 1:
ORA-28546: connection initialization failed, probable Net8 admin error
ORA-02063: preceding line from LUCIFER

本文部分内容参考文档:Oracle透明网关访问MySQL数据库

firewalld防火墙高级配置——(实战篇!!)(代码片段)

实验拓扑图实验需求1.公司内网用户需要通过网关服务器共享上网2.互联网用户需要访问网站服务器3.只允许192.168.10.0/24ping网关和服务器4.网站服务器和网关服务器均通过SSH来远程管理,为了安全,将SSH默认端口改为12345,只允许192... 查看详情

实战篇:一行命令安装linux系统,超详细的vagrant上手指南(代码片段)

一行命令安装Linux演示:vagrantboxaddbento/oracle-7.9--providervirtualbox&&sudovagrantinitbento/oracle-7.9&&sudovagrantup通过上述演示,已成功安装Linux7.9,并且可以访问。前言最近发现了一款神器Vagrant࿱ 查看详情

实战篇:一行命令安装linux系统,超详细的vagrant上手指南(代码片段)

一行命令安装Linux演示:vagrantboxaddbento/oracle-7.9--providervirtualbox&&sudovagrantinitbento/oracle-7.9&&sudovagrantup通过上述演示,已成功安装Linux7.9,并且可以访问。前言最近发现了一款神器Vagrant࿱ 查看详情

100天精通oracle-实战系列(第2天)史上最详细linux6安装单机oracle11gr2数据库

100天精通Oracle-实战系列(第2天)Linux6安装Oracle11GR2数据库一、Linux6系统安装二、Linux系统配置1、环境信息2、配置网络3、关闭防火墙4、关闭Selinux5、远程连接主机6、配置yum源7、安装依赖包8、配置hosts9、创建用户和组10、创建安... 查看详情

实战篇:小白都能看懂的linux安装oracle数据库详细教程(代码片段)

作者简介作者:LuciferLiu,中国DBA联盟(ACDU)成员。目前主要从事OracleDBA工作,曾从事Oracle数据库开发工作,主要服务于生产制造,汽车金融等行业。现拥有OracleOCP,OceanBaseOBCA认证,擅长Oracle数据库运维... 查看详情

mysql培训班多少钱,实战篇

第一份资料:Kafka实战笔记Kafka入门为什么选择KafkaKarka的安装、管理和配置Kafka的集群第一个Kafka程序afka的生产者Kafka的消费者深入理解Kafka可靠的数据传递Spring和Kalka的整合Sprinboot和Kafka的整合Kafka实战之削峰填谷数据管道和... 查看详情

unity实战篇|unity接入qq登录详细过程——android篇

文章目录 查看详情

unity实战篇|unity接入qq登录详细过程——android篇

文章目录 查看详情

实战篇:oracledataguard出现gap如何修复?看这一篇就够了(附详细操作步骤)(代码片段)

作者简介作者:LuciferLiu,中国DBA联盟(ACDU)成员。目前主要从事OracleDBA工作,曾从事Oracle数据库开发工作,主要服务于生产制造,汽车金融等行业。现拥有OracleOCP,OceanBaseOBCA认证,擅长Oracle数据库运维... 查看详情

实战篇:手把手教你linux安装mysql(细致入微)(代码片段)

作者简介作者:LuciferLiu,中国DBA联盟(ACDU)成员。目前从事OracleDBA工作,曾从事Oracle数据库开发工作,主要服务于生产制造,汽车金融等行业。现拥有OracleOCP,OceanBaseOBCA认证,擅长Oracle数据库运维开发&#... 查看详情

服务器架构及实战(架构篇)-php建站

概述 详解  PHP的环境搭建  PHP的帮助使用和配置文件  PHP的HelloWorld  PHP的库函数调用  PHP的Web程序  PHP的函数和面向对象使用  PHP的数据库访问  Nginx安装和配置访问  WordPress的安装和配置实用  推进资料:图书... 查看详情

2019动力节点学习路线

...类型5.mysql视图6.mysql索引7.mysql分页8.SQL语句优化技巧Oracle实战1.Oracle安装与调试2.Oracle数据类型3.Oracle与MySQL对比4.Oracle数据结构概述5.Oracle运行原理6.Oracle内存结构7.Oracle表空间8.用户,表,序列的创建及使用9.Oracle索引10.Oracle分区... 查看详情

7.kong入门与实战基于nginx和openresty的云原生微服务网关---日志收集与分析(代码片段)

7.1 日志的分类与配置 7.1.1 访问日志的属性 7.1.2 访问日志的配置 7.1.3 错误日志的配置 7.2 ELKFilebeat的选择 7.3 Filebeat 7.3.1 安装 7.3.2 配置 7.3.3 启动 7.4 Elasticsearch 7.4.1 安装 7.4.2 配置 7.4.3 启动 7... 查看详情

ai实战篇|基于ai开放平台实现人脸识别对比功能,超详细教程附带源码

查看详情

ew通过socks5一层代理-访问内网二层网络-实战篇(代码片段)

文章目录0x01网络拓扑0x02背景介绍0x03ew一层代理(正向)一、windowserver配置二、测试连接0x04ew一层代理(反向)一、kali配置二、winserver配置三、测试连接摘抄0x01网络拓扑假设:目前已获取边界服务器(192.168.0.10... 查看详情

ew通过socks5一层代理-访问内网二层网络-实战篇(代码片段)

文章目录0x01网络拓扑0x02背景介绍0x03ew一层代理(正向)一、windowserver配置二、测试连接0x04ew一层代理(反向)一、kali配置二、winserver配置三、测试连接摘抄0x01网络拓扑假设:目前已获取边界服务器(192.168.0.10... 查看详情

zabbix实战之部署篇zabbix监控windows系统配置方法

【Zabbix实战之部署篇】Zabbix监控windows系统配置方法一、检查Zabbix监控平台状态1.检查Zabbix各组件状态2.检查Zabbix的首页二、下载windows代理1.访问Zabbix官网下载界面2.查看下载安装包三、安装windowsagent2代理1.安装windowsagent2代理2.代... 查看详情

python做大数据,都需要学习啥,比如哪些框架,库等!人工智能呢?请尽量详细点!

...导课程5、机器学习阶段六、人工智能篇之人工智能项目实战1、人脸性别和年龄识别原理2、CTR广告点击量预测3、DQN+遗传算法4、图像检索系统5、NLP阅读理解阶段七、人工智能篇之人工智能项目实战篇1、基于Python数据分析与机器... 查看详情