ORACLE连接sqlserver的技术叫做透明网关(Transparent Gateway)。Oracle透明网关软件在Oracle 8i时是需要花钱另买的,大约1万$;到Oracle 9i时是作为数据库的一个组件免费发布的。安装时在组件种选择即可(默认是不安装的)。

解决方案 »

  1.   

    你说得http://fengyu.china.com/sqlserver.htm这个资料介绍的挺详细了,只是你的机器上还没有安装Transparent Gateway。
      

  2.   

    wangybyangxr(王永斌)兄懂得东西真多啊。佩服佩服学习ing
      

  3.   

    To: ORARichard(没钱的日子好难过啊)记得在上个月24日的一个帖子里,你还是三个裤叉,现在都升到星了(“好难过”也“...”了)。速度之快,真令人佩服佩服。ORARichard的热心程度是可想而知的!在这里,我们相互学习,共同进步!
      

  4.   

    搜索“Oracle 异构服务实践”这篇文章,有详细介绍。通过透明网关访问MSSQL已成功,但也有别的问题,用透明网关时无法进入OEM???
      

  5.   

    那怎么办?我现在不能更换数据库,我试了想单独安装9i中的Transparent Gateway,可是报了一堆错误,不给安装。没有别的方法了吗?我看到有人用odbc+oracle8i中的hs实现代理功能,可是我没有设置成功。
      

  6.   

    wangybyangxr(王永斌) 你可是ORACLE的知识都懂啊,我只是刚学ORACLE,只懂一些SQL方面的东西。要向你学的还很多哦。至于猩猩吗,不代表什么的:)
      

  7.   

    你看能不能找上For oracle8i 的 Transparent Gateway。
      

  8.   

    那就用普通连接技术(Generic connectivity)来实现吧。它是通过异种服务代理(Heterogeneous Services)来实现的。异种服务代理有ODBC、OLEDB等。(Oracle816以上版本支持)  就用ODBC吧,简单些。但是肯定不如Transparent Gateway,有很多限制。
     1、在WHERE子句中包括了函数的Updates或deletes语句不被允许;
     2、不支持存储过程的调用; 
     3、不支持分布式事务,只支持单点的事务。不知能不能满足你的需要?
      

  9.   

    能,但是怎么配置呢??
    我按照下面的材料配置的,
    http://www.ezikao.com.cn/art.view.asp?artid=3033
    但是监听没有启动。
      

  10.   

    我打不开 http://www.ezikao.com.cn/art.view.asp?artid=3033。下面是配置步骤:第一步
    配置ODBC,假如配了一个名为CONN_SQL2000的数据源名。第二步
    $ORACLE_HOME/HS/ADMIN下,ORACLE提供了样例初始化文件,把对应的文件复制一份出来,并且改名为init<HS_SID>.ora,<HS_SID>是你SQL SERVER ODBC代理起的别名。例如:initSQL2K.ora
    编辑initSQL2K.ora文件。参数有: 
    # This is a sample agent init file that contains the HS parameters that are 
    # needed for an ODBC Agent. 

    # HS init parameters 

    HS_FDS_CONNECT_INFO = CONN_SQL2000
    HS_FDS_TRACE_LEVEL = ON 
    HS_AUTOREGISTER = TRUE 
    # Environment variables required for the non-Oracle system 

    #set <envvar>=<value>第三步 创建异种服务代理的数据字典 
    执行$ORACLE_HOME/rdbms/admin/caths.sql,创建相关的系统表和视图。 第四步 创建异种服务代理的工作环境 
    添加SQL2K的侦听服务,$ORACLE_HOME/NETWORK/ADMIN/listener.ora 
    SID_DESC= 
         (SID_NAME=SQL2K) 
           (ORACLE_HOME=d:\oracle\ora81) 
          (PROGRAM=hsodbc) 
        ) 
    修改$ORACLE_HOME/NETWORK/ADMIN/tnsnames.ora,添加一个网络服务名 
    sql2k,将在后面创建数据库联接时用到。 
    sql2k =  
    (DESCRIPTION= 
         (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)) 
         (CONNECT_DATA=(SID=SQL2K)) 
         (HS=OK)
     )
    重新启动侦听第五步 修改数据库启动参数文件 
    修改数据库启动参数文件,设置global_names=false第六步 创建访问non-oracle数据库的连接(Database Link) 
       在sqlplus中,执行create database link命令。Connect to 指定了连接到SQL SERVER的用户名和密码。 
    SQL>create public database link sql2k connect to sa identified by manager using ‘sql2k’; 
    Database link created. 
    第七步 测试 
    SQL> connect scott/tiger;
    Connected. 
    SQL> select count(*) from sysobjects@sql2k; 
      COUNT(*) 
    ---------- 
           135
    现在,oracle已经可以访问sqlserver数据库了。
      

  11.   

    wangybyangxr(王永斌) :
      按照你的方法配置后,监听没有启动,所以还是连接不上
      

  12.   

    重新启动侦听:用命令:LSNRCTL start下面是在我机器上启动的输出结果:LSNRCTL for 32-bit Windows: Version 9.2.0.1.0 - Production on 14-1月 -2005 15:19:11Copyright (c) 1991, 2002, Oracle Corporation.  All rights reserved.启动tnslsnr:请稍候...TNSLSNR for 32-bit Windows: Version 9.2.0.1.0 - Production
    系统参数文件为C:\oracle\ora92\network\admin\listener.ora
    写入C:\oracle\ora92\network\log\listener.log的日志信息
    监听:(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
    监听:(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=happysoft)(PORT=1521)))正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))
    LISTENER 的 STATUS
    ------------------------
    别名                      LISTENER
    版本                      TNSLSNR for 32-bit Windows: Version 9.2.0.1.0 - Production
    启动日期                  14-1月 -2005 15:19:13
    正常运行时间              0 天 0 小时 0 分 2 秒
    跟踪级别                  off
    安全性                    OFF
    SNMP                      OFF
    监听器参数文件          C:\oracle\ora92\network\admin\listener.ora
    监听器日志文件          C:\oracle\ora92\network\log\listener.log
    监听端点概要...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=happysoft)(PORT=1521)))
    服务摘要..
    服务 "IES" 包含 1 个例程。
      例程 "IES", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "OEMREP" 包含 1 个例程。
      例程 "OEMREP", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "ORA92" 包含 1 个例程。
      例程 "ORA92", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "PLSExtProc" 包含 1 个例程。
      例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "SQLAgent" 包含 1 个例程。
      例程 "SQLAgent", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "tg4msql" 包含 1 个例程。
      例程 "tg4msql", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    命令执行成功==========================
    其中的SQLAgent就是以上所说得连接SQLSERVER的例程。
      

  13.   

    wangybyangxr(王永斌) :
     在修改完后我重新启动数据库后,用status查看数据库提示只启动主sid.
     在按照你的步骤进行中,在执行caths.sql语句的时候,很多drop语句不能执行,只有一一屏蔽后执行完毕全部语句,但是在数据库重启后建立的caths.sql表好像不存在.
      

  14.   

    一:sqlserver连接oracle
    1.配置windows的ODBC数据源: 
    开始菜单—》设置—》管理工具—》数据源(ODBC)—》进入配置用户DSN或者系统DSN均可以:
    添加—》选择Microsoft ODBC for oracle—》自定义数据源名称(最好跟tns中连接串同名!)—》服务器名称
    (必填!填写tns文件中的连接串名称)—》完成。 2.配置sqlserver2000中的连接服务器: 
    企业管理器—》安全性—》连接服务器—》右键新建连接服务器—》定义连接名称;
    选其他数据源; 指定程序名称为:Microsoft OLE DB Provider for Oracle; 产品名称可不填; 
    数据源指定刚才ODBC中定义好的数据源名称; 提供程序字符串按以下格式填写:User ID=username;Password=userpasswd
    (或者按如下格式:UID=username;PWD=userpasswd),
    这里的用户名和密码对应所要连接的oracle数据库中的用户名和密码 —》 安全性标签页里:
    设置用此安全上下文进行,并录入oracle的数据库用户名和密码—》服务器选项标签页可默认—》确定。 3.完成了。使用方法
    在sqlserver企业管理器—》安全性—》连接服务器打开刚建好的连接服务器—》点击表,
    即可在右边窗口看到该oracle数据库用户拥有的的所有表名,但在这里还并不能查看表的记录,这个需要在sqserver的查询分析器中用具体sql实现!
    访问表时,使用格式为: [连接服务器名]..[ORACLE用户].[表名]。必须为大写。更详细具体的使用这里不再赘述。
    ------------------------------------------------------------------------------------------
    二:oracle连接sqlserver
    1、安转透明网关
    在自定义安转内
    D:\oracle\ora92\tg4msql\admin\inittg4msql.ora   tg4msql
    2、在D:\oracle\ora92\network\admin\listener.ora内添加
     (SID_DESC =
          (GLOBAL_DBNAME = tg4msql) 
           (PROGRAM = tg4msql)
          (ORACLE_HOME = D:\oracle\ora92)
          (SID_NAME = tg4msql)
        )
    3、配置tns
    tnsnames.ora
    -----------------
    例子1
    cdma =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = zhyg)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = tg4msql)
          (SERVER = DEDICATED)
        )
        (HS=OK)
      )
    例子2
    du =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = sha38)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = jf)
          (SERVER = DEDICATED)
        )
        (HS=OK)
      )
    --------
    3、创建数据链路  
    CREATE PUBLIC DATABASE LINK DU CONNECT TO SA IDENTIFIED BY SA USING 'DU'
    ok可以使用了
    select * from sysobjects@cdma
      

  15.   

    我在这里试了,是成功的,执行caths.sql也正常。
      

  16.   

    你是用什么用户登陆的?你们的环境都是oracle9i的,是不是8i不行?
    我是用internal用户,环境是win2000 server+oracle8i ,步骤如下:
    1.配置windows的ODBC数据源: 
    开始菜单—》设置—》管理工具—》数据源(ODBC)—》进入配置用户DSN:
    添加—》选择SQL SERVER —>定义数据源名称SQL2K—》服务器名称
    2.修改$ORACLE_HOME/HS/ADMIN下,ORACLE提供了样例初始化文件,并且生成名为initSQL2K.ora的文件
    文件参数为: 
    # This is a sample agent init file that contains the HS parameters that are 
    # needed for an ODBC Agent. 

    # HS init parameters 

    HS_FDS_CONNECT_INFO = SQL2K
    HS_FDS_TRACE_LEVEL = ON 
    HS_AUTOREGISTER = TRUE 
    # Environment variables required for the non-Oracle system 

    #set <envvar>=<value>第三步 执行$ORACLE_HOME/rdbms/admin/caths.sql,创建相关的系统表和视图。 第四步 添加SQL2K的侦听服务,$ORACLE_HOME/NETWORK/ADMIN/listener.ora 
    (SID_DESC= 
        (GLOBAL_DBNAME= SQL2K)
         (SID_NAME=SQL2K) 
           (ORACLE_HOME=c:\oracle\ora81) 
          (PROGRAM=hsodbc) #这个参数设置为SQL2K和hsodbc都用过了
        ) 
    修改$ORACLE_HOME/NETWORK/ADMIN/tnsnames.ora,添加一个网络服务名 
    sql2k,将在后面创建数据库联接时用到。 
    sql2k =  
    (DESCRIPTION= 
         (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)) 
         (CONNECT_DATA=(SID=SQL2K)) 
         (HS=OK)
     )
    重新启动侦听