转自《http://hi.baidu.com/unidba/blog/item/e7da5f8a16eef2dffc1f107b.html》
1. 环境: 同一主机Oracle 10.2.0.1, MSSQL 2000 sp4
可以同一个主机的Oracle/MSSQL, 也可以不同主机的, 但tg for mssql只适用在Windows主机
10201_gateways_win32.zip:
http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201winsoft.html
安装gateways时, 选择自定义时for MSSQL就行; 设置MSSQL主机和数据库信息可随便, 后面配置需要更改参数文件; 其它一样
安装成功后, 可查看C:\oracle\product\10.2.0\db_1\
tg4msql目 录情况, 即是Oracle MSSQL Transparent Gateway目录, 重点查看$ORACL_HOME\tg4msql\admin下
inittg4msql.ora
2. 新增配置参数文件: initmsql.ora
tg参数文件格式init<SID_NAME>.ora. 这边不使用默认参数文件
inittg4msql.ora
新增一个,为
initmsql.ora, 其中
SID_NAME为
msql
initmsql.ora内容如下:
# 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=127.0.0.1;DATABASE=bedb" HS_FDS_TRACE_LEVEL=OFF HS_FDS_RECOVERY_ACCOUNT=RECOVER HS_FDS_RECOVERY_PWD=RECOVER
3. 配置listener.ora和tnsnames.ora
修改如下红色部分:
listener.ora
# listener.ora Network Configuration File: C:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = C:\oracle\product\10.2.0\db_1) (PROGRAM = extproc) ) (SID_DESC = (SID_NAME = msql) (ORACLE_HOME = C:\oracle\product\10.2.0\db_1) (PROGRAM = tg4msql) #固定为tg4msql ) )
LISTENER =
(DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = popgo.org)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) )
tnsnames.ora
# tnsnames.ora Network Configuration File: C:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
MSQL =
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA = (SID=msql) ) (HS=OK)#这个很重要 Oracle Server要调用异构服务来处理 ) TSDB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = tsdb) ) )
RCAT =
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = rcat) ) )
EXTPROC_CONNECTION_DATA =
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) )
注意: 重启Oracle 监听器
> lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 23-11月-2008 16:4
5:06
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=popgo.org)(PORT=1521)))
LISTENER 的 STATUS ------------------------ 别名 LISTENER 版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ ction 启动日期 23-11月-2008 16:08:42 正常运行时间 0 天 0 小时 36 分 24 秒 跟踪级 别 off 安全性 ON: Local OS Authentication SNMP OFF 监听程序参数文件 C:\oracle\product\10.2.0\db_1\network\admin\listener.o ra 监听程序日志文 件 C:\oracle\product\10.2.0\db_1\network\log\listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=popgo-be.popgo.org)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc))) 服 务摘要.. 服务 "PLSExtProc" 包含 1 个例程。 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 服务 "msql" 包含 1 个例程。 例程 "msql", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 服务 "rcat" 包含 1 个例程。 例程 "rcat", 状态 READY, 包含此服务的 1 个处理程序... 服务 "rcatXDB" 包含 1 个例程。 例程 "rcat", 状态 READY, 包含此服务的 1 个处理程序... 服务 "rcat_XPT" 包含 1 个例程。 例程 "rcat", 状态 READY, 包含此服务的 1 个处理程序... 命令执行成功
4. 创建Oracle DBLink并测试
SQL>
CREATE PUBLIC DATABASE LINK MSQLLink CONNECT TO "sa" IDENTIFIED BY "unidba" USING 'MSQL';
SQL> select * from
t@MSQLLink;
i
---------- 1
SQL> insert into
t@MSQLLink values(1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from
t@MSQLLink;
i
---------- 1 1
SQL>
注意: Oracle, MSSQL库的用户安全, 这边测试用Oracle SYS, MSSQL sa; 可以创建专门负责透明网关连接的各自库用户
5. 常见错误
1).
ORA-28500: 连接 ORACLE 到非 Oracle 系统时返回此信息:
[Transparent gateway for MSSQL][H006] The init parameter <HS_FDS_CONNECT_INFO> is not set. Please set it in init<orasid>.ora file.
ORA-02063: 紧接着2 lines(源于MSSQLLINK)
解决:
tg参数文件和listener.ora 和tnsnames.ora对应的
SID_NAME设 置不正常, 这次测试为:
msql
2). 如果在查询过程或其它操作一直查询不出来数据, 像卡在那边; 最好重启下Oracle或主机
|