Oracle数据库 透明网关

来源:百度文库 编辑:神马文学网 时间:2024/05/11 06:58:33
一、设置GATEWAY机器(Gateway可以和Oracle Database在同一台机器上,也可以分开)
1。安装透明网关
2。设置ORACLE_HOME\tg4msql\admin\inittg4msql.ora
修改:
HS_FDS_CONNECT_INFO="SERVER=BEIBEI;DATABASE=Northwind"
3。设置ORACLE_HOME\network\admin\listener.ora
更改为:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oracle\ora90)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = tg4msql)
      (ORACLE_HOME = C:\oracle\ora90)
      (PROGRAM = tg4msql)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = oradb.seraphim)
      (ORACLE_HOME = C:\oracle\ora90)
      (SID_NAME = oradb)
    )
  )
二、设置Oracle Database机器
4。设置ORACLE_HOME\network\admin\tnsnames.ora
(Oracle Server需要此配置使用gateway)
添加:
MSQL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = seraphim)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = tg4msql)
    )
    (HS = OK)
  )
HOST:指Gateway所在的机器。
PORT:在GATEWAY机器中listener.ora文件里指定的监听gateway的端口
SID:必须和GATEWAY机器中listener.ora文件里指定的SID_NAME相同
HS = OK:指定该连接将使用Oracle的异构服务
5。检查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)
6。修改init.ora文件
设置global_names=false,重启数据库(如果原先的设置是global_names=true的话)。
否则会在执行sql时报错:ORA-02085: 数据库链接MSQL与HO.WORLD相连结
原因如下:The GLOBAL_NAMES parameter when set to TRUE implies that database link name should be
similar to the Global database name to which you are trying to connect.
7。创建Database Link
CREATE PUBLIC DATABASE LINK MSQL CONNECT TO
hr IDENTIFIED BY hr USING 'MSQL';
三、设置SQLServer服务器
8。创建用户hr/hr,并赋予相应数据库(本例中使用数据库Northwind)的检索权限或者写入权限。
9。现在可以通过如下SQL检索SQLServer中的数据了。
select count(*) from [email=all_tables@msql]all_tables@msql[/email];
select "OrderID","ShipName" from "Orders"@msql
select orders."OrderID",orderdet."Quantity",products."ProductName"
from "Orders"@msql orders,"Order Details"@msql orderdet,"Products"@msql products
where orders."OrderID"=orderdet."OrderID" and orderdet."ProductID"=products."ProductID"
注意,对于有大小写的表名和字段名需要加双引号来读取。
建议:为了在Oracle中方便的检索SQLServer的数据,可以在需要检索的表上创建视图(create view),
这样检索时就如同操作本地Oracle表一样。