这里有3台服务器,一台装oracle10g/11g服务器,1台sql server服务器,1台装windows系统的服务器(作为oracle透明网关服务器,因为oracle11g以前的透明网关不支持linux的系统)
具体的ip如下:
1.Oracledb服务器 IP:192.168.1.131
2.Sql server服务器 IP:192.168.10.30
3.透明网关服务器 IP:192.168.10.90
下面是详细步骤:
一.在oracle官方网站下载透明网关的安装软件大概有200多M,我安装在192.168.10.90的D:\oracle\product\10.2.0下,默认情况下,安装透明网关时会在D:\oracle\product\10.2.0\tg_1\tg4msql\admin下生成一个默认的参数文件:inittg4msql.ora,它的sid是tg4mssql,你可以使用这个文件,也可以新建一个文件。在我们的sql server服务器上执行select db_name() 显示其sid为location,所以我们新建一个名为initlocation.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=192.168.10.30; DATABASE=location"
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
HS_FDS_CONNECT_INFO的设置有多种格式,如: HS_FDS_CONNECT_INFO=server_name.db_name,但这种写法server_name不能为IP,且端口必须为默认的1433,如:
HS_FDS_CONNECT_INFO=sqlserver.jss
二.在透明网关上配置监听,监听文件listener.ora在D:\oracle\product\10.2.0\tg_1\NETWORK\ADMIN目录下,文件内容如下:
# listener.ora Network Configuration File: D:\oracle\product\10.2.0\tg_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.2.0\tg_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = tg4msql)
(SID_NAME = location) /*在这里的SID_NAME必须和上一步中的SID_NAME一致*/
(ORACLE_HOME = D:\oracle\product\10.2.0\tg_1)
(PROGRAM = tg4msql)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.90)(PORT = 1521))
)
)
三.在透明网关服务器上启动监听
LSNRCTL> start
启动tnslsnr: 请稍候...
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
系统参数文件为D:\oracle\product\10.2.0\tg_1\network\admin\listener.ora
写入D:\oracle\product\10.2.0\tg_1\network\log\listener.log的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.10.90)(PORT=1521)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 12-1月 -2010 10:26:29
正常运行时间 0 天 0 小时 0 分 2 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 D:\oracle\product\10.2.0\tg_1\network\admin\listener.o
ra
监听程序日志文件 D:\oracle\product\10.2.0\tg_1\network\log\listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.10.90)(PORT=1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "tg4msql" 包含 1 个例程。
例程 "location", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
LSNRCTL>
到这一步,在透明网关服务器上的工作全部完成。
四.在192.168.1.131上配置tnsname.ora
在里面添加:
location =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.10.90)(PORT = 1521))
)
(CONNECT_DATA =
(SID = location)
)
(HS = OK)
)
五.创建数据库链接
在192.168.1.131中的sql*plus上执行
drop public database link db_sql2;
create public database link db_sql2
connect to "sa" identified by "wuhan_wri3g"
using 'location';
执行完后,如果配置成功就可以从192.168.1.131上访问sql server中的数据了例如
desc t_city@db_sql2;
select * from dbo.t_sid@db_sql2;
如果这个sql有记录返回,说明透明网关没有问题。
oracle的透明网关向前兼容做得不好,oracle 9i数据库不能通过10g的透明网关访问sqlserver。
补充1:如果想通过透明网关连接多个sql server数据库,则要在第一步中,新建相应SID_NAME的init<SID_NAME>.ora文件,在第二步中的监听文件中添加相应的
(SID_DESC =
(GLOBAL_DBNAME = tg4msql)
(SID_NAME = XXXX) /*在这里的SID_NAME必须和上一步中的SID_NAME一致*/
(ORACLE_HOME = D:\oracle\product\10.2.0\tg_1)
(PROGRAM = tg4msql)
)
然后在第四步中的tnsname.ora中添加相应的网络服务名解释
XXXX=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.10.90)(PORT = 1521))
)
(CONNECT_DATA =
(SID = xxxx)
)
(HS = OK)
)
其余步骤一样
补充2:
A: 多个库配置不同的gateway, 需要在gateway 目录下(C:\product\11.2.0\tg_2\dg4msql\admin)分别设置多个文件,命名为 init{sid_name}.ora。 里面配置见上。
---SID_NAME 多少个,这个文件就有多少个。
B: GATEWAY 下的目录:(C:\product\11.2.0\tg_2\NETWORK\ADMIN) 下的listener.ora 文件 ,是关于sqlserver 不同的库 sid_name 增加。
eg:
-------------------------------------------------------------------------------------------------
# listener.ora Network Configuration File: C:\product\11.2.0\tg_2\network\admin\listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 100-160)(PORT = 1521)) ----IP:192.168.10.90
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER=
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc) ---这是原始的,可以不写
(ORACLE_HOME = C:\product\11.2.0\tg_2)
(PROGRAM = extproc) ----这是配置时原始的,可以不要
)
(SID_DESC =
(SID_NAME = cninfo_ss) ---第一个sqlserver 库的 sid_name
(ORACLE_HOME = C:\product\11.2.0\tg_2)
(PROGRAM=dg4msql)
)
(SID_DESC =
(SID_NAME = csmar_index) ---第二个库sqlserver 的 sid_name
(ORACLE_HOME = C:\product\11.2.0\tg_2)
(PROGRAM=dg4msql)
)
)
ADR_BASE_LISTENER = C:\product\11.2.0\tg_2
----------------------------------------------------------------------------------------------------
C: GATEWAY 下的目录:(C:\product\11.2.0\tg_2\NETWORK\ADMIN) 下的 tnsnames.ora 为连接的oracle 库 servers服务。
eg: ---这可增加,根据库的增加而增加。(oracle库)
TO_131=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.131)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = gtadb1)
)
)
D: 需要把 sqlserver 在gateway 下的服务 放入oracle库 下的tnsnames.ora 下:
CSMAR =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10。90)(PORT = 1522)) ---gateway 的IP
)
(CONNECT_DATA =
(SID = csmar_index)
)
(HS = OK) --重要
)
create public database link link84 connect to "chengxuzu" identified by "gtachengxuzu" using 'CSMAR';
drop public database link xxx;
sqlserver --oracle
1,修改文件,指向sqlserver 实例,同时需要以实例命名 文件。放在文件夹中,多个sqlserver 蒋有多个这样的不同名称的文件。
2,透明网关下,修改linstener.ora 文件,把新增的sqlserver 实例新增进去。
3,透明网关下,tnsname.ora 增加 目标端oracle 监听名。
4,目标端,oracle tnsname.ora 下需要添加 sqlserver 对应实例的监听
5, 不需要安装 oracle client