window server2008下Oracle 配置dblink查询 MySQL 数据

源端:

Windows Server 2008

Oracle Database 11gR2 (64-bit)

目标端:

CentOS 7.9

MySQL 8.0.40

访问方式:Oracle 使用 DG4ODBC + MySQL ODBC建立DBLINK查询 MySQL 数据

一、在 Windows Server 安装 MySQL ODBC 驱动

1. 下载 MySQL ODBC 8.0 驱动(64-bit)

官方下载地址:

https://dev.mysql.com/downloads/connector/odbc/

选择:

Windows (x86, 64-bit), MSI Installer → Connector/ODBC 8.0.33

安装完成后继续

#mysql ODBC的驱动版本要注意兼容性,否则连接会失败,报ora-03113 通信通道的文件结尾。

2. 配置 ODBC 数据源

打开:

控制面板 → 管理工具 → ODBC 数据源 (64位)

选择系统DSN→ 新建 → MySQL ODBC 8.0 Driver

填写:

| 参数 | 值 |

| ---------------- | --------------------------- |

| Data Source Name | mysql_dsn |

| Server | MySQL服务器IP(如 192.168.10.50) |

| User | mysql_user |

| Password | mysql_password |

| Database | 目标库名,如 testdb |

| Port | 3306 |

点击Test必须为Success

二、Linux 端 MySQL 授权访问(必须)

在 MySQL 服务器执行:

CREATE USER 'mysql_user'@'%' IDENTIFIED BY 'mysql_password';

GRANT ALL PRIVILEGES ON testdb.* TO 'mysql_user'@'%';

FLUSH PRIVILEGES;

三、配置 Oracle DG4ODBC 网关

1. 编辑 tnsnames.ora

路径:

%ORACLE_HOME%\network\admin\tnsnames.ora

增加:

MYSQL_DBLINK =

(DESCRIPTION=

(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))

(CONNECT_DATA=(SID=MYSQLGATE))

(HS=OK)

)

2. 创建网关初始化文件

路径:

%ORACLE_HOME%\hs\admin\initMYSQLGATE.ora

内容:

HS_FDS_CONNECT_INFO = mysql_dsn

HS_FDS_TRACE_LEVEL = 0

HS_LANGUAGE = AMERICAN_AMERICA.AL32UTF8

3. 编辑 listener.ora

路径:

%ORACLE_HOME%\network\admin\listener.ora

增加SID_DESC(红色部分):

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = CLRExtProc)

(ORACLE_HOME = D:\Oracle\product\11.2.0\dbhome_2)

(PROGRAM = extproc)

(ENVS = "EXTPROC_DLLS=ONLY:D:\Oracle\product\11.2.0\dbhome_2\bin\oraclr11.dll")

)

(SID_DESC =

(SID_NAME = MYSQLGATE)

(ORACLE_HOME = D:\Oracle\product\11.2.0\dbhome_2)

(PROGRAM = dg4odbc)

)

)

⚠ 请替换 ORACLE_HOME 路径为你的真实路径

重启监听:

lsnrctl stop

lsnrctl start

确认注册成功:

lsnrctl status

需看到:

Service "MYSQLGATE" has 1 instance(s).

登录 SQL*Plus:

CREATE PUBLIC DATABASE LINK mysql_link

CONNECT TO "mysql_user" IDENTIFIED BY "mysql_password"

USING 'MYSQL_DBLINK';

五、测试访问

SELECT * FROM your_table@mysql_link;

如果能返回数据,即配置成功!

常见问题排查

| 错误 | 解决方案 |

| --------------------- | -------------------------------------------- |

| ORA-28545 / ORA-28500 | 确保 ODBC 使用 **系统DSN**,并重启 Oracle 服务

| ORA-02019 | DBLINK 名称写错 |

|ORA-03113 |驱动版本不匹配,安装对应的驱动

| 中文乱码 | 确保 `HS_LANGUAGE = AMERICAN_AMERICA.AL32UTF8` |

可选优化(强烈建议)

由于 MySQL 表名默认大小写敏感,建议在 MySQL 中执行:

sql

SET GLOBAL lower_case_table_names = 1;

并重启 MySQL。

相关推荐
先吃饱再说14 小时前
存储的进化:从 MySQL 到浏览器缓存,数据到底住在哪?
数据库
Nturmoils15 小时前
字段太多看不全,ksql 的展开模式和输出控制怎么用
数据库·后端
Databend17 小时前
Agent 轨迹分析与归因的数据工程实践
大数据·数据库·agent
这个DBA有点耶17 小时前
SQL改写进阶:标量子查询的“隐形代价”与消除实战
数据库·mysql·架构
smallyoung18 小时前
数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南
数据库·mysql·postgresql
parade岁月18 小时前
MySQL JOIN解析:朴实无华但食之有味
数据库·后端
用户31693538118319 小时前
MySQL服务无法启动问题解决全记录
数据库
vivo互联网技术1 天前
从 10 分钟到 1 秒:ES 深度分页任意跳页的三轮优化实战
服务器·数据库·redis·elasticsearch·深度分页
数据技术说1 天前
MySQL 迁移实战——如何实现真正的"零改造"平滑切换
mysql
倔强的石头_2 天前
《Kingbase护城河》——猎捕慢查询:执行计划的微观解析与索引调优实战
数据库