最近在Oracle里安装Transparent Gateway for SQL Server,遇到不少问题,终于在今天完全搞定,所以把一些注意问题记录下来。通过Gateway,可以在Oracle里透明的访问其他不同的数据库,如SQL Server, DB2, Sybase等等,就像远程Oracle数据库一样。各不同的数据为配置方式也大同小异,本文只说明SQL Server的安装。 Oracle的透明网关的安装其实也挺简单:

第一步,安装Oracle Transparent Gateway软件。

在9i中,Gateway软件就在那三张安装盘里;而在11g中是一个单独的安装文件,需要单独下载。Oracle的Linux版本下载地址为: http://www.oracle.com/technology/software/products/database/oracle11g/111060_linuxsoft.html 安装过程比较简单,不再详述。只要在选择产品里选择SQL Server的那个就可以了。安装完Gateway软件后,在ORACLE_HOME目录下有一下dg4msql的目录(在9i里是tg4msql,之后的命令也相应的是tg4msql,不再复述),这就是Gateway软件的目录了

第二步,配置Gateway的设置。

在dg4msql/admin目录下有一个initdg4msql.ora的文件。该文件的格式是init.ora,这里的SID在后面需要用到,系统默认的是dg4msql,一般情况这样就可以了,如果改名,在之后使用这个修改后地名字即可,配合使用Agency,则文件名变成initAgency.ora。该文件是Gateway的初始参数文件,描述连接的是哪个SQL Server数据库。文件内容如下 HS_FDS_CONNECT_INFO=172.28.2.31:1433//Agency HS_FDS_TRACE_LEVEL=OFF HS_FDS_RECOVERY_ACCOUNT=RECOVER HS_FDS_RECOVERY_PWD=RECOVER 只要修改HS_FDS_CONNECT_INFO参数就可以了。格式是:hostname:port/serverinstance/databasename,其中hostname是机器名称或IP,PORT是SQL Server的端口号,SQL Server2005默认为1433(题外话:在Oracle的安装文档里没有指定这个PORT,所以无法正确使用,我在这儿搞了很长时间才从网上找到原因,看来Oracle也不能太相信了!)serverinstance是SQL Server的实例名,不知道什么时候SQL Server也搞起实例来了,一般空着就行。Databasename是SQL Server的数据库名,好像也可以空着,不过我还是指定了。这一步需要注意的就是那个端口号了。另外在9i中格式跟这个不一样,是"SERVER=dataserver;DATABASE=Agency"。

第三步,配置监听器。

在listener.ora文件里加入以下内容: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (PROGRAM = dg4msql) (SID_NAME = Agency) (ORACLE_HOME = /opt/oracle/product/11.1.0.6) ) ) 这里PROGRAM指定应用程序名称,不能改变。SID_NAME就是前面init.ora文件名里指定的SID,ORACLE_HOME没什么说的吧?这一步需要注意的是在集群环境下,SID_LIST_LISTENER也应该是这个名称而不应该是类似于SID_LIST_LISTENER_DBRAC1,SID_LIST_LISTENER_DBRAC2这样的名称。不同机器下内容一样就可以了。这也是我遇到的问题。

第四步,配置tnsnames.ora

Agency = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.28.2.21)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 172.28.2.22)(PORT = 1521)) (CONNECT_DATA = (SID = Agency) ) (HS=OK) ) 此处的SID也是init.ora文件名中指定的SID。与一般配置不同的就是(HS=OK)这句,这句指定是外部程序而不是Oracle数据库实例 


第五步,创建DBLink

跟一般的DBLink一样,没什么说的,using子句里使用tnsnames.ora里配置的entry即可。 create public database link AGENCY connect to SA identified by "1" using 'Agency'; 


第六步,使用数据库连接

按一般的数据库连接使用: Select count(*) from area@Agency; 注意事项不同版本的名称不同 init.ora文件里的端口号集群环境的监听器配置 Tnsnames.ora里的(HS=OK) 未说明的重要问题事务问题 


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐