Oracle透明网关(Transparent Gateway)能够方便地解决异构数据库系统之间的数据共享问题,使得基于Oracle环境的应用系统/程序在访问非Oracle数据库中的数据时不需要另外再做代码开发工作,大大节省系统开销,提高数据使用的灵活性(功能示意图如下)。最近在进行透明网关的安装和配置过程中遇到了两个问题,网上搜不到解决方案,摸索着解决后写此文总结一下,希望能对遇到同样问题的童鞋有所帮助。
透明网关的基本安装配置过程就不再赘述了,网上有很多资料,或者你可以参考此文,或者下载官方文档。下面只描述我遇到的问题和解决方式。
在本例中用到了三台服务器:
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服务器端/客户端的配置问题,采用如下步骤排查错误:
- 检查SQL Server服务器端TCP/IP协议是否启用:
在开始菜单中找到“SQL Server 配置管理器”,打开后找到“SQL Server网络配置”-“MSSQLSERVER的协议”,点击后看右边窗口中TCP/IP是不是出于启用状态,不是的话右击,启用:
然后,右击TCP/IP,点击“属性”:
看一下你在透明网关配置的SQL Server地址是不是在列表中,并且端口号1433、已启用。
都启用后,点击确定,退出配置管理器,重启SQL Server数据库服务。
- 如果上述操作后依然提示该问题,检查是不是防火墙引起的问题。可以按照此设置允许1433端口可以通过防火墙。
- 上述设置后如果依然没有解决问题,则需要查看SQL Server服务器端的“客户端网络实用工具”是否禁用了TCP/IP协议,开启的方式如下:
(1)?单击“开始”,然后单击“运行”。
(2)在“打开”框中,键入“Cliconfg.exe”,然后单击“确定”。
(3)在“SQL Server 客户端网络实用工具”对话框中,在“通用”选项卡上设置如下:
(4)单击以清除“强制协议加密”复选框。
(5)单击“确定”以关闭“SQL Server 客户端网络实用工具”对话框。
(6)重新启动 SQL 服务。
- 如果设置完成后,问题依然没有解决。。。好吧,不要抓狂,再到透明网关所在的计算机中设置启用TCP/IP,设置方法如下:
(1)?单击“开始”,然后单击“运行”。
(2)在“打开”框中,键入 Cliconfg.exe,然后单击“确定”,设置如下(不同操作系统界面可能有所不同):
经过上述一系列设置,应该就可以消除该错误了。
如果你遇到了其他问题,可以在下方留言我们一起讨论解决~~