如果在oracle 中显示sqlserver的数据库?就如同在sqlserver中建与oracle的链接一样的功能这样我直接在oracle中查询删除等操作sqlserver中的数据库.

解决方案 »

  1.   

    没有,只能Oracle之间db link
      

  2.   

    我这几天正在测试9i的透明网关,整理出一些东西。
    一、在网关所在机器上
        1、安装oracle透明网关(ORACLE TRANSPARENT GATEWAY)for mssql server。该网关必须运行在WINDOWS平台上,且机器上还必须安装SQL SERVER客户端。
        2、在%oracle_home%\tg4msql\admin目录下,创建名为init<SID_NAME>.ora的连接参数文件文件。SID_NAME就是下一步需要配置listener时的SID_NAME。网关安装后会有一个名为initTG4MSQL.ora的参数文件。关键是要设置正确的HS_FDS_CONNECT_INFO参数,HS_FDS_CONNECT_INFO参数的格式是HS_FDS_CONNECT_INFO="SERVER=服务器别名或IP地址;DATABASE=数据库名",选用服务器别名,应该先在SQL SERVER客户端中配置别名。
        如果需要配置多个网关连接不同的sql server服务器或数据库,为每个服务器或数据库配一个SID_NAME。如果是需要用不同的SQL SERVER用户连接同一个数据库,也最好为每个用户名配一个SID_NAME。
        3、在%oracle_home%\network\admin目录下,修改listener.ora,为上一步的每个SID_NAME创建监听项。假设oracle_home是d:\oracle\ora92,为tg4msqlHZ增加的监听项如下:
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          ...
        )
        ...
        (SID_DESC=
          (SID_NAME=tg4msqlHZ)
          (ORACLE_HOME=d:\oracle\ora92)
          (PROGRAM=tg4msql)
        )
      )二、在oracle数据库服务器上
    1、为需要连接的SQL SERVER数据库(也就是一.3中的新加的监听)在tnsnames.ora中创建本地服务名。注意,CONNECT_DATA项是用SID=XXX,且一定要设置HS=OK。如为连接192.168.112.112上的tg4msqlHZ创建一个名为msqlHZ的本地服务名如下:
    msqlhz =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.112.112)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = tg4msqlHZ)
        )
        (HS=OK)
      )三、oracle数据库中
        1、为需要连接的SQL SERVER数据库(也就是在二.1中配置了本地服务名)创建DBLINK。如为本地服务名是msqlhz创建一个名为HZ的DBLINK,使用sql server的sa用户,口令是aaaaaa
    create public database link HZ
      connect to SA identified by aaaaaa
      using 'msqlhz';四、其他事项
        1、即使SQL SERVER是设置为大小写不敏感的,但oracle通过TG4MSQL访问SQL SERVER时,还是会按SQL SERVER系统表中登记的对象名来判断对象是否存在,因此,如果在SQL SERVER中按create table t_test(c1 int, ...)来创建的表,那么在oracle中想查找c1为10的记录就必须写为
    select * from t_test@DBLINKNAME where "c1"=10;
        2、按oracle配置手册上说可以在oracle中直接执行SQL SERVER的存储过程,但如果存储过程的拥有者不是DBLINK所设置的用户,那么直接执行存储过程会报“表或视图不存在”。解决的办法是通过dbms_hs_passthrough.execute_immediate来执行存储过程。
        3、在oracle中通过网关访问SQL SERVER后,一定要提交事务。包括执行select。
        4、如果是通过网关同步数据,最好是先将要同步的数据全插入SQL SERVER的中间表,然后在SQL SERVER中执行存储过程来判断哪些是要修改哪些是要新插入。这样做效率很高。否则通过网关来比较两边的数据会很慢。而且要控制不要频繁提交。    我发现一个问题,好像不能在一个事务中同时对多个网关的数据做更新。正在找答案。