针对oracle数据库不同实例之间的数据访问,我们可以直接通过dblink访问,如果oracle数据库想访问mysql/sqlserver等数据库的数据,我们可以通过配置oracle透明网关实现异构数据库dblink访问。

好久没做透明网关的配置了,最近有业务需求,这里将部署过程做个记录,希望对有需要的朋友有所帮助。

一、Oracle数据库通过透明网关访问MySQL数据库环境说明

RHEL6.6  oracle 11.2.0.4

RHEL6.6 MySQL5.7

odbc

二、数据访问流程

oracle——dg4odbc——odbc——mysql

三、Oracle透明网关(MySQL)安装

oracle 11.2.0.4默认安装了odbc透明网关
验证:
[oracle@test ~]$ cd $ORACLE_HOME/hs
[oracle@test hs]$ dg4odbc

Oracle Corporation --- FRIDAY    APR 27 2018 10:07:44.375

Heterogeneous Agent Release 11.2.0.4.0 - 64bit Production  Built with
Oracle Database Gateway for ODBC

##database gateway for odbc  简称   dg4odbc

四、mysql-connector安装

下载:
https://dev.mysql.com/downloads/connector/odbc/
https://dev.mysql.com/get/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.11-1.el6.x86_64.rpm

安装:

[root@test ~]# rpm -ivh mysql-connector-odbc-8.0.11-1.el6.x86_64.rpm
warning: mysql-connector-odbc-8.0.11-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ########################################### [100%]
1:mysql-connector-odbc ########################################### [100%]
Success: Usage count is 1
Success: Usage count is 1

依赖包安装:
yum install unixODBC*

rpm -qa |grep unixODBC

unixODBC-devel-2.2.14-14.el6.x86_64
unixODBC-2.2.14-14.el6.x86_64

五、ODBC配置

[root@test ~]# vi /etc/odbc.ini

[mysql_test]
Description = ODBC for MySQL
Driver = /usr/lib64/libmyodbc8w.so
Server = mysql_ipaddr
Port = 3306
User = dbtest
Password = abcd1234
Database = test

六、MySQL数据库创建账号、授权并测试连通性

账号创建:
(root:localhost:Fri Apr 27 10:16:11 2018)[(none)]>create database test;
(root:localhost:Fri Apr 27 10:16:22 2018)[(none)]>grant all on test.* to dbtest@'%' identified by 'abcd1234';
(root:localhost:Fri Apr 27 10:16:40 2018)[(none)]>flush privileges;
连通性测试: [root@test ~]# isql mysql_test
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>

七、Oracle数据库相关配置

(1)hs透明网关配置

[oracle@test ~]$ cd $ORACLE_HOME/hs
[oracle@test hs]$ cd admin
[oracle@test admin]$ vi initmysql_test.ora

##HS Configuration

HS_FDS_CONNECT_INFO = mysql_test
HS_FDS_TRACE_LEVEL = debug
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
HS_FDS_SUPPORT_STATISTICS=FALSE
HS_LANGUAGE=AMERICAN_AMERICA.zhs16gbk ##ODBC Configuration set ODBCINI=/etc/odbc.ini

##这里配置的是数据库实例名、odbc lib包,oracle数据库字符集、odbc配置文件路径

(2)监听配置

[oracle@test admin]$ vi /U01/app/oracle/product/11.2.0.4/network/admin/listener.ora

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dbsid)
(SID_NAME = dbsid)
(ORACLE_HOME=/U01/app/oracle/product/11.2.0.4)
)
(SID_DESC=
(SID_NAME=mysql_test)
(ORACLE_HOME=/U01/app/oracle/product/11.2.0.4)
(PROGRAM=dg4odbc)
)
) LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.1)(PORT = 1521))
)
)

重启监听
lsnrctl stop
lsnrctl start

(3)tnsname配置

配置tnsname
[oracle@test admin]$ vi /U01/app/oracle/product/11.2.0.4/network/admin/tnsnames.ora

dbsid_mysql =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.1 )(PORT = 1521))
)
(CONNECT_DATA =
(SID = mysql_test)
)
(HS = OK)
)

测试tnsname连接
[oracle@test admin]$ tnsping dbsid_mysql

TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 27-APR-2018 12:17:58

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

Used parameter files:

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.1)(PORT = 1521))) (CONNECT_DATA = (SID = mysql_test)) (HS = OK))
OK (0 msec)

八、dblink创建以及数据访问测试

SQL>create  PUBLIC DATABASE LINK dlk connect to "dbtest" identified by "abcd1234" using 'dbsid_mysql';

SQL> select * from "t1"@dlk;

        id
----------
        10
        11
       
SQL> insert into "t1"@dlk values(30); 1 row created.

九、错误信息以及处理方法

(1)错误01

错误信息:

SQL> select * from t1@dlk;
select * from t1@dlk
*
ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
ORA-02063: preceding line from DLK

错误原因以及处理方法:hs/admin/init[sid].ora里配置的HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so不正确,应该是odbc的Lib包
(2)错误02
错误信息:

SQL> select * from "t1"@dlk;
select * from "t1"@dlk
*
ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[

错误原因以及处理方法:hs/admin/init[sid].ora里配置的HS_LANGUAGE=AMERICAN_AMERICA.zhs16gbk字符集不正确,应该是oracle数据库字符集
(3)错误03:
错误信息:

SQL> select * from t1@dlk;
select * from t1@dlk
*
ERROR at line 1:
ORA-00942: table or view does not exist
[MySQL][ODBC 8.0(w) Driver][mysqld-5.7.18-log]Table 'test.T1' doesn't exist
{42S02,NativeErr = 1146}
ORA-02063: preceding 2 lines from DLK

错误原因以及处理方法:执行的查询操作,表名需要带双引号,因为mysql默认表名是区分大小写,而oracle是不区分大小写的 select * from "t1"@dlk;
(4)参考文档
https://blog.csdn.net/u012514278/article/details/51741698
http://blog.itpub.net/7728585/viewspace-2128158/
http://www.docin.com/p-113642416.html

最新文章

  1. 磁盘操作系统(DOS)
  2. Javascript实现图片预加载【回调函数,多张图片】
  3. jmeter 监控服务器的内存,cpu等内容
  4. 【AT91SAM3S】建立基于SAM3S库的工程并点亮LED
  5. PySe-001-基础环境配置(MacOX)
  6. js 传参报错 参数含有数字、字母组合的字符串SyntaxError: identifier starts immediately after numeric literal
  7. C#Winform中treeView控件使用总结
  8. Report_报表中Ref Cursor数据源的概念和用法(案例)
  9. mongodb 的js脚本或pymongodb脚本修改数据库的字段值
  10. nginx js、css多个请求合并为一个请求(concat模块)
  11. 【美妙的Python之中的一个】Python简单介绍及环境搭建
  12. ExtJS 获取浏览器宽度
  13. redis安装方法
  14. out/target/common/obj/PACKAGING/public_api.txt android.view.KeyEvent.KEYCODE_has changed value from
  15. 安装了C
  16. Java Socket应用---通信是这样练成的
  17. 低版本IDE 打开 高版本 IDE 代码时 unit
  18. jdbc访问pipelinedb
  19. Springboot单例模式实战封装json转换
  20. Scrapy框架的执行流程解析

热门文章

  1. react解决roadhog buildDll 【转】
  2. android设计的布局在阿拉伯语下界面错乱的解决方法
  3. java 内存分析之堆栈空间
  4. CSS 小结笔记之元素的隐藏与显示
  5. linux(centos7)下SVN服务器搭建手札
  6. Oracle EBS AP银行显示不全
  7. C#实体类对象修改日志记录
  8. FileStream对文本进行读写操作
  9. Linux tar命令详解
  10. c++ 数组操作(转)