前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Oracle中通过dblink访问MySQL数据库

在Oracle中通过dblink访问MySQL数据库

作者头像
AiDBA宝典
发布2024-03-21 18:09:06
2090
发布2024-03-21 18:09:06
举报

简介

在之前的博客中已经配置过了,可以参考:https://www.xmmup.com/oracle-database-gatewaystoumingwangguandeanzhuanghepeizhi.html#Oracle_lian_jie_daoMySQL

Oracle使用DG4ODBC数据网关连接MySQL数据库,可以不用安装Gateways网关,其原理图如下:

从上图可知,Oracle连接MySQL需要涉及到如下组件:DG4ODBC, ODBC Driver Manager, ODBC Driver。

环境准备

代码语言:javascript
复制
-- oracle 21c
docker rm -f ora21tomariadb
docker run -d --name ora21tomariadb -h lhroracle21c \
  -v /sys/fs/cgroup:/sys/fs/cgroup \
  --privileged=true lhrbest/oracle21c_ee_db_21.3.0.0 \
  /usr/sbin/init

-- 由于只读主目录特性,21c中的spfile、pfile、密码文件默认在$ORACLE_BASE/dbs目录下,例如:/u01/app/oracle/dbs下。
[oracle@lhroracle21c dbs]$ pwd
/u01/app/oracle/dbs
[oracle@lhroracle21c dbs]$ ll
total 18308
-rw-rw---- 1 oracle oinstall     1544 Mar 18 16:19 hc_LHRCDB.dat
-rw-r----- 1 oracle oinstall      686 Mar 18 16:19 initLHRCDB.ora
-rw-r----- 1 oracle oinstall       24 Aug 16  2021 lkLHRCDB
-rw-r----- 1 oracle oinstall     2048 Aug 16  2021 orapwLHRCDB
-rw-r----- 1 oracle oinstall 18726912 Aug 16  2021 snapcf_LHRCDB.f
-rw-r----- 1 oracle oinstall     3584 Mar 18 17:01 spfileLHRCDB.ora
[oracle@lhroracle21c dbs]$ 





-- mysql 8.1
mkdir -p /etc/mysql/ora2mysql81/
cat >  /etc/mysql/ora2mysql81/conf/my.cnf <<"EOF"
[mysqld]
default-time-zone = '+8:00'
log_timestamps = SYSTEM
skip-name-resolve
log-bin
server_id=813420
character_set_server=utf8mb4
default_authentication_plugin=mysql_native_password
EOF


docker run -d --name ora2mysql81 -h ora2mysql81  \
  -v /etc/mysql/mysql81/conf:/etc/mysql/conf.d \
  -e MYSQL_ROOT_PASSWORD=lhr -e TZ=Asia/Shanghai \
  mysql:8.1.0


mysql -uroot -plhr -h192.92.0.54 -P3306 -e "select now(),@@hostname,@@version;" 
mysql -uroot -plhr -h192.92.0.54 -P3306 -e "create database lhrdb;" 
mysql> use lhrdb;
Database changed
mysql> create table t1(id int);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t1 values(1);
Query OK, 1 row affected (0.04 sec)





[root@alldb ~]# mysql -uroot -plhr -h192.92.0.54 -P3306 -e "select now(),@@hostname,@@version;" 
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------------+-------------+-----------+
| now()               | @@hostname  | @@version |
+---------------------+-------------+-----------+
| 2024-03-18 16:23:35 | ora2mysql81 | 8.1.0     |
+---------------------+-------------+-----------+

开始配置

1、以下内容均在Oracle的主机配置。 2、MySQL的主机为192.92.0.54

代码语言:javascript
复制
-- root操作
yum install -y unixODBC unixODBC-devel mysql-connector-odbc

-- 升级 mysql-connector-odbc驱动
rpm -Uvh https://repo.mysql.com//mysql80-community-release-el7.rpm
yum update -y unixODBC unixODBC-devel mysql-connector-odbc


cat >/etc/odbc.ini <<"EOF"
[myodbc8]
#Driver = /usr/lib64/libmyodbc8w.so
Driver = /usr/lib64/libmyodbc8w.so
Description = Connector/ODBC 5.2 Driver DSN  
SERVER = 192.92.0.54  
PORT = 3306  
USER = root  
PASSWORD = lhr  
DATABASE = lhrdb  
OPTION = 0  
TRACE = OFF
EOF


export ODBCINI=/etc/odbc.ini
isql myodbc8 -v
show databases;

[oracle@lhroracle21c admin]$ export ODBCINI=/etc/odbc.ini
[oracle@lhroracle21c admin]$  isql myodbc8 -v
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> show databases;
+-----------------------------------------------------------------+
| Database                                                        |
+-----------------------------------------------------------------+
| information_schema                                              |
| lhrdb                                                           |
| mysql                                                           |
| performance_schema                                              |
| sys                                                             |
+-----------------------------------------------------------------+
SQLRowCount returns 5
5 rows fetched
SQL> 






-- oracle操作
cd  /u01/app/oracle/product/21c/dbhome_1/network/admin
cat >> tnsnames.ora <<"EOF"
myodbc8 =   
  (DESCRIPTION=  
    (ADDRESS=  
        (PROTOCOL=TCP) (HOST=127.0.0.1) (PORT=1521)  
    )  
    (CONNECT_DATA=  
      (SID=myodbc8)  
    )  
    (HS=OK)  
)
EOF

-- vi listener.ora
SID_LIST_LISTENER=  
  (SID_LIST=  
    (SID_DESC=  
      (SID_NAME=myodbc8)  
      (ORACLE_HOME=/u01/app/oracle/product/21c/dbhome_1)  
      (PROGRAM=dg4odbc)  
      (ENVS=LD_LIBRARY_PATH=/u01/app/oracle/product/21c/dbhome_1/lib)  
    )   
  )

-- 注意Oracle 21c的位置
cat > /u01/app/oracle/homes/OraDB21Home1/hs/admin/initmyodbc8.ora <<"EOF"
HS_FDS_CONNECT_INFO=myodbc8
HS_FDS_SHAREABLE_NAME=/usr/lib64/libodbc.so
HS_FDS_SUPPORT_STATISTICS=FALSE
HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P15
EOF



lsnrctl reload
lsnrctl status
tnsping myodbc8

[oracle@lhroracle21c admin]$ tnsping myodbc8

TNS Ping Utility for Linux: Version 21.0.0.0.0 - Production on 18-MAR-2024 16:33:15

Copyright (c) 1997, 2021, Oracle.  All rights reserved.

Used parameter files:
/u01/app/oracle/product/21c/dbhome_1/network/admin/sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (HOST=127.0.0.1) (PORT=1521)) (CONNECT_DATA= (SID=myodbc8)) (HS=OK))
OK (0 msec)
[oracle@lhroracle21c admin]$ 





[oracle@lhroracle21c admin]$ odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /etc/odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
[oracle@lhroracle21c admin]$ 




create   public   database  link mysqltest  connect   to   "root"  identified  by   "lhr"  using  'myodbc8' ;  
select   count(*)  from  "t1"@mysqltest;


SYS@LHRCDB> select   count(*)  from  "t1"@mysqltest;

  COUNT(*)
----------
         1

总结

1、Oracle通过dblink连接mysql和PG不需要安装Gateways透明网关软件

2、若Oracle是21c版本,则由于Oracle 21c的默认只读主目录特性,则在配置透明网关文件时,initmyodbc8.ora文件不应放在ORACLE_HOME/hs/admin目录下,而应该放在ORACLE_BASE/homes/OraDB21Home1/hs/admin目录下:

代码语言:javascript
复制
cat > /u01/app/oracle/homes/OraDB21Home1/hs/admin/initmyodbc8.ora <<"EOF"
HS_FDS_CONNECT_INFO=myodbc8
HS_FDS_SHAREABLE_NAME=/usr/lib64/libodbc.so
HS_FDS_SUPPORT_STATISTICS=FALSE
HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P15
EOF


-- 查看是否开启只读主目录,Oracle 21c默认开启
cat $ORACLE_HOME/install/orabasetab

3、Oracle到mariadb也是可以的(10.4.24-MariaDB 已测试)

4、dg4odbc日志文件在hs/log/目录下。

参考

https://www.xmmup.com/oracle-database-gatewaystoumingwangguandeanzhuanghepeizhi.html#Oracle_lian_jie_daoMySQL

https://www.xmmup.com/detailed-overview-of-connecting-oracle-to-mysql-using-dg4odbc-database-link-doc-id-1320645-1.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 环境准备
  • 开始配置
  • 总结
  • 参考
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档