理论上,通过配置链接服务器可以访问Oracle服务器,而且在SQL2000上也完全可行,但是在SQL2008却总是报错(但是通过数据导入是没有问题的),有没有实验成功过的?请不吝赐教!还有通过链接服务器访问Oracle的表:abc.tablename@dbname,如何写SQL语句呢?假设连接服务器名称是oralink,那么:select * from oralink.abc.tablename@dbname出现错误,怎样写才是正确的?

解决方案 »

  1.   

    http://www.docin.com/p-80928574.html
      

  2.   

    2008不知道,2000用如下没问题。第一个:
    在SQL SERVER 20000中访问Oracle数据库服务器的几种方法 1.通过行集函数opendatasource
    要求:本地安装Oracle客户端
    select *  from opendatasource('MSDAORA', 'Data Source=XST4;User ID=manager;Password=sjpsjsjs')..MISD.PBCATCOL
    其中,MSDAORA是OLEDB FOR Oracle的驱动,注意:用户名和表名一定要大小,服务器和用户名之间是两个点;
    例如:
    select top 10 *  from opendatasource('MSDAORA', 'Data Source=HZTEST;User ID=osstest;Password=a1234')..OSSTEST.SUBSCRIBER本地Oracle客户端配置文件中内容如下:
    HZTEST =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 132.149.7.19)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = test)
        )
      )2. 使用MS SQL的openrowset函数
    select A.* from openrowset('MSDAORA','XST4';'manager';'sjpsjsjs', 'MISD.PBCATCOL') as A 
    order by A.ID
    使用这种方式一定要用别名才行3.使用ODBC方式
    select A.* from openrowset('MSDAORA','XST4_ODBC';'manager';'sjpsjsjs', 'MISD.PBCATCOL') as A order by A.ID
    XST4_ODBC是ODBC数据源4.使用链接服务器方式
    EXEC SP_ADDLINKEDSERVER
    @server='mylinkedserver',      --链接服务器名称
    @srvproduct='Oracle',          --固定
    @provider='MSDAORA',           --固定
    @datasrc='XST4'                --Oracle本地服务名
    该文章转载自德仔工作室:http://www.dezai.cn/article_show.asp?ArticleID=17285
    第二个:
    SQL和ORACLE之间的数据查询配置透明网关的步骤
    前一段花了些时间配置 TRANSPARENT GATEWAY
    现在把心得贴出来与大家共享我的OS是WIN2000  
    ORACLE 9.0
    SQLSERVER2000
    HOSTNAME : SVR1
    都使用 tcp/ip 默认端口
    1: 安装 TRANSPARENT GATEWAY 选件(我安装的是FOR MSSQL)
       安装完成了以后有这样一个目录 oracle_home\ora90\tg4msql2: 配置 LISTENER.ORA
        (SID_DESC =
          (GLOBAL_DBNAME = tg4sql) # 可自己命名
          (PROGRAM = tg4msql)
          (SID_NAME = sql2000)  # SID 自己命名
          (ORACLE_HOME = D:\oracle\ora90)
        )3: 在 oracle_home\ora90\tg4msql\admin
       建文件 init<SID>.ora 由于LISTENER里定义SID为 sql2000
       因此文件名为:initsql2000.ora
       其中内容为:
       HS_FDS_CONNECT_INFO=svr1.master # svr1为SQL服务器名
       HS_FDS_TRACE_LEVEL=OFF
       HS_FDS_RECOVERY_ACCOUNT=RECOVER
       HS_FDS_RECOVERY_PWD=RECOVER4: 重启 DATABASE AND LISTENER5: 配置 tnsnames.ora
    tg_sql = 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = SVR1)(PORT = 1521)) 
        ) 
        (CONNECT_DATA = 
          (SID = sql2000) 
        ) 
        (HS=OK) 
      ) 6: 建立 DATABASE LINK
    CREATE PUBLIC DATABASE LINK DB_SQL
    CONNECT TO SA IDENTIFIED BY PASSWORD
    USING 'tg_sql'7: 完成,测试
      select * from t_test@db_sql8: 请注意使用 DBLINK 时,INIT.ORA中 GLOBAL_NAME 的设置,
      如果为 ture , 请使用DBLINK的全称,可在 all_db_links 中查到,
      如果为 FALSE, 不必使用全称,当出现 
      “ORA-02019:为找到远程数据库的连接说明”
      时,请使用全称,如:
      select * from t_test@db_sql.US.ORACLE.COM
      

  3.   

    按照一楼提供的方法使用SQL2008建立连接服务器报错:
    ----------------------------------------------------------------------------------------------
     Microsoft SQL Server Management Studio 
            链接服务器已创建但连接测试失败。是否要保留该链接服务器? 
            其他信息: 
            执行 TransactSQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)         链接服务器"ORADB"的 OLE DB 访问接口 "MSDAORA" 返回了消息 "发生了一个 Oracle 错误, 
            但无法从 Oracle 中检索错误信息。"。 (Microsoft SQL Server,错误: 7303)
    ----------------------------------------------------------------------------------------------
    同样的方法在SQL2000下则没有问题,在两个SQL2008的机器中实验均不成功。还请高人指点。
      

  4.   

    还有一个问题,虽然使用SQL2000建立的链接服务器没有报错,但是无论是使用链接服务器,还是使用openquery、opendatasource都报同样的错误:
    ---------------------------------------------------------------------------------------------
    [OLE/DB provider returned message: ORA-12154: TNS: 无法解析指定的连接标识符] 
    OLE DB 错误跟踪[OLE/DB Provider 'MSDAORA' IDBInitialize::Initialize returned 0x80004005:   ]。 
    消息7399,级别16,状态1,第1 行 
    OLE DB 提供程序'MSDAORA' 报错。
    ---------------------------------------------------------------------------------------------
    可是同样的语句在oracle中完全是没有问题的。为什么?
      

  5.   

    急用,在线等关键是SQL2008不能新建链接服务器
      

  6.   

    怎么使用啊,我急需统计代码,html模式。
      

  7.   

    配置SQL2008的Oracle链接服务器还是失败。再等
      

  8.   

    很是失望,最近的几个帖子均没有满意的答案!还得自己解决:
    1、SQL2008新建Oracle链接服务器出现错误:原因是ssms的路径太长,将其考到一个简单的文件夹下,问题就解决了,神奇吧?!
    2、对于带有前、后缀的表名,直接使用select * lnksrv..user.tabname这种方式无法解决,只能使用:select * from openquery(lnksvr,"select * from user.tabname@dbname")才可以。还是感谢各位的支持!