EXEC sp_addlinkedserver 'OracleSvr', 
   'Oracle 7.3', 
   'MSDAORA', 
   'ORCLDB'
GO
SELECT * into 本地库名..表名 --如果本地未建表
FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM joe.titles') 
GO

解决方案 »

  1.   

    SQL Server到Oracle连接服务器的实现 
     
     
    作者:中国论坛网收集 来源:http://www.51one.net 加入时间:2004-8-25  
     
    SQL Server到Oracle连接服务器的实现 
      
      作者:Jennifer 
    本文以SQL Server 2k为例说明SQL Server到Oracle连接服务器的具体实现过程。1.要求pc机上安装oralce客户端软件和sqlserver2000软件。2.客户端的配置tnsnames.ora文件,配置所要连接的数据库服务器(windows,unix等平台均可以)
    eg:tnsnames.ora
    ......
    TEST =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.11.90)(PORT = 1521))
        )
        (CONNECT_DATA =
          (sid = blue)
          (SERVER = DEDICATED)
        )
      )
    ......3.配置windows的ODBC数据源:
      开始菜单—》设置—》管理工具—》数据源(ODBC)—》进入配置用户DSN或者系统DSN均可以:添加—》选择Microsoft ODBC for oracle—》自定义数据源名称(最好跟tns中连接串同名!)—》服务器名称(必填!填写tns文件中的连接串名称)—》完成。4.配置sqlserver2000中的连接服务器:
      企业管理器—》安全性—》连接服务器—》右键新建连接服务器—》定义连接名称; 选其他数据源; 指定程序名称为:Microsoft OLE DB Provider for Oracle;  产品名称可不填; 数据源指定刚才ODBC中定义好的数据源名称; 提供程序字符串按以下格式填写:User ID=username;Password=userpasswd(或者按如下格式:UID=username;PWD=userpasswd),这里的用户名和密码对应所要连接的oracle数据库中的用户名和密码 —》 安全性标签页里:设置用此安全上下文进行,并录入oracle的数据库用户名和密码—》服务器选项标签页可默认—》确定。5.准备工作全部完成啦!在sqlserver企业管理器—》安全性—》连接服务器打开刚建好的连接服务器—》点击表,即可在右边窗口看到该oracle数据库用户拥有的的所有表名,但在这里还并不能查看表的记录,这个需要在sqserver的查询分析器中用具体sql实现!访问表时,使用格式为:  [连接服务器名]..[ORACLE用户].[表名]。更详细具体的使用这里不再赘述。
      

  2.   

    数据连接后,定时处理数据用作业就行了企业管理器
    --管理
    --SQL Server代理
    --右键作业
    --新建作业
    --"常规"项中输入作业名称
    --"步骤"项
    --新建
    --"步骤名"中输入步骤名
    --"类型"中选择"Transact-SQL 脚本(TSQL)"
    --"数据库"选择执行命令的数据库
    --"命令"中输入要执行的语句
    --确定
    --"调度"项
    --新建调度
    --"名称"中输入调度名称
    --"调度类型"中选择你的作业执行安排
    --如果选择"反复出现"
    --点"更改"来设置你的时间安排
    然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行设置方法:
    我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
      

  3.   

    说我连接有问题我在查询分析器不能查询数据
    OLE DB 提供程序 'testoracle' 不包含表 '"test"."emp"'。该表可能不存在,或当前用户没有使用该表的权限。
    OLE DB 错误跟踪[Non-interface error:  OLE DB provider does not contain the table: ProviderName='testoracle', TableName='"test"."emp"']。
      

  4.   

    该操作未能执行,因为 OLE DB 提供程序 'MSDAORA' 无法启动分布式事务。
    OLE DB 错误跟踪[OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b]。
    这是什么问题啊。我把执行语句放到事务中就出现上面问题了
      

  5.   

    连接和插入数据已经没有问题。我加个事务就出现了问题了。
    错误:
    该操作未能执行,因为 OLE DB 提供程序 'MSDAORA' 无法启动分布式事务。
    OLE DB 错误跟踪[OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b]。
    帮帮忙
      

  6.   

    连接和插入数据已经没有问题。我加个事务就出现了问题了。
    错误:
    该操作未能执行,因为 OLE DB 提供程序 'MSDAORA' 无法启动分布式事务。
    OLE DB 错误跟踪[OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b]。
    帮帮忙
      

  7.   

    EXEC sp_addlinkedserver 'OracleSvr', 
       'Oracle 7.3', 
       'MSDAORA', 
       'ORCLDB'
    GO
    BEGIN DISTRIBUTED TRANSACTION  --用分布式事务试试
    SELECT * into 本地库名..表名 --如果本地未建表
    FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM joe.titles') 
    commit tran
    GO