Oracle透明网关配置过程中遇到的两个问题

Oracle透明网关(Transparent Gateway)能够方便地解决异构数据库系统之间的数据共享问题,使得基于Oracle环境的应用系统/程序在访问非Oracle数据库中的数据时不需要另外再做代码开发工作,大大节省系统开销,提高数据使用的灵活性(功能示意图如下)。最近在进行透明网关的安装和配置过程中遇到了两个问题,网上搜不到解决方案,摸索着解决后写此文总结一下,希望能对遇到同样问题的童鞋有所帮助。

oracle gateway

 

透明网关的基本安装配置过程就不再赘述了,网上有很多资料,或者你可以参考此文,或者下载官方文档。下面只描述我遇到的问题和解决方式。

在本例中用到了三台服务器:

Oracle DB服务器:

OS: Redhat Linux 5.6

DB: Oracle9i 9.2.0.1.0

透明网关服务器:

OS:Windows Server 2000

SQL Server服务器:

OS:Windows Server 2008

DB:SQL Server2008 R2

问题一:ora-12154 TNS:无法处理服务名

这个应当是Oracle数据库服务器端的配置问题,[ORACLE_HOME]\network\admin\tnsnames.ora文件中对于透明网关发布的服务通常是这样描述的

sqlserver=

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.5.102)(PORT = 1521))

)

(CONNECT_DATA =

(SID = sqlserver)

)

(HS = OK)

)

按理说是正确的,可是还是报错,什么原因呢?查看一下[ORACLE_HOME]\network\admin\sqlnet.ora文件内容如下:

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DEFAULT_DOMAIN= gislog.com ? #需要注意这一句

NAMES.DIRECTORY_PATH= (TNSNAMES)

因此,上述配置语句应该改成:

sqlserver.gislog.com=

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.5.102)(PORT = 1521))

)

(CONNECT_DATA =

(SID = sqlserver)

)

(HS = OK)

)

问题二:[Microsoft][ODBC SQL Server Driver][Named Pipes]拒绝访问

老问题解决后,新问题又产生了,在查询database link中的表的时候,又出现了上述错误。

这是SQL Server服务器端/客户端的配置问题,采用如下步骤排查错误:

  1. 检查SQL Server服务器端TCP/IP协议是否启用:

在开始菜单中找到“SQL Server 配置管理器”,打开后找到“SQL Server网络配置”-“MSSQLSERVER的协议”,点击后看右边窗口中TCP/IP是不是出于启用状态,不是的话右击,启用:

SQL Server配置管理器

然后,右击TCP/IP,点击“属性”:

TCPIP设置

看一下你在透明网关配置的SQL Server地址是不是在列表中,并且端口号1433、已启用。

都启用后,点击确定,退出配置管理器,重启SQL Server数据库服务。

  1. 如果上述操作后依然提示该问题,检查是不是防火墙引起的问题。可以按照此设置允许1433端口可以通过防火墙。
  1. 上述设置后如果依然没有解决问题,则需要查看SQL Server服务器端的“客户端网络实用工具”是否禁用了TCP/IP协议,开启的方式如下:

(1)?单击“开始”,然后单击“运行”。

(2)在“打开”框中,键入“Cliconfg.exe”,然后单击“确定”。
(3)在“SQL Server 客户端网络实用工具”对话框中,在“通用”选项卡上设置如下:
客户端实用工具

(4)单击以清除“强制协议加密”复选框。
(5)单击“确定”以关闭“SQL Server 客户端网络实用工具”对话框。
(6)重新启动 SQL 服务。

  1. 如果设置完成后,问题依然没有解决。。。好吧,不要抓狂,再到透明网关所在的计算机中设置启用TCP/IP,设置方法如下:

(1)?单击“开始”,然后单击“运行”。
(2)在“打开”框中,键入 Cliconfg.exe,然后单击“确定”,设置如下(不同操作系统界面可能有所不同):

客户端设置

经过上述一系列设置,应该就可以消除该错误了。

如果你遇到了其他问题,可以在下方留言我们一起讨论解决~~