公司最近一个项目,用的数据库是Oracle,但是需要从以前做的项目获取数据源,但以前的项目的数据库是 sql server,这样就一个问题摆在我们面前,Oracle通过怎样的机制去链接sql server?我下面以我本地电脑做服务器如何配置Oracle透明网关,来节省IT同行遇到同样的问题的解决的时间,并也以此来回报网上所有的同仁给我的启示,来促使我一步一步找到问题解决办法。
(一) 安装oracle11g数据库
操作系统是:,下载的oracle数据包为:,所安装的目录为:
安装路径可以随意,没有特殊规定,我在这儿说明,是为了以后的oracle数据库配置文件要和此路径一致。
默认端口是1521.
(二) 安装Oralce的链接sql server的透明网关
安装网关的压缩包为:。安装过程中需要注意的点为:要选择这个
为sql server设计的网关;选执行典型配置:。
网关安装的路径为:,没有特殊规定,我在这儿说明,是为了以后的oracle网关配置文件要和此路径一致。
(三) 相关文件的配置
1、网关路径下的文件的配置:
(a) 网关参数文件: initleadhealth.ora
这儿已经把文件已经更名,此文件的为参数文件,默认的文件名为:initdg4msql.ora,这个文件的命名格式为:init<sid>.ora,此文件的路径为:。
在此例子中sid是leadhealth,和链接的sql server的数据库名称一致,但是无需保持一致,我设置成一致,因为有网上的同仁说,设置成一致:可以避免一种错误(ORA-28545: 连接代理时 Net8 诊断到错误Unable to retrieve text of NETWORK/NCR message),后来经过实践证明,不是这么回事情,我会在后面的问题总结中会有具体说明。
此文件的配置内容如下:
(b) 网关监听文件:
此文件的路径为:
此文件的配置内容如下图所示:
网关配置好后,我们可以检验一下是否配置成功:
2. Oracle 数据库安装的路径下的文件的配置
(a) Oracle数据库主要文件tnsname.ora的配置
此文件的路径:
此文件的内容如下:
(b) oracle 数据库监听服务配置文件listener.ora
此文件的路径:
此文件的配置内容如下:
(四) 建立数据库链接并通过此数据库链接查看sql server数据库中的数据
create database link hos connect to fororacle identified by "lsj" using 'leadhealth'; "leadhealth"为前面参数文件的sid.
查看sql server数据库里的数据:
在这儿要注意的是, sql server 中的字段要用双引号括起来,并区分大小写。
(五)总结及回顾和需要注意的两点问题
通过以上的四个步骤,Oracle透明网关配置成功。如果没有配置成功,大都是文件配置的问题,本人在实操中,遇到三个问题花了不少时间,特意在此强调一下:
1、网关安装路径建议安装在oracle数据库安装路径的并列位置,如果网关数据和oracle数据库在同一台服务器,参考本人安装的文件路径,千万不要安装在 db_home1下,否则会出现一些意外的错误,因为网关安装时和数据库路径下面,会覆盖oracle数据库一些路径下的文件。如下图所示:
2、 报“ORA-28545: 连接代理时 Net8 诊断到错误Unable to retrieve text of NETWORK/NCR message 65535ORA-02063: 紧接着 2 lines (起自 hos)”的处理:
通过本人不断的测试,发现此种情况是oracle数据库设置的默认端口(1521)和网关设的端口(1521)(在oracle数据库服务器和网关服务器是同一台服务器
的情况下) 冲突所致,把网关的端口改为 1522,此问题在后来的调试中,没有出现过,出现这种问题,是不是此种原因,还有待验证。
3、报“监听程序当前无法识别连接描述符中所给出的 SID”的处理
在oracle数据库和网关监听服务配置文件(listener.ora),都加了段对oracle数据库默认实例orcl的描述的补充说明,内容如下:
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1)
(SID_NAME = ORCL)
)
否必要需要两个监听配置文件需要加,还有待验证,本人测试了,好像两个文件都需要加。
如果是用.net 链接oracle数据库,数据链接字符串要写全,要写成这样:
否则会报这样的错误:
本人是初学Oracle数据库,如果有表述的不妥当甚至错误的地方,请来信或者留言指正,谢谢。