1.1.1.   文档编写目的

项目上需要做与Mysql数据库的对接,然而Oracle与Mysql数据库是异构的,因此这里采用透明网关的方式来解决。

另,项目上的环境为APP:12.2.6 ; DB: 12.1.0

主要配置如下:

2.1 确定使用32/64 bit的驱动

登陆服务器,执行指令:file $ORACLE_HOME/bin/dg4odbc

从上可以看出是64位,需要安装64位驱动。

注:这里需要严格匹配。

2.2 下载ODBC驱动管理

ODBC 造就了"应用程序独立性"的特性,使应用程序不需在乎数据源是何种数据库系统或者纯粹是个资料或文本文件,只要相对驱动程序能完成衔接的功能,则应用程序即可达到高度的独立性。

下载网址(文档链接在文章结尾):http://sourceforge.net/projects/unixodbc/files/unixODBC/2.2.14/unixODBC-2.2.14-linux-x86-64.tar.gz/download

这里,注意以下几点:

1.要用root账户进行解压、修改配置文件的操作;

2.最好将文件放在/tmp目录下进行操作,因为linux文件系统针对不同的用户对不同文件夹有不同的读写权限,但/tmp目录下所有的用户都可以进行读写和修改。

因此,本文档的解压路径等都放在/tmp路径下。

2.3 安装ODBC驱动管理

将下载的文件放在/tmp目录下,用root账户登录服务器。

1.在/tmp目录下执行命令:tar zxvf unixODBC-2.2.14-linux-x86-64.tar.gz

默认会解压到usr/local目录下,包含bin,include ,lib 三个目录。

2.创建文件夹 unixodbc-2.2.14,执行命令:mkdir unixodbc-2.2.14

3.进入创建的文件夹,执行命令:cd unixodbc-2.2.14

4.将刚解压的文件复制到当前目录下,执行指令:mv  /tmp/usr/local/* .

注意:命令后面还有个点

5.更改配置文件,这里切换到ora账户下执行,修改home目录下的.bash_profile文件,如下:

执行指令:vi ~/.bash_profile

添加如下:export LD_LIBRARY_PATH=/tmp/unixodbc-2.2.14/lib

export PATH=/usr/sbin:/tmp/unixodbc-2.2.14/bin:$PATH

如图所示:

注意:配置文件中不能‘=’两边不能有空格。

修改完后,保存(ctrl+c 切换出来,输入:wq! 执行linux的强制保存命令)。

6.执行命令:source ~/.bash_profile,查看修改的配置文件是否有错误,例如:若在配置文件中添加空格,配置文件无效,执行该命令可查看报错的信息。

2.4 下载mysql连接odbc的驱动

下载网址:http://www.mysql.com/downloads/connector/odbc/5.1.html

1.将tar包同上放在/tmp文件夹内,执行解压命令(切换到root用户下):

tar zxvf mysql-connector-odbc-5.1.13-linux-glibc2.5-x86-64bit.tar.gz

2.在当前目录下,建立新的文件夹,执行命令:mkdir mysqlodbc_5.1.13

3.将解压的文件放在新建的文件夹内。执行命令:mv mysql-connector-odbc-5.1.13-linux-glibc2.5-x86-64bit.tar.gz mysqlodbc_5.1.13

2.5 配置ODBC数据源

还是在root用户下(因为root用户有修改如下配置文件的权限,否则会报错)。

1.cd /etc

2.修改目录下的 odbc.ini 文件,添加如下代码:

[myodbc3]

Driver       = /usr/lib64/libmyodbc5.so

Description  = MySQL ODBC 5.1 Driver DSN

SERVER       = XXX.XX.XX.XX

PORT         = 3306

USER         = XXXXX

Password     = XXXX

Database     = XXX

OPTION       = 3

SOCKET       =

charset      = utf8

如图所示:

注意如下几点:

1.Driver目录下的驱动文件一定要有;

2.server是指mysql数据库的IP;

3.mysql数据库默认端口为3306;

4.user是指mysql数据库给我们访问的用户;

5.password是指MySQL数据库给我们访问的用户密码;

6.database是指mysql数据库的实例。

2.6 将odbc.ini 加入到配置文件中

用ora用户登陆服务器。修改 .bash_profile 文件。

增添如下:

export ODBCINI=/etc/odbc.ini

ODBCSYSINI=/etc;export ODBCSUSINI

ODBCINSTINI=/etc/odbc.ini

export ODBCINSTINI

如图:

最后,执行:source  ~/.bash_profile

2.7 测试连通

在ora 用户或者 root 用户执行: isql myodbc3 -v。

出现如下图所示,表示连通。

2.8 配置 tnsnames.ora

1.在ora用户下,输入命令:cd $TNS_ADMIN

2.输入命令:vi tnsnames.ora

3.添加如下:

myodbc3 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))

(CONNECT_DATA =

(SID =myodbc3))

(HS=OK)

)

注意:端口编号有时可能会冲突,注意修改,和listener中的端口号一致即可;

和其他TNS的端口号一致即可。

HS=OK 必输,因为连接需要用此来标识是数据库内部的连接还是同其他数据库的连接。

2.9 配置 listener.ora

1.在ora用户下,输入命令:cd $TNS_ADMIN

2.输入命令:vi listener.ora

3.添加如下:

SID_LIST_TEST =

(SID_LIST =

(SID_DESC =

(ORACLE_HOME= /u01/test/db/12.1.0)

(SID_NAME = TEST)

)

(SID_DESC=

(PROGRAM = dg4odbc)

(SID_NAME= myodbc3)

(ORACLE_HOME= /u01/test/db/12.1.0)

(ENVS=LD_LIBRARY_PATH=/tmp/unixodbc-2.2.14/lib)

)

)

如下图所示:

注意如下几点:

1.ORACLE_HOME要和上面的路径一致;

2.ENVS同 .bash_profile里面配置的路径相同;

3.注意上面TSET的端口号 1522,同tnsnames里面的端口号一致;

4.注意SID名称不同数据库不一致。

2.10 配置监听的初始化文件

1. 进入如下路径:cd $ORACLE_HOME/hs/admin

注意:名字要跟odbc配置的名字一样,这里是myodbc3。

2. 在上面的路径下面找到:initdg4odbc.ora,重命名为initmyodbc3.ora。

注意:红色与上面名称相同

3. 添加如下:

HS_FDS_CONNECT_INFO=myodbc3

HS_FDS_TRACE_LEVEL=ON

HS_FDS_TRACE_FILE_NAME=odbc_test.log

HS_FDS_TRACE_LEVEL=4

HS_FDS_SHAREABLE_NAME=/tmp/unixodbc-2.2.14/lib/libodbc.so

HS_FDS_SUPPORT_STATISCTICS=FALSE

HS_LANGUAGE=AMERICAN_AMERICA.UTF8

HS_NLS_NCHAR=UCS2

HS_FDS_SQLLEN_INTERPRETATION=32

set ODBCINI=/etc/odbc.ini

如下图所示:

注意其他的都要注释掉,否则会报上面图片的错误。

2.11 测试及重启监听

1.在ora用户下输入如下指令,测试监听:tnsping myodbc3

2.出现如下,则说明tns拼通

3.重启监听:

执行如下:

lsnrctl stop

lsnrctl start

lsnrctl status

出现如图则说明监听生效。

注意:若tns无法ping通,请检查前面的配置以及listener和tnsnames的输入数据。

2.12 创建DBLINK

1.在ora用户执行:sqlplus,输入apps账户和密码

2.输入如下指令:create public database link myodbc3  connect to "mysql_user" identified by "password" using'myodbc3';

3.查看mysql的表,看是否能够连接:select * from"dual"@myodbc3;

oracle实现异构连接分为两种方式,基本原理:

1. Generic Heterogeneous Services,通用异构服务

服务器端安装non-oracle db的client,使用其所带odbc驱动建立其数据源,然后oracle通过hs组件建立与odbc之间的dblink从而实现异构连接。

2. Transparent Gateway,透明网关

安装透明网关,选择相应non-oracle db网关选项,建立监听连接透明网关,进而dblink实现异构连接。

错误解决:

1.ORA-28528:多机种服务数据类型转换出现错误

[oracle][odbc sybase wire protocol driver]string data,right truncated.error in column 3.{01004}

ora-02063:紧接着2Line(起自to_sybase)

ORA-28528:

Heterogeneous Services datatype conversion error Cause: Either an Oracle datatype could not be converted to a non-Oracle datatype, or a non-Oracle datatype could not be converted to an Oracle datatype. The following are possible reasons for for the conversion failure: -- overflow problems (in the case of numbers) -- length limitations (in the case of character strings) -- invalid values passed into the conversion routines

Action: Contact customer support of the agent vendor. If the problem is due to size discrepancies between Oracle and the non-Oracle system, it may not be possible to convert the value

2.ora-28511: 丢失与使用sid=……的多机种远程代理程序的rpc连接

ORA-28511:

lost RPC connection to heterogeneous remote agent using SID=string Cause: A fatal error occurred in one of the following places: -- the connection between the ORACLE server and the agent -- the heterogeneous services remote agent itself -- the connection to the non-Oracle system This error occurred after communication had been established successfully.

Action: Check for network problems and remote host crashes. The problem is probably in the agent software. If so, contact a customer support representative of the agent vendor.

sybase通用异构服务连接odbc查询远程db不同字符集时报错,可以使用odbc日志调试分析,连接可以建立,但查询失败。使用透明网关解决。

3.ora-28500:连接oracle到非oracle系统时返回此信息:[MICROSOFT][ODBC驱动程序管理器]未发现数据源名并且未指定默认驱动程序

原因:根据错误提示,sid未配置正确。重新配置解决。

4.ora-28500:连接oracle到非oracle系统时返回此信息:[IBM][CLI DRIEVER] SQL30082N尝试建立连接失败,安全性原因为“24”("username and/or password invalid").sqlstate=08001

原因:用户名、密码不匹配。ora-28500错误根据错误提示应该就可解决。

5.ora-02050:事务处理4.7.2886已回退,某些远程数据库可能有问题

ORA-02050:

transaction string rolled back, some remote DBs may be in-doubt Cause: network or remote failure in 2PC.

Action: Notify operations; remote DBs will automatically re-sync when the failure is repaired.

解决:须dba手工提交或回滚事务,自行保证一致性。

dbms_transaction.purge_lost_db_entry('4.7.2886');commit;

具体解决方式需视情况而定。

phase       local_state    remote_state       action

prepare     collecting           /            本地DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY

prepared             /         本地rollback force后PURGE_LOST_DB_ENTRY

commit      prepared        commited      本地commit force后本地和远程均PURGE

commited        commited       本地和远程均PURGE_LOST_DB_ENTRY

forget      commited            /           本地PURGE_LOST_DB_ENTRY

Oracle 与 mysql 建立透明网关的更多相关文章

  1. 数据库迁移之从oracle 到 MySQL

    方式一: 手动方式导入导出 手动的方式导入, 就是操作步骤会比较繁琐一些. 对Table 的结构和数据: 1. 使用 SQL Developer 把 oracle 的 table 的schema 和 ...

  2. Oracle使用goldengate分别向Oracle和mysql双路的单向复制

    一.Oracle分别向Oracle和mysql双路的单向复制是在: ORACLE-mysql的单向复制基础上做的.http://blog.csdn.net/q947817003/article/det ...

  3. ORACLE VS MYSQL

    ORACLE VS MYSQL 一.历史 1.  Oracle: 中文译作甲骨文,这是一家传奇的公司,有一个传奇的大老板Larry Ellision. Ellision 32岁还一事无成,读了三个大学 ...

  4. oracle至mysql该指南的数据模式()任意数据源之间的跨导应用

    为了产生的一些资源的库的释放.需要API模块迁移到mysql在,需要引导数据. 试用oracle to mysql工具.当迁移错误不说,如此大量的数据的,有了这样简陋的工具是不太可靠. 意外的发现工具 ...

  5. 数据库笔试面试题库(Oracle、MySQL等)

    数据库笔试面试题库(Oracle.MySQL等) 版权声明:版权所有,欢迎分享本文,转载请保留出处,否则追究法律责任,谢谢合作. 注:本文将持续更新,可关注作者微信公众号以便获得最新笔试面试资料. ⊙ ...

  6. 数据库 --> SQL Server 和 Oracle 以及 MySQL 区别

    SQL Server 和 Oracle 以及 MySQL 区别 三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Oracle的定位和架构非 ...

  7. Mybatis Generator的model生成中文注释,支持oracle和mysql(通过实现CommentGenerator接口的方法来实现)

    自己手动实现的前提,对maven项目有基本的了解,在本地成功搭建了maven环境,可以参考我之前的文章:maven环境搭建 项目里新建表时model,mapper以及mapper.xml基本都是用My ...

  8. Mybatis Generator的model生成中文注释,支持oracle和mysql(通过修改源码的方式来实现)

    在看本篇之前,最好先看一下上一篇通过实现CommentGenerator接口的方法来实现中文注释的例子,因为很多操作和上一篇基本是一致的,所以本篇可能不那么详细. 首先说一下上篇通过实现Comment ...

  9. 數據庫ORACLE轉MYSQL存儲過程遇到的坑~(總結)

    ORACLE數據庫轉MySQL數據庫遇到的坑 總結 最近在做Oracle轉mysql的工程,遇到的坑是真的多,尤其是存儲過程,以前都沒接觸過類似的知識,最近也差不多轉完了就總結一下.希望能幫到一些人( ...

随机推荐

  1. 【奔走相告】- Github送福利:用户可免费创建私有代码库啦

    最新消息 PingWest品玩1月8日讯,据TheNextWeb消息,据美国科技媒体The Next Web报道,被微软收购的代码平台GitHub最近调整政策,用户免费创建无限空间私有代码库(priv ...

  2. Jenkins-pipeline的实现步骤

    jenkins实现持续集成 搭建jenkins环境,安装插件 建立pipeline公用类库,文件夹vars,默认的 添加.groovy文件,可以由以下几个类库组成 dockerImageBuild 负 ...

  3. 到网上收集了一个“高大上”的CSS3登入表单和大家分享一下

    要求 必备知识 基本了解CSS语法,初步了解CSS3语法知识. 开发环境 Adobe Dreamweaver CS6 演示地址 演示地址 预览截图(抬抬你的鼠标就可以看到演示地址哦): 制作步骤: 一 ...

  4. linux(centos6.8 64位)下安装mysql5.7(yum方式)

    下载mysql源安装包 # wget http:.noarch.rpm 安装mysql源包 #yum localinstall mysql57.noarch.rpm 检查mysql源是否安装成功 # ...

  5. Bootstrap in ASP.NET MVC 5

    一,新建ASP.NET MVC 5 项目 Bootstrap 文件分布 引入到页面 1.定义.注意:不要包含有.min.的文件名称,会被忽略,因为在发布的时候编译器会加载min版的文件 2.在母版页中 ...

  6. google 被墙的解决办法

    昨晚无意中发现的东西,分享给各位使用,google搜索技术方面的东西还是很准确的,可惜被墙了,但是上有政策下有对策…… 谷歌地址: http://74.125.224.18/ http://91.21 ...

  7. INTEST/EXTEST SCAN 的学习

    intest scan的一些基本知识.INTEST scan指的是对IP 内部的scan cell的扫描测试,针对IP内部的flip-flop进行shift/capture的操作.和INTEST SC ...

  8. 【IT笔试面试题整理】删除无序链表中重复的节点

    [试题描述]定义一个函数,输入一个链表,删除无序链表中重复的节点 [参考代码] 方法一: Without a buffer, we can iterate with two pointers: &qu ...

  9. java web 机试

    经过近一个月的学习,我们的java web已经学习完了. 这是我们这次的机试题. 一:题目 请利用MVC设计模式,并使用JSP.Servlet.JSTL和JQuery等技术实现动态条件的分页显示查询. ...

  10. [JSOI 2007]字符加密Cipher

    Description 题库链接 给你一个长度为 \(n\) 的字符串,首尾相接依次断开每个断点可以得到 \(n\) 个长度为 \(n\) 的字符串,将其排序按序输出每个字符串的最后一个字母. \(1 ...