脚本宝典收集整理的这篇文章主要介绍了实战篇:Oracle 配置透明网关访问 MySQL 详细教程,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
从 oracle 无法直接访问 MySQL 数据库,需要配置透明网关后通过 DBLink 实现访问。
今天搞了一下午透明网关配置,流程比较复杂,并且有一些坑,这不立刻来给大家排排坑,说不定以后就用的着呢!
废话不多说,直接实战走起~
本次环境准备了 3 台主机,分别是 Oracle 数据库,;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 |
为什么透明网关需要单独配置一台主机?
📢 注意: 透明网关主机的配置不需要很高,无需安装 Oracle 数据库,仅安装透明网关即可!
首先,需要下载 GateWay 和 MySQL ODBC安装包:
方便大家学习,我直接上传到百度网盘供大家下载:
链接: https://pan.baidu.COM/s/1ybJGu1JCbOgRbjCTqtl9TA
提取码: l062
下载上述安装介质并上传透明网关主机:
📢 注意: 安装透明网关之前需要配置环境和创建用户等等,可以参照 Linux 安装单机 Oracle 的环境配置步骤,这里就不再详述了!
使用 Oracle 一键安装脚本配置即可:
cd /soft
./OracleShellInstall.sh -i @H_512_179@10.211.55.102 -txh Y
📢 注意: 由于主机安装时选择了最小化安装,并且安装透明网关需要图形化,因此加上 -txh Y
安装图形化界面!
稍许等待几分钟之后,即可配置完成,由于没有上传 DB 安装包,这个报错是正常!
主机配置完成后,开始安装透明网关:
## 首先 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
配置监听:
至此,透明网关安装结束!
首先需要安装 unixODBC
依赖,否则报错:
安装 unixODBC
依赖后安装 mysql-connector
:
yum install -y unixODBC*
rpm -ivh mysql-connector-odbc-8.0.27-1.el7.x86_64.rpm
📢 注意: 透明网关的安装到这里就全都结束了,接下来就是配置部分了。
透明网关安装好之后,自然是需要配置才能使用的。
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
配置文件中的配置信息如下:
📢 注意: 如果有多个 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
切换至 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 文件 即可!
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 数据库,至此透明网关配置完成!
透明网关配置完成后,就只需要配置 Oracle 数据库来连接透明网关。
通过配置 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
测试后,发现访问没有问题!
接下来只需要创建你 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 配置透明网关访问 MySQL 详细教程全部内容,希望文章能够帮你解决实战篇:Oracle 配置透明网关访问 MySQL 详细教程所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。