Oracle19c dblink链接mysql8.0

来源:这里教程网 时间:2026-03-03 17:56:08 作者:

说明:

某客户业务需求,需要在Oracle19c数据库上通过网络连接获取MySQL8.0数据库中业务数据。现针对该需求,配置Oracle19c连接至MySQL8.0数据库的dblink。

流程:

1.确认[Oracle]和[DG4ODBC]位数

通过检查确认,[Oracle]和[DG4ODBC]均是64位,这就要求[ODBC Driver Manager]和[ODBC Driver]也是64位组件




--DG4ODBC确认方式:

$ file $ORACLE_HOME/bin/dg4odbc

/oracle/app/product/19.3.0/db_1/bin/dg4odbc: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=b3f8329ffac4e745b3d8c96f64bfcd3a69d1ed6b, not stripped

2.下载及安装ODBC Driver Manager

ODBC驱动管理器介质下载地址:




为了方便测试,我这里直接调用操作系统自带的ODBC驱动管理器,ODBC驱动管理器rpm已经安装

# rpm -ql unixODBC.x86_64

/etc/odbcinst.ini

/usr/bin/dltest

/usr/bin/isql

/usr/bin/iusql

/usr/bin/odbc_config

/usr/bin/odbcinst

/usr/lib64/libesoobS.so.2

/usr/lib64/libesoobS.so.2.0.0

/usr/lib64/libmimerS.so.2

/usr/lib64/libmimerS.so.2.0.0

/usr/lib64/libnn.so.2

/usr/lib64/libnn.so.2.0.0

...

...

/usr/share/man/man1/dltest.1.gz

/usr/share/man/man1/isql.1.gz

/usr/share/man/man1/iusql.1.gz

/usr/share/man/man1/odbc_config.1.gz

/usr/share/man/man1/odbcinst.1.gz

/usr/share/man/man5/odbc.ini.5.gz

/usr/share/man/man5/odbcinst.ini.5.gz

3.下载及安装ODBC Driver

下载地址:

https://downloads.mysql.com/archives/c-odbc/

解压介质并安装

\# 上传软件并解压

\# tar zxvf /soft/mysql-connector-odbc-8.0.21-linux-glibc2.12-x86-64bit.tar.gz

\# mkdir /usr/local/mysql-connector-odbc/

\# mv /soft/mysql-connector-odbc-8.0.21-linux-glibc2.12-x86-64bit/* /usr/local/mysql-connector-odbc/

4.mysql8.0建立测试数据

建立测试用户:

create user root@'%' identified by '123456';

grant all on *.* to 'root'@'%'

--注意8.0无法直接通过授权来创建用户




mysql>create database test

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql             |

| performance_schema |

| sys               |

| test               |

+--------------------+

5 rows in set (0.04 sec)




mysql> use test;

Database changed




mysql> create table byh(id int);

Query OK, 0 rows affected (0.73 sec)




mysql> insert into byh values(1);

Query OK, 1 row affected (0.47 sec)




mysql> select count(*) from byh;

+----------+

| count(*) |

+----------+

|       1 |

+----------+

1 row in set (0.00 sec)


5.配置ODBC data source

# vi /etc/odbc.ini

[myodbc8]

Driver = /usr/local/mysql-connector-odbc/lib/libmyodbc8a.so

Description = Connector/ODBC 8 Driver DSN

SERVER = 192.168.98.153       --mysql服务端IP

PORT = 3306                   --mysql服务端端口  

USER = root                   --mysql连接用户

PASSWORD = 123456             --mysql连接密码

DATABASE = test               --连接的数据库

OPTION = 0

TRACE = OFF

6.创建libodbcinst.so.2.0.0、libodbc.so.2.0.0文件软链接

\# cd /usr/lib64/

\# ln -s libodbcinst.so.2.0.0 libodbcinst.so.1

\# ln -s libodbc.so.2.0.0 libodbc.so.1

7.验证ODBC至MySQL Server端的连接

# isql myodbc8 -v

+------------------------+

| Connected!       |

|                 |

| sql-statement     |

| help [tablename]   |

| quit             |

|                 |

+-------------------------+

SQL>

8.Oracle配置listener.ora

编辑监听配置文件,创建LISTENER并对实例myodbc8进行静态注册

LISTENER =

(DESCRIPTION_LIST =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.99.21)(PORT = 1521))

  )

)

SID_LIST_LISTENER=

    (SID_LIST=

      (SID_DESC=

            (SID_NAME=myodbc8)

            (ORACLE_HOME=/oracle/app/product/19.3.0/db_1)

            (PROGRAM=dg4odbc)

            (ENV="LD_LIBRARY_PATH=/usr/lib64:/oracle/app/product/19.3.0/db_1/lib")

      )

  )

9.启动监听LISTENER并查看监听状态

$ lsnrctl start LISTENER

$ lsnrctl status LISTENER

Service "myodbc8" has 1 instance(s).

Instance "myodbc8", status UNKNOWN, has 1 handler(s) for this service...

10.配置tnsnames.ora

$ vi tnsnames.ora

myodbc8 =

(DESCRIPTION =

  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.99.21)(PORT = 1521))

  (CONNECT_DATA =

    (SID = myodbc8)

  )

    (HS = OK)

)

11.验证myodbc8连接串配置

$ tnsping myodbc8 

TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 29-OCT-2020 23:30:28

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

Used parameter files:

/oracle/app/product/19.3.0/db_1/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.99.21)(PORT = 1521)) (CONNECT_DATA = (SID = myodbc8)) (HS = OK))

OK (10 msec)

12.配置网关参数文件initmyodbc5.ora

$ cd $ORACLE_HOME/hs/admin

$ vi initmyodbc8.ora 

HS_FDS_CONNECT_INFO=myodbc8

# Data source name in odbc.ini

HS_FDS_TRACE_LEVEL=ON

HS_FDS_SHAREABLE_NAME=/usr/lib64/libodbc.so

HS_FDS_SUPPORT_STATISTICS=FALSE

HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P15

#

# ODBC env variables

set ODBCINI=/etc/odbc.ini

13.创建Oracle DBlink

SQL> create public database link myodbc8 connect to "root" identified by "123456" using 'myodbc8';

14.验证Oracle DBlink

SQL> select count(*) from "byh"@myodbc8;

COUNT(*)

----------

  1

15.MOS参考文档:

配置Oracle至MySQL DBlink:

Detailed Overview of Connecting Oracle to MySQL Using DG4ODBC Database Link (文档 ID 1320645.1)

Odbc Connection From Oracle To SQL*Server Fails With Errors Ora-28546 and Ora-2063 When Using Connection via Database Link. (文档 ID 1389492.1)

相关推荐