我配置了一个oracle 到 MS SQL Server的网关,为何总报错,请指教。
*******************************************
环境
*******************************************
WinXP Pro+SQL Server2000Dev+Oracle9.2.0.5
hostname: david
ORACLE_SID = brood
SQL Server 服务器 david\brood*******************************************
监听器配置listener.ora
*******************************************
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = david)(PORT = 1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = brood))
    )
  )SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = brood)
      (ORACLE_HOME = D:\oracle\ora92)
      (SID_NAME = brood)
    )
    (SID_DESC =
      (PROGRAM = extproc)
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = D:\oracle\ora92)
    )
    (SID_DESC =
      (ORACLE_HOME = D:\oracle\ora92)
      (SID_NAME = GW)
      (PROGRAM = tg4msql)
    )
  )********************************************
tg4msql的initGW.ora配置
********************************************
HS_FDS_CONNECT_INFO=david.brood.pubs
HS_FDS_TRACE_LEVEL=ON
HS_FDS_RECOVERY_ACCOUNT=david # david为sql server 登录用户
HS_FDS_RECOVERY_PWD=davidking # sql server 登录用户"david"的口令********************************************
tnsnames.ora的配置
********************************************
GW =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = GW)
    )
    (HS = OK)
  )LOCALDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = brood)
    )
  )*****************************************
创建db link
*****************************************
sqlplus system/manager
sql> create database link gw using 'gw';
sql>*****************************************
错误信息
david 为sql server pubs数据库中的一张表
*****************************************
SQL> desc david@gw
ERROR:
ORA-28500: 连接 ORACLE 到非 Oracle 系统时返回此信息:
[Transparent gateway for MSSQL][Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL
Server 不存在或访问被拒绝 (SQL State: 08001; SQL Code: 17)
ORA-02063: 紧接着2 lines(源于GW)

解决方案 »

  1.   

    initGW.ora配置错误:
    HS_FDS_CONNECT_INFO="SERVER=david\brood;DATABASE=pubs"
    HS_FDS_TRACE_LEVEL=OFF
    HS_FDS_RECOVERY_ACCOUNT=RECOVER
    HS_FDS_RECOVERY_PWD=RECOVER
    database link建法错误:
    create database link gw connect to david identified by davidking  using 'gw';
      

  2.   

    请问有关ORACLE与类似SQL SERVER之间连接的这种网关的技术介绍文章哪里有,有哪些讲解的书没有。
      

  3.   

    其实看看Oracle帮助就行了,不必找资料和书籍(较少)。
      

  4.   

    呵呵,小心 空格 问题。
    在 
    ********************************************
    tnsnames.ora的配置
    ********************************************
    GW =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = GW)
        )
        (HS = OK)
      )
    中 “GW =”的“GW”的前后最好不要有空格。
      

  5.   

    好像没什么问题吧,tnsnames.ora文件我一直都是手工编辑的,好像和空格没关系。
      

  6.   

    以下是网友gototop的文章《Oracle与SQL Server的互连》,可能对你全面检查有一定的帮助:
    若仍然有问题,请联系我 [email protected]
    Oracle与SQL Server的互连 
      
       作者:gototop
    不同数据库平台的互连一般称之为数据库的异构服务,现在各大数据库之间都可以实现这样的异构互连,只是各厂商的具体实现技术不一样,如:在SQL SERVER里面叫做LINKED SERVER,通过ODBC实现与其它数据库的互联。而ORACLE实现异构服务的技术叫做透明网关(Transparent Gateway),当然之前ORACLE还采用过通用连接技术。目前ORACLE利用透明网关可以实现和SQL SERVER、SYBASE、DB2等多种数据库的互联。透明网关的体系结构也很简单,在ORACLE和SQL SERVER之间使用ORACLE透明网关服务器实现互连互通,其中透明网关服务器可以与ORACLE或SQL SERVER数据库在同一台主机上,也可以是在独立的一台主机上。下面是具体步骤,如有疑问欢迎和我联系,MSN: [email protected]。1、在SQL SERVER数据库上创建测试账号和表这里我用的是10.16.74.140的PUBS数据库,账号cyx,create table t (c char(10));2、我测试所用数据库和透明网关是在同一台机器上,在我本机:10.16.98.16,透明网关在oracle默认安装时是不安装的,所以如果你想用需要选择这一选项。3、安装透明网关for sql server的软件后,可以在$ORACLE_HOME下看到tg4msql目录,编辑$ORACLE_HOME/tg4msql/admin/inittg4msql.sql文件确认这一行正确:HS_FDS_CONNECT_INFO="SERVER=10.16.74.140;DATABASE=pubs"4、修改透明网关server上的listener.ora,在SID_LIST中加入以下内容:(SID_NAME = tg4msql) # SID自己命名 (ORACLE_HOME = c:) (PROGRAM = tg4msql) 5、在oracle server上的tnsnames.ora中加入到透明网关的tnsname,内容如下:sql2k = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.16.98.16)(PORT = 1521)) #此处HOST填的是透明网关SERVER的地址) (CONNECT_DATA = (SID = tg4msql) ) #此SID应和透明网关SERVER上设定的SID相同(HS=OK) ) 6、修改ORACLE SERVER的初始化参数,将global_names设为false,因为我们并不使用GLOBAL NAME。然后重起数据库。7、现在在ORACLE SERVER上创建DB LINK就可以了。下面实验数据:------------ www.ncn.cn ------------- gototop --------------C:>sqlplus /nologSQL*Plus: Release 9.2.0.1.0 - Production on 星期三 6月 25 13:29:41 2003Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.SQL> conn sys/change_on_install as sysdba已连接。SQL> create user cyx identified by cyx default tablespace users;用户已创建SQL> grant connect to cyx;授权成功。SQL> grant resource to cyx;授权成功。SQL> conn cyx/cyx已连接。SQL> create database link tosql2k connect to cyx identified by cyx using 2 'sql2k';数据库链接已创建。SQL> select * from t@tosql2k;c----------abcaaabbbcyxgototopncn11111已选择7行。SQL> insert into t@tosql2k values('ncn.cn');已创建 1 行。SQL> commit;提交完成。SQL> select * from t@tosql2k;c----------abcaaabbbcyxgototopncn11111ncn.cn已选择8行。------------ www.ncn.cn ------------- gototop --------------以上示例,oracle server和透明网关server都是在同一台机器上,像在开始说明的那样,我们同样可以在其他下面oracle server中通过透明网关来访问sql server的数据。下面是示例:现在这个oracle server上添加tnsname。------------ www.ncn.cn ------------- gototop --------------hawk3$sqlplus cyxSQL*Plus: Release 8.1.7.0.0 - Production on Wed Jun 25 14:00:34 2003(c) Copyright 2000 Oracle Corporation. All rights reserved.Enter password:Connected to:Oracle8i Enterprise Edition Release 8.1.7.0.0 - ProductionWith the Partitioning optionJServer Release 8.1.7.0.0 - ProductionSQL> create database link hawk3_sql2k connect to cyx identified by cyx2 using 'sql2k';Database link created.SQL> select * from t@hawk3_sql2k;c--------------------abcaaabbbcyxgototopncn11111ncn.cn8 rows selected.------------ www.ncn.cn ------------- gototop --------------gototop 2003.7.25注:很多朋友问到关于透明网关的一些问题,在此加以说明如下:1、Oracle For SQL Server的透明网关在UNIX下无法实现,目前只支持WIN; 原因很简单,SQL Server本身不支持UNIX,所以Oracle也无法直接在UNIX下访问SQL Server。2、Oracle For其它数据库的透明网关,如SYBASE等有UNIX本版本的数据库在UNIX可以实现。 3、Oracle透明网关软件在Oracle 8i时是需要花钱另买的,大约1万$;到Oracle 9i时是作为数据库的一个组件免费发布的。安装时在组件种选择即可。 4、针对我们的实际应用,如果有需要实现Oracle 到SQL Server的互连,我们需要另外用一台WIN下的Oracle 9i来做透明网关服务器,其它UNIX下的Oracle通过这个透明网关来访问SQL Server。 5、不同数据库间的数据处理需使用标准SQL来实现。 6、各数据库中特殊的数据类型,需要在程序中实现转换,应尽量避免使用无法转换的数据类型。