oralce与其他数据库的异构连接

上传人:飞*** 文档编号:32876491 上传时间:2018-02-12 格式:DOC 页数:5 大小:37.50KB
返回 下载 相关 举报
oralce与其他数据库的异构连接_第1页
第1页 / 共5页
oralce与其他数据库的异构连接_第2页
第2页 / 共5页
oralce与其他数据库的异构连接_第3页
第3页 / 共5页
oralce与其他数据库的异构连接_第4页
第4页 / 共5页
oralce与其他数据库的异构连接_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《oralce与其他数据库的异构连接》由会员分享,可在线阅读,更多相关《oralce与其他数据库的异构连接(5页珍藏版)》请在金锄头文库上搜索。

1、由于毕业论文的需要,半个月前,本人开始研究 oralce 与其他数据库的异构连接。这次从机器选择开始到软件配置,基本是自己一条龙包办了。本人用的是旧的 IBM x445 服务器,磁盘柜也是旧的 IBM EXP400。服务器的两个硬盘做了 RAID1,磁盘柜 5 个硬盘做了RAID5EE。装的操作系统是 RHEL5。数据库是 ORALCE 11g R2。由于这些与主题关系不大,就不详细说了。本次的 oracle 数据库主要与三台装 mssql 和一台装 mysql 的连接。其实类似的网上不少,但真正能一篇就解决问题的没有,因为完成这个事情,我找了几十个贴,说明这方面的资料不是太全,也没人整理。我

2、觉得作为技术人员,既要有钻研技术的热情和能力,更要有累积知识和帮助他人的热情和能力。在开始之前,我把我自己连接的 oracle 数据网关的工作方式描述一遍,因为在这段时间里,本人碰到过两种问题:一种是操作问题,一种是原理问题。其中,操作问题是可以在网上查找得到的,比较外露和容易被发现的问题;而原理问题是要自己领悟的,一般搜索不到的问题,比如在连接 mysql 的时侯遇到的。而很多时候,我们的一些问题之所以不能解决,是因为知其然,而不知其所以然造成的。Oracle 数据网关,就像一个桥梁,贯通 oracle 数据库和 non-oracle 数据库。在配置过程中,我们经常讲到的三个重要文件:第一、

3、tnsnames.ora;第二、lisener.ora ;第三、init.ora。他们是如何工作呢?比如对一个连接数据库的查询,select * from “tablename”linkdbname; oracle 首先从 linkdbname 开始,通过 dba_db_links 表查到建表时所属于的 tnsname;然后在 tnsnames.ora 中找到 tnsname 对应的 sid;接着在 lisener.ora中找该 SID 所对应的应用程序(如:PROGRAM=dg4msql 或 PROGRAM=dg4odbc),而且这个程序到哪找,就要注明 oracle_home(ORACLE

4、_HOME=/opt/oracle/product/gw);找到程序之后,oracle 会在程序所在目录的 admin 子目录下找到 init.ora 文件,读取里面的连接信息;然后通过连接信息与 non-oracle 数据库通信。希望我以上的这段,能对大家在异构连接配置中起到蓝图的作用,因为只有明白这个原理,下面的配置就简单多了。1、oracle 与 mssql 连接11g R2 下载的时候,说是含了 gateway,我以为含了 dg4msql 了,但其实没有。当时很彷徨,但后来在 oracle 站点上有得下载,真的有点弱。在安装时,我没有把 dg4msql 装在同一个 home 里,而是把

5、它安装在另一个 home 里。网上的没有这么做过,我自己尝试的。这就造成了有两套 dg4odbc,就是 hs 的目录。其实这里没所谓,只要之后的配置(后面再说)的路径选对就可以了,电脑的东西,说白了,就是读写字符串,没什么好神秘的。主要配置参考了这里:http:/ How to Setup DG4MSQL (Oracle Database Gateway for MS SQL Server) Release 11 on Linux 转帖。这里简单总结一下,其实是四部曲:(1)配置数据库所在 home 里的 lisener.ora;(2)配置数据库所在 home 里的 tnsnames.ora(

6、3)配置 dg4msql 所在 home(在我这里,跟数据库所在 home 不一样)的 init.ora(4)建立数据库连接。只要细心点,一般都不会有问题,这里提一下,很多网站的写 ora 文件时,不知道是他的问题还是网站上编辑的问题,每一个分段都是齐头并进的,我试过这种写法,结果是通不过的,因为 oracle 对 ora 文件的检测比较严格,大家如果不在行,请参考里面的 sample。另外,很多网站,都把 init.ora 里的 HS_FDS_TRACE_LEVEL 设置为 off。当然,如果连接成功,是没问题的;但一旦出现错误,尤其是出现:ORA-28500: connection fro

7、m ORACLE to a non-Oracle system returned this message:ORA-02063: preceding line from 试问这种错误,你能看出问题来吗,只有开了 trace 功能,看 log 里的*.trc 文件,才能明白个究竟。下面马上告诉你我为什么有这种感想。2、oracle 与 mysql 连接我觉得在这次配置过程中,兑现了 90%和 10%的理论。因为最后的 10%的工作量真的用了我 90%的时间来研究。首先要明确,mysql 与 oracle 的连接,使用 odbc 连接的。但连接的原理,和基本步骤跟上面与 mssql 是一样的。只不

8、过 oracle 在找到 init.ora 之后,还多了一步,就是找 odbc的配置。大家一定要确保 linux 的 odbc 已经与 mysql 数据库连通后才做下一步,测试语句是: isql 。具体配置我参考了很多网页,包括下面的连接中,都有提到。还有一点,init.ora 是在 hs 目录里。我一开始傻到要找一个 dg4odbc 的目录,结果当然是徒劳的。大家可能半信半疑,但我觉得它的原理是,只要在 lisener.ora 里写着PROGRAM=dg4odbc,oracle 就会自动到 hs 目录里找。可以这么说,我一开始是连不通的。我一开始的情况跟网上的这个贴一样:http:/ 11g

9、 与 mysql 的异构连接(未解决的问题)怎么搞都不行,反正它就是出:ORA-28500: connection from ORACLE to a non-Oracle system returned this message:ORA-02063: preceding line from 搞死人。谁知道什么错误呢。直到我看到了这篇:http:/ Tips on Using dg4odbc on 64-bit Linux说实在,这篇里的 tips 对我一点用都没有,但它让我想起了开通 trace。太伟大了。这里要说明一点,在这个过程中,我的 oracle 用户一度权限受限,不知道为什么,后来重

10、新赋予权限,trace 才出来,上面的贴子里提到他开通后 trace 出不来,原因可能在权限。因为trace 的写入是要有对目录的写权限的。一般只要在安装 oracle 时,认真建好用户,再安装,并亲切步骤正确,都可以达到这种效果。但我却出现了这么一个小插曲。搞了 1 天。晕。话说我开通了 trace 之后,看到了 hs/log 下的日志。原来是:HOSGIP for HS_FDS_SHAREABLE_NAME returned /usr/lib/libmyodbc3.soFailed to load ODBC library symbol: /usr/lib/libmyodbc3.so(SQ

11、LAllocHandle)。这里说明一下,一开始,我以为我的错误跟上面的贴的错误是同一回事,其实不是,因为他是在 64 位系统下与 32 位程序的冲突而造成的,而我这个纯粹是瞎搞造成的(后面会说到) 。所以大家要注意了,同一个报错,可能是由多种原因造成的。作为一名技术人员,这个时候一定要清醒。后来我又发现了这个贴:http:/ TO ACCESS MYSQL FROM ORACLE WITH ODBC AND SQL这个贴是我在网上看到的 dg4odbc 与 mysql 最全面,对“成功”的文章。为什么“成功”要加双引用,因为对他是成功,但对我,照他的做,仍然不成功。这个贴,对我的启发有两个:

12、一个是 mysql-connection-3.51 似乎不支持 dg4odbc,要升级到 mysql-connection-5.16;另一个是 mysql 与 oracle 存在字符集的 bug。结果我升级到了 libmyodbc5,还是不行,看了日志:HOSGIP for HS_FDS_SHAREABLE_NAME returned /usr/lib/libmyodbc5.soFailed to load ODBC library symbol: /usr/lib/libmyodbc5.so(SQLAllocHandle)。还是错误,为什么,看来这个跟升级不升级是没有关系了,就这样过了一天。

13、晚上在床上慢慢的想连接的过程:oracle dg4odbcodbcmysql,现在 oracledg4odbc 是监听到了,odbcmysql 也成功了,那现在的问题很有可能是出现在 dg4odbcodbc 里,而事实上,报错的地方也确实是在 init.ora(这个文件就是 dg4odbcodbc 的中介) 。而现在老说驱动无法装载,肯能是驱动错。我马上把思路转到了对 libmyodbc5.so 的身份确认来。其实也是受启发于一个 blog 主页,里面的 HS_FDS_SHAREABLE_NAME=libodbc.so。我一下子有点醒悟过来了,现在是 dg4odbc 跟 odbc 的连接,又不

14、是跟 mysql 的连接。怎么会用libmyodbc.so 呢,对,一定是这样。按照这个思路,我修改了init.ora, HS_FDS_SHAREABLE_NAME=libodbc.so,结果冲出了多天的阴影。但情况仍然不乐观。Select 出错:MySQLODBC 5.1 Drivermysqld-5.0.51b-community-logYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use

15、 near 云云。但很奇怪,desc (看表结构)却可以,我心中忧喜参半。我马上想起了 mysql 与 oracle 存在字符集的 bug。网上多数都说是 utf-8 的问题。但在我这里,似乎不是,因为我按照上面 http:/ 所说的把 mysql 数据库的字符集改为 latin1,还是不行。前面说过,我把 trace On 了,但我不知道在哪里看到,原来trace=debug,更能看出问题。那我试试,果不其然,详细多了。我把部分的错误信息在google 上一贴(google 现在在香港,经常打不开,鄙视一下) 。结果出来两个贴,最终达成了我的愿望:http:/database.itags.org/oracle/50220/ Oracle: Database Gateway 11g ODBC connection to mysql problemhttp:/ Thread: Problem with Double Quotes arround Column and Table 我这里说明一下,我的这个问题,是由于 ora

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 企业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号