这篇blog写了一部分没完成,已经拖了一周了,今天终于把它给赶出来了:
透明网关的安装于配置详解
目的:
我想通过oracle去访问另一台机器上的sql server2000上的数据库的表。
环境:
oracle9.2 装在win2000上,机器名是HPXXX,sql server2000也装在win2000上机器名是anglei内有数据库名:abc里面有表dict,用户名:u1 密码:u1(注意这是abc库的用户名密码,而不是oracle的)。把HPXXX和anglei连成局域网。
透明网关(Transparent Gateway)可以和oracle装在同一台机器上,也可不是同一台机器上,我选择的是安装在同一台机器上。
步骤:
一、安装透明网关
运行oracle9.2安装软件(既是我安装oracle数据库的同一版本)在“安装类型”页面选择“自定义”安装。
如图:
选择安装透明网关 如图:
系统提示配置,这里的sql server就是你安装sql server2000的机器名(我的是anglei),sql数据库就是你的sql server数据库名称(我的是abc),当然你这里也可以都不填写内容,安装完成后还可以再配置。
透明网关安装结束后,你可以在oracle_home的目录下看的\tg4msql个文件夹,里面有\admin\inittg4msql.ora这个文件,在下一步我们将用到,这就标志着你透明网关安装结束。
二、配置透明网关
1.在listener.ora里面增加(当然这也可以在图形用户界面操作 Net Manager)我是为让大家看着方便:
(SID_DESC =
(GLOBAL_DBNAME = sql2000)--可以随便取名
(PROGRAM = tg4msql)--必须这样写
(SID_NAME = sql2000)--服务名在inittg4msql处会用到,两个名称要相同
(ORACLE_HOME = D:\oracle\ora92)--我的oracle_home
)
2:
在tg4msql\admin里面把inittg4msql.ora copy一份重命名为initsql2000.ora(sql2000就是上步配置的SID_NAME)
# This is a sample agent init file that contains the HS parameters that are
# needed for the Transparent Gateway for SQL Server
#
# HS init parameters
#
HS_FDS_CONNECT_INFO="SERVER=anglei;DATABASE=abc"--(anglei,abc在环境里有说明)
HS_FDS_CONNECT_INFO=anglei.abc--这项是我自己加的开始我没有加时老是报ORA-28500的错,后来加上就好了,然后我再把它去掉也不报ORA-28500的错了,不知道为什么。
HS_FDS_TRACE_LEVEL=DEBUG
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
3.
在tnsnames.ora里面增加下面:
SQL_erver =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = HPxxxxx)(PORT = 1521))--(HPXXX在环境里面我也有说明)
)
(CONNECT_DATA =
(SERVICE_NAME = sql2000)--和1的SID_NAME 要相同
)
(HS = OK)--一定要加的
)
4.重新启动侦听服务
5.
建立batabase link
SQL> create public database link sql
2 connect to u1 identified by u1--u1我在环境里面也有说明
3 using 'SQL_erver';--和3的名称一样
下面就可以测试了
SQL> select count(1) from dict@sql;
COUNT(1)
----------
828
总结:我自己做透明网关实验做了三个下午才成功,这其中出了好的的问题,通过baidu都解决的差不多,到最后碰到:
ORA-28500: 连接 ORACLE 到非 Oracle 系统时返回此信息:
[Transparent gateway for MSSQL][Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL
Server 不存在或访问被拒绝 (SQL State: 08001; SQL Code: 17)
ORA-02063: 紧接着2 lines(源于SQL)
我在网上始终没有找到解决的方法,可能你也会碰到,到最后我就把sql server的数据库abc重新建个用户u1,然后通过HPXXX机子上的sql server2000远程登录确保能够查看,我又在initsql2000.ora文件里添加了HS_FDS_CONNECT_INFO=anglei.abc一项,同时吧HS_FDS_TRACE_LEVEL=OFF改为HS_FDS_TRACE_LEVEL=DEBUG,然后重启监听,然后重建db link 就成功了,我这样试了几次,最后总结一下:如果报的是上面ORA-28500错误并且(SQL State: 08001; SQL Code: 17),就把HS_FDS_CONNECT_INFO=;HS_FDS_TRACE_LEVEL=DEBUG加上,重启监听,重建db link,就差不多了,不行多试几次。