建立sql的连oracle的链接服务器

解决方案 »

  1.   

    sp_addlinkedserver
    sp_addlinkedsrvlogin 
      

  2.   

    转:  
      用于   Oracle   的   Microsoft   OLE   DB   提供程序  
      用于   Oracle   的   Microsoft   OLE   DB   提供程序使分布式查询得以查询   Oracle   数据库中的数据。  
       
      说明     从安装在   Microsoft   Windows   98   上的   SQL   Server   实例执行分布式事务时,Oracle   客户端软件不支持使用用于   Oracle   的   Microsoft    
       
      OLE   DB   提供程序进行分布式查询。  
       
      创建链接服务器以访问   Oracle   数据库实例    
       
      确保运行   SQL   Server   的服务器上的   Oracle   客户端软件已达到提供程序所要求的级别。用于   Oracle   的   Microsoft   OLE   DB   提供程序要求    
       
      Oracle   客户端软件支持文件的版本为   7.3.3.4.0   或更高版本,并且   SQL*Net   的版本为   2.3.3.0.4。  
       
      在运行   SQL   Server   的服务器上创建指向   Oracle   数据库实例的   SQL*Net   别名。有关更多信息,请参见   Oracle   文档。  
       
      执行   sp_addlinkedserver   创建链接服务器,指定   MSDAORA   为   provider_name,指定用于   Oracle   数据库实例的   SQL*Net   别名为   data_    
       
      source。    
      以下示例假设已将一个   SQL*Net   别名定义为   OracleDB。  
       
      sp_addlinkedserver   'OrclDB',   'Oracle',   'MSDAORA',   'OracleDB'  
       
      使用   sp_addlinkedsrvlogin   创建从   SQL   Server   登录到   Oracle   登录的登录映射。    
      以下示例通过   Oracle   登录名   OrclUsr   和密码   OrclPwd   将   SQL   Server   登录   Joe   映射到步骤   3   中定义的链接服务器:  
       
      sp_addlinkedsrvlogin   'OrclDB',   false,   'Joe',   'OrclUsr',   'OrclPwd'  
       
      每个   Oracle   数据库实例仅有一个名称为空的目录。Oracle   链接服务器中的表必须使用四部分名称格式    
       
      OracleLinkedServerName..OwnerUserName.TableName   进行引用。例如,以下   SELECT   语句引用   Oracle   用户   MARY   在   OrclDB   链接服务器映  
       
      射的服务器上所拥有的表   SALES。  
       
      SELECT   *  
      FROM   OrclDB..MARY.SALES  
       
      在   Oracle   链接服务器中引用表时,请使用以下规则:    
       
      如果在   Oracle   中创建的表名和列名没有引用的标识符,请全部使用大写字母名称。  
       
      如果在   Oracle   中创建的表名和列名有引用的标识符,请全部使用与   Oracle   中创建名称时相同的字母大小写格式。  
       
      INSERT   语句应为表中的所有列提供值,即使表中的某些列为   NULL   或有默认值。    
      注册表项  
      若要启用用于   Oracle   的   OLE   DB   提供程序以与   Oracle   客户端软件一起使用,必须从命令行运行注册表文件以修改客户端的注册表。不应同  
       
      时运行客户端软件的多个实例。这些文件都列在下表中并位于同一目录结构中,而该目录结构包含通常在   C:\Program   Files\Common    
       
      Files\System   Files\OLE   DB   中的   Microsoft   数据访问组件   (MDAC)   安装。  
       
      Oracle   客户端   Windows   NT   或   9x   Windows   2000    
      7.x   mtxoci7x_winnt.reg   mtxoci7x_win2k.reg    
      8.0   mtxoci80x_winnt.reg   mtxoci80x_win2k.reg    
      8.1   mtxoci81x_winnt.reg   mtxoci81x_win2k.reg     
      

  3.   

    一: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   
      

  4.   

    'SQL2000  
        Set CON = CreateObject("adodb.connection")
        CON.Open "UID=sa;PWD=;driver={sql server};SERVER=10.4.3.250;database=Esofnet;"
        mySQL = "select count(*) as q from Trans_R a where a.dev_id in ('0010','0011') and a.tr_code in ('0','9')" 'ORACLE
        Set CON = CreateObject("adodb.connection")
        CON.Open "UID=oa;PWD=csmcoa;driver={Microsoft ODBC for Oracle};SERVER=oa.csmc.com.cn;"
        mySQL = "select count(*) as a from staffdata t"SQL2000和ORACLE分别在两台远端服务器上
    我想实现sql中查询的结果中的字段“kh”等于oracle中的字段“kh”的所有行能帮我具体实现下吗?
    我是个新手,上面的转帖好多不明白
    谢谢!
    分不够再加!
      

  5.   

    偶现在开发的程序,以后运行在一台只有操作系统的服务器上,所以,无法配置服务器什么的,请问,这种情况,如何是的sql2000与oracle联查?'SQL2000  
        Set CON = CreateObject("adodb.connection") 
        CON.Open "UID=sa;PWD=;driver={sql server};SERVER=10.4.3.250;database=Esofnet;" 
        mySQL = "select count(*) as q from Trans_R a where a.dev_id in ('0010','0011') and a.tr_code in ('0','9')" 'ORACLE 
        Set CON = CreateObject("adodb.connection") 
        CON.Open "UID=oa;PWD=csmcoa;driver={Microsoft ODBC for Oracle};SERVER=oa.csmc.com.cn;" 
        mySQL = "select count(*) as a from staffdata t" SQL2000和ORACLE分别在两台远端服务器上 
    我想实现sql中查询的结果中的字段“kh”等于oracle中的字段“kh”的所有行 能帮我具体实现下吗? 
    我是个新手,上面的转帖好多不明白 
    谢谢! 
    分不够再加!
      

  6.   

    偶现在开发的程序,以后运行在一台只有操作系统的服务器上,
    --- 只有操作系统?你的数据库啦?
    所以,无法配置服务器什么的,请问,这种情况,如何是的sql2000与oracle联查?
    --- 如果不能对数据库服务器进行配置,
        那就只有在程序中比较两个查询出来的结果.不能够从数据库端链接sql和oracle.
    PS:被你说的有点晕晕....
      

  7.   

    我仅用语句连接获得数据:
    'SQL2000  
        Set CON = CreateObject("adodb.connection") 
        CON.Open "UID=sa;PWD=;driver={sql server};SERVER=10.4.3.250;database=Esofnet;" 
        mySQL = "select count(*) as q from Trans_R a where a.dev_id in ('0010','0011') and a.tr_code in ('0','9')" 'ORACLE 
        Set CON = CreateObject("adodb.connection") 
        CON.Open "UID=oa;PWD=csmcoa;driver={Microsoft ODBC for Oracle};SERVER=oa.csmc.com.cn;" 
        mySQL = "select count(*) as a from staffdata t" 
    请问,是否能在远端的sql服务器和oracle服务器上配置好了,在本地用sql语句就可以联查?