网络结构
服务器一: sqlserver , ip 为 172.19.44.92 , port 为 1433 ;
服务器二: oracle 9i server 和透明网关, ip 为 本机 , port 为 1522;
oracle server , ip 为 本机 , port 为 1521 ;
(Gateway可以和Oracle Database在同一台机器上,也可以分开)
客户机: sqlnet + sqlplus ,或其他客户端软件。
安装 / 配置 oracle 9i server 和透明网关
安装:
1.在服务器二上安装 9i server for nt/2000 ,必须选择透明网关( transparent gateway for ms sqlsvr )。(关闭 oracle 9i server)
2.在服务器二上安装 sqlsvr 的客户端程序
配置:
1.ORACLE_HOME\tg4msql\admin\inittg4msql.ora
#
# HS init parameters
# xzh代表SQL服务名,pubs代表要访问的SQL数据库
#
#HS_FDS_CONNECT_INFO="SERVER=erp09;DATABASE=new502"
HS_FDS_CONNECT_INFO="SERVER=172.19.50.44;DATABASE=new502"
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
文件名:inittg4msql.ora,可以是init.ora,sid是listener.ora的 (SID_NAME = tlsql)这样可以设置多个link.
2.oracle_home\network\admin\Listiner.ora
net manager 设置/添加LISTENER,注意端口
LISTENER =
(DESCRIPTION_LIST =
#监听位置,地址
(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = erp09)(PORT = 1521)))
(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = erp09)(PORT = 1522)))
)
#其他服务
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
  (GLOBAL_DBNAME = tlsql)
  (PROGRAM = tg4msql)
  (SID_NAME = tlsql)
  (ORACLE_HOME = D:\oracle\ora92)
)
)
3.设置ORACLE_HOME\network\admin\tnsnames.ora
MSSQL =
(DESCRIPTION =
(ADDRESS_LIST =
#HOST:指Gateway所在的机器。
#PORT:在GATEWAY机器中listener.ora文件里指定的监听gateway的端口
  (ADDRESS = (PROTOCOL = TCP)(HOST = erp09)(PORT = 1522))
)
(CONNECT_DATA =
#SID:必须和GATEWAY机器中listener.ora文件里指定的SID_NAME相同
  (SID = tlsql)
)
#用于不同种类服务,指定该连接将使用Oracle的异构服务
(HS = OK)
)
4.检查ORACLE_HOME\network\admin\sqlnet.ora
如果文件中包含:
names.directory_path = (TNSNAMES, HOSTNAME)
names.default_domain = world
name.default_zone = world
这些行,那么4中的connect_descriptor必须添加.world后缀(如上例中MSQL必须为MSQL.world)
5.修改init.ora文件
设置global_names=false,重启数据库(如果原先的设置是global_names=true的话)
否则会在执行sql时报错:ORA-02085: 数据库链接MSQL与HO.WORLD相连结
6.创建Database Link
CREATE PUBLIC DATABASE LINK MSSQL CONNECT TO hr IDENTIFIED BY hr USING 'MSSQL';
select * from t@mssql;
select * from link$--sysdba
drop database link mssql;
CREATE PUBLIC DATABASE LINK TEST.US.ORACLE.COM CONNECT TO system IDENTIFIED BY oracle USING 'oratest';
SELECT * FROM [email protected];
7.设置SQLServer服务器
创建用户hr/hr,并赋予相应数据库(本例中使用数据库Northwind)的检索权限或者写入权限。DB_OWNER
注意,对于有大小写的表名和字段名需要加双引号来读取。
建议:为了在Oracle中方便的检索SQLServer的数据,可以在需要检索的表上创建视图(create view),这样检索时就如同操作本地Oracle表一样。