大家好,这里是 Lucifer三思而后行,专注于提升数据库运维效率。
目录
前言
从 Oracle 无法直接访问 Mysql 数据库,需要配置透明网关后通过 DBLink 实现访问。
今天搞了一下午透明网关配置,流程比较复杂,并且有一些坑,这不立刻来给大家排排坑,说不定以后就用的着呢!
废话不多说,直接实战走起~
一、环境准备
本次环境准备了 3 台主机,分别是 Oracle 数据库,MySQL 数据库,透明网关。
- ⭐️ Linux 主机安装教程可参考:实战篇:VMware Workstation 虚拟机安装 Linux 系统
- ⭐️ Oracle 单机安装教程可参考:实战篇:Linux 安装 Oracle 11GR2 数据库保姆级教程
- ⭐️ Oracle RAC 安装教程可参考:实战篇:一步步教你 Linux 7 安装 Oracle 11GR2 RAC
- ⭐️ Oracle 脚本一键安装可参考:开源项目:Install Oracle Database By Scripts!
- ⭐️ MySQL 安装教程可参考:实战篇:手把手教你 Linux 安装 MySQL 详细教程
❤️ Oracle 安装包合集和补丁下载地址:2021年Oracle第三季度补丁合集
环境信息:
用途 | 主机名 | IP地址 | 主机版本 | 数据库版本 | DB名称 | 端口号 |
---|---|---|---|---|---|---|
Oracle 数据库 | orcl | 10.211.55.100 | RHEL7.6 | 11GR2 | orcl | 1521 |
MySQL 数据库 | mysql | 10.211.55.101 | RHEL7.6 | 8.0.26 | lucifer | 3306 |
透明网关主机 | gateway | 10.211.55.102 | RHEL7.6 | 11GR2 | 无 | 1521 |
为什么透明网关需要单独配置一台主机?
- 不影响数据库主机的正常运行
- 便于安装配置以及管理
- 数据库迁移时不需要重新配置透明网关
- 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数据库
往期精彩文章
Oracle 一键巡检自动生成 Word 报告
Oracle 一键安装合集
Oracle一键安装脚本的 21 个疑问与解答
Oracle一键巡检脚本的 21 个疑问与解答
全网首发:Oracle 23ai 一键安装脚本(非 RPM)
Oracle 19C 最新 RU 补丁 19.24 ,一键安装!
Oracle Linux 7.9 一键安装 Oracle 19C
RedHat 9.4(aarch64) 一键安装 Oracle 19C
openEuler 22.03 LTS SP4 一键安装 Oracle 19C RAC
RHEL 7.9 一键安装 Oracle 19C 19.23 RAC
Oracle DataGuard GAP 修复手册
优化 Oracle:最佳实践与开发规范
DBA 必备:Linux 软件源配置全攻略
Linux 一键配置时钟同步全攻略
感谢您的阅读,这里是 Lucifer三思而后行,欢迎点赞+关注,我会持续分享数据库知识、运维技巧。
文章被以下合辑收录
评论

