ORACLE 实现异构服务的技术叫做透明网关( Transparent Gateway ),利用透明网关可以实现和 SQL SERVER 、 SYBASE 、 DB2 等多种数据库的互联。因此透明网关也是 Oracle 数据仓库和数据迁移中的一个重要组成部分。
透明网关的体系结构也很简单,在 ORACLE 和 SQL SERVER 之间使用 ORACLE 透明网关服务器实现互连互通,其中透明网关服务器可以与 ORACLE 或 SQL SERVER 数据库在同一台主机上,也可以是在独立的一台主机上。
本文 ORACLE 或 SQL SERVER 数据库在同一台主机上;
SQL Server 版本为 SQL Server 2000
Oracle 版本为 Oracle9i 9.2.0.1
操作系统版本为 WindowsXP
透明网关的安装和配置
1 、运行 Oracle Installation Products à Universal Installer 进行透明网关组件的安装
2 、选择自定义
3 、选择要安装的透明网关
4 、系统提示配置
5 、查看 C:oracleora92tg4msqladmin 目录
tg4msql ├─ admin -- 透明网关配置目录 │ tg4msql_tx.sql │ ├─ bin -- 系统配置的东西 ├─ nls -- 定义错误的消息 │ ├─ eng │ └─ jpn ├─ demo -- 提供了一些在 SQLServer 环境下得 demo ├─ html -- 提供了一些 SQLServer 和 Oracle 的参考文档 └─ trace -- 提供系统跟踪情况 |
6 、修改 C:oracleora92tg4msqladmininittg4msql.ora
# HS_FDS_CONNECT_INFO="SERVER=host;DATABASE=northwind" HS_FDS_CONNECT_INFO=host.northwind --hostname.databasename HS_FDS_TRACE_LEVEL=DEBUG HS_FDS_RECOVERY_ACCOUNT=RECOVER HS_FDS_RECOVERY_PWD=RECOVER |
7 、修改 C:oracleora92networkadminlistener.ora ,增加
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = tg4msql) (ORACLE_HOME = C:oracleora92) (PROGRAM = tg4msql) ) ) |
8 、修改 C:oracleora92networkadminTnsname.ora ,增加
TG4MSQL= (DESCRIPTION= (ADDRESS_LIST = (ADDRESS = (PROTOCOL=TCP)(HOST= host)(PORT=1521)) ) (CONNECT_DATA= (SID=tg4msql) ) (HS=OK) ) |
9 、重新启动侦听服务
Microsoft Windows XP [ 版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp.
C:Documents and SettingsAdministrator>lsnrctl stop
LSNRCTL for 32-bit Windows: Version 9.2.0.1.0 - Production on 14-10 月 -2007 16:21 :25
Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))) 命令执行成功
C:Documents and SettingsAdministrator>lsnrctl start
LSNRCTL for 32-bit Windows: Version 9.2.0.1.0 - Production on 14-10 月 -2007 16:21 :38
Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.
启动 tnslsnr :请稍候 ...
TNSLSNR for 32-bit Windows: Version 9.2.0.1.0 - Production 系统参数文件为 C:oracleora92networkadminlistener.ora 写入 C:oracleora92networkloglistener.log 的日志信息 监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=.pipeEXTPROC0ipc))) 监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host)(PORT=1521)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))) LISTENER 的 STATUS ------------------------ 别名 LISTENER 版本 TNSLSNR for 32-bit Windows: Version 9.2.0.1.0 - Produc tion 启动日期 14-10 月 -2007 16:21:40 正常运行时间 0 天 0 小时 0 分 2 秒 跟踪级别 off 安全性 OFF SNMP OFF 监听器参数文件 C:oracleora92networkadminlistener.ora 监听器日志文件 C:oracleora92networkloglistener.log 监听端点概要 ... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=.pipeEXTPROC0ipc))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host)(PORT=1521))) 服务摘要 .. 服务 "PLSExtProc" 包含 1 个例程。 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序 ... 服务 "tg4msql" 包含 1 个例程。 例程 "tg4msql", 状态 UNKNOWN, 包含此服务的 1 个处理程序 ... 服务 "wbq" 包含 1 个例程。 例程 "wbq", 状态 UNKNOWN, 包含此服务的 1 个处理程序 ... 命令执行成功
C:Documents and SettingsAdministrator>lsnrctl status
LSNRCTL for 32-bit Windows: Version 9.2.0.1.0 - Production on 14-10 月 -2007 16:21 :47
Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))) LISTENER 的 STATUS ------------------------ 别名 LISTENER 版本 TNSLSNR for 32-bit Windows: Version 9.2.0.1.0 - Produc tion 启动日期 14-10 月 -2007 16:21:40 正常运行时间 0 天 0 小时 0 分 9 秒 跟踪级别 off 安全性 OFF SNMP OFF 监听器参数文件 C:oracleora92networkadminlistener.ora 监听器日志文件 C:oracleora92networkloglistener.log 监听端点概要 ... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=.pipeEXTPROC0ipc))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host)(PORT=1521))) 服务摘要 .. 服务 "PLSExtProc" 包含 1 个例程。 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序 ... 服务 "tg4msql" 包含 1 个例程。 例程 "tg4msql", 状态 UNKNOWN, 包含此服务的 1 个处理程序 ... 服务 "wbq" 包含 1 个例程。 例程 "wbq", 状态 UNKNOWN, 包含此服务的 1 个处理程序 ... 命令执行成功
C:Documents and SettingsAdministrator> |
10 、测试解析状态
C:Documents and SettingsAdministrator>tnsping tg4msql
TNS Ping Utility for 32-bit Windows: Version 9.2.0.1.0 - Production on 14-10 月 -2 007 16:29:43
Copyright (c) 1997 Oracle Corporation. All rights reserved.
已使用的参数文件 : C:oracleora92networkadminsqlnet.ora
已使用 TNSNAMES 适配器来解析别名 Attempting to contact (DESCRIPTION= (ADDRESS_LIST = (ADDRESS = (PROTOCOL=TCP)(HO ST= host)(PORT=1521))) (CONNECT_DATA= (SID=tg4msql)) (HS=OK)) OK ( 20 毫秒) |
11 、创建数据库链接
CREATE PUBLIC DATABASE LINK MStest CONNECT TO “sa” IDENTIFIED BY “sa” USING ‘tg4msql’; |
12 、察看数据库链接
select * from sys.LINK$ |
13 、测试
select * from Customers@MStest; |
透明网关配置的疑难问题
配置过程遇到的异常情况:
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 (源于 MSTEST ) |
解决过程,请检查以下参数
Listener.ora
PROGRAM 必须为 tg4msql
SID_NAME 为 gateway_sid ,也就是说单个透明网关情况下一定是 tg4msql ,即 inittg4msql.ora 的名字部分去掉 init 即可,呵呵
Tnsnames.ora
SID 为 Listener.ora 中的 SID_NAME
TNS 的名称可以随便进行配置。
至于以下这两个区别,我到现在也没搞明白 L
HS_FDS_CONNECT_INFO="SERVER=local;DATABASE=northwind"
HS_FDS_CONNECT_INFO=host.northwind
多个透明网关的配置
1 、把 inittg4msql.ora 复制并修改名称为 inittg4msql2.ora
2 、修改 C:oracleora92tg4msqladmininittg4msql2.ora 只修改第一行,服务器和数据库名即可
HS_FDS_CONNECT_INFO=host.pubs --hostname.databasename |
3、 修改 C:oracleora92networkadminlistener.ora ,增加如下注意 SID_Name 的变化
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = tg4msql2) (ORACLE_HOME = C:oracleora92) (PROGRAM = tg4msql) ) ) |
4、 修改 C:oracleora92networkadminTnsname.ora ,增加
TG4MSQL2= (DESCRIPTION= (ADDRESS_LIST = (ADDRESS = (PROTOCOL=TCP)(HOST= host)(PORT=1521)) ) (CONNECT_DATA= (SID=tg4msql2) ) (HS=OK) ) |
然后和单个透明网关配置一样,重新启动监听,创建数据库链接,测试。 一切 OK!