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).
四、在 Oracle 中创建 DBLINK
登录 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。
