最近同事问我在Oracle中怎样访问SQL Server2000的数据,做了个测试,将操作步骤发给大家共享。
不知道如何上传文件,只能列举在这里。图片不能显示。
1、 数据环境
Oracle9i 9.2.0.1+Win2003 Server:172.16.47.9
透明网关:172.16.47.9
SQL Server 2000 + Win2003 Server:172.16.48.5 数据库为test
SQLServer Client:172.16.47.9
2、 安装
说明:透明网关 for MS SQL Server的版本必须安装在Windows平台下。Oracle9i安装光盘自带该组件,但Oracle8i需另购买。Oracle 9i安装时Transparent Gateway默认是不安装的,要想安装该组件,需在安装Oracle9i的时候选择自定义安装,然后在安装产品列表中选择Oracle Transparent Gateway->Transparent Gateway for MS SQL Server.
Oracle数据库和Oracle透明网关可以在不同的服务器上。
在安装完透明网关后,可以在$ORACLE_HOME(9i安装目录)下找到tg4msql目录
4、 修改%ORACLE_HOME%tg4msqladmininittg4msql.ora,或重新建一个文件如initsql2k.ora,此时的sid_name为sql2k。
一般指定后自动生成
HS_FDS_CONNECT_INFO="SERVER=172.16.48.5;DATABASE=test"
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
5、 修改%ORACLE_HOME%networkadminlistener.ora
我改后的Listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.47.9)(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = F:Oracle)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = Ora9iDB)
(ORACLE_HOME = F:Oracle)
(SID_NAME = Ora9iDB)
)
(SID_DESC =
(GLOBAL_DBNAME = ibank)
(ORACLE_HOME = F:Oracle)
(SID_NAME = ibank)
)
(SID_DESC =
(SID_NAME=tg4msql)#可以改为sql2k
(ORACLE_HOME = F:Oracle)
(PROGRAM=tg4msql)
)
)
6、 修改F:Oraclenetworkadmintnsnames.ora
Sql2k =
(DESCRIPTION =
(ADDRESS =(PROTOCOL = TCP)(HOST= 172.16.47.9)(PORT = 1521))
#这里的HOST必须填网关所在Server地址
(CONNECT_DATA =(SID = tg4msql))
#此SID与透明网关所改的listener.ora中的SID_NAME对应
(HS = OK)
#这很重要,告诉Oracle Server要调用异构服务模块来处理
)
7、 创建Database Link
Create Database Link sql2k connect to sa identified by sa using ‘sql2k’
8、 测试
Select * from t1@sql2k
如果提示不能连接,请查看sqlserver是否使用命名管道方式连接的,如果是,则使用TCP协议不行。可以通过ODBC的客户端参数设置中,使用TCP/IP协议,端口设为1433测试,如果能够连接成功,一般不会出现问题。
如果使用命名管道连接,将会连接不成功。
9、 其他:
设置Oracle数据库参数global_names=false
不要求建立的数据库链接和目的数据库的全局名称一致。
l Oracle For SQL Server的透明网关在UNIX下无法实现,目前只支持WIN; 原因很简单,SQL Server本身不支持UNIX,所以Oracle也无法直接在UNIX下访问SQL Server。
l Oracle For其它数据库的透明网关,如SYBASE等有UNIX本版本的数据库在UNIX可以实现。
l Oracle透明网关软件在Oracle 8i时是需要花钱另买的,大约1万$;到Oracle 9i时是作为数据库的一个组件免费发布的。安装时在组件种选择即可。
l 针对我们的实际应用,如果有需要实现Oracle 到SQL Server的互连,我们需要另外用一台WIN下的Oracle 9i来做透明网关服务器,其它UNIX下的Oracle通过这个透明网关来访问SQL Server。
l 不同数据库间的数据处理需使用标准SQL来实现。
l 各数据库中特殊的数据类型,需要在程序中实现转换,应尽量避免使用无法转换的数据类型。
[@more@]
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7320672/viewspace-912560/ ,如需转载,请注明出处,否则将追究法律责任。