• 一、安装透明网关以及mysql odbc
  • 1.1、下载oracle 透明网关
  • 1.2、按照默认安装透明网关
  • 1.3 下载安装mysql odbc驱动
  • 二 配置mysql数据源
  • 三 配置透明网关
  • 3.1配置 initdg4odbc.ora
  • 3.2 配置 listener.ora
  • 3.3 配置tnsnames.ora
  • 四 重启监听以及测试监听配置
  • 五、创建dblink 访问数据库


一、安装透明网关以及mysql odbc

1.1、下载oracle 透明网关

oracle 11g windows 64 位下载地址

https://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461.h

oracle11g通过透明网关访问mysql_ORA-28545 错误解决

1.2、按照默认安装透明网关

按照路径最好与oracle_home路径保持一致
按照后测试
dos窗口输入

dg4odbc

oracle11g通过透明网关访问mysql_mysql_02


看到以上信息表示安装成功。

1.3 下载安装mysql odbc驱动

下载地址;

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

oracle11g通过透明网关访问mysql_mysql_03

二 配置mysql数据源

oracle11g通过透明网关访问mysql_oracle_04


oracle11g通过透明网关访问mysql_ORA-28545 错误解决_05


oracle11g通过透明网关访问mysql_bc_06

记住配置的数据源名称为mysql。

测试连接

oracle11g通过透明网关访问mysql_oracle_07


测试成功后保存即可。

三 配置透明网关

3.1配置 initdg4odbc.ora

进入oracle_home 目录下找到hs\admin目录中initdg4odbc.ora文件并复制一份。

然后修改复制文件。把文件名称改为init+刚刚配置数据源名称(本实例为mysql).ora

oracle11g通过透明网关访问mysql_mysql_08


修改initmysql.ora内容

HS_FDS_CONNECT_INFO =mysql
HS_FDS_TRACE_LEVEL =on

HS_FDS_TRACE_LEVEL =on 这里最好设置on 网上一般将都是设置为off,为了查看错误日志,最后改为on。

3.2 配置 listener.ora

进入oracle_home/NETWORK\ADMIN 目录下,先备份listener.ora

oracle11g通过透明网关访问mysql_ORA-28545 错误解决_09


并在listener.ora加入下面内容

(SID_DESC =
      (SID_NAME =mysql)
      (ORACLE_HOME = D:\software\oracle11\product\11.2.0\dbhome_1)
      (PROGRAM =dg4odbc)
     )

oracle11g通过透明网关访问mysql_mysql_10

这里 SID_NAME 就是实例名称,也就是我们配置的mysql数据源名称,需要注意的是 PROGRAM ,Oracle11g这里一定要配置为dg4odbc。 不能是hsodbc 我就是修改为后面两种结果找了一下午的错误。ORA-28545: 连接代理时 Net8 诊断到错误

3.3 配置tnsnames.ora

进入客户端tns_admin 路径下在tnsnames.ora中添加

mysql =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME= mysql)
    )
    (HS = OK)
  )

oracle11g通过透明网关访问mysql_bc_11

四 重启监听以及测试监听配置

lsnrctl stop
lsnrctl start

oracle11g通过透明网关访问mysql_oracle_12


tnsping mysql

oracle11g通过透明网关访问mysql_oracle_13

看到监听配置成功

五、创建dblink 访问数据库

用sys用户在sqlplus登录

oracle11g通过透明网关访问mysql_ORA-28545 错误解决_14

create database link mysql connect to "root" identified by "root" using 'mysql';

oracle11g通过透明网关访问mysql_ORA-28545 错误解决_15

注意这里 用户名和密码 一定要加双引号,不然会被认为是大写。

测试连接

我们在mysql bi库中有一个表使sys_user. 数据如下

oracle11g通过透明网关访问mysql_ORA-28545 错误解决_16


通过sqlplus 访问 sys_user 表

select  "login_name","nick_name" from sys_user@mysql;

oracle11g通过透明网关访问mysql_mysql_17


注意,查询按字段获取时需要加上双引号,不然会提示字段不存在。

我们再插入一条数据进行测试

insert into  sys_user@mysql("id","login_name","nick_name") VALUES(2,'from_oracle','数据来自oralce数据库');

oracle11g通过透明网关访问mysql_bc_18


还需要注意的是由于mysql是会区分大小写,这里的id是小写。数据插入后

我们再回到mysql 数据中进行查询

oracle11g通过透明网关访问mysql_oracle_19


能正常查询到刚刚从oracle数据库插入的数据。