我建了一个数据库链接,SID1是ORACLE 9i的一个实例,USER1是可以登陆SID1的一个用户,
然后我在SQL SERVER 2000中用
SELECT * FROM SID1..USER1.TABLE1
进行选择是没有问题的,但是我加了事务控制以后,如下
begin transaction
SELECT * FROM SID1..USER1.TABLE1
commit transaction
执行的时候就会报错,错误信息如下:服务器: 消息 7391,级别 16,状态 1,行 3
该操作未能执行,因为 OLE DB 提供程序 'MSDAORA' 无法启动分布式事务。
OLE DB 错误跟踪[OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b]。
这是怎么回事啊?哪位大虾来解答一下啊

解决方案 »

  1.   

    错误信息已经很明显了:“因为 OLE DB 提供程序 'MSDAORA' 无法启动分布式事务。”由于你加上了事务处理,而这个语句访问了sqlserver之外的Oracle数据库,也就是所谓的“分布式事务”。可以肯定是你选择的数据库连接驱动不对,你用的是OLE DB。Oracle提供了专用的数据库驱动,它支持分布式事务。
      

  2.   

    嗯,我选择的MSSQL端的数据库连接驱动是Microsoft OLE DB,那怎么用ORACLE提供的专用的数据库驱动呢?在哪里可以看到相关资料啊。。
      

  3.   

    据说MS提供的'MSDAORA' 驱动只支持Oracle 8的版本。
      

  4.   

    晕死了,我现在需要用oracle 9i,那怎么办?
      

  5.   

    我试了
    begin distributed transaction
    insert into wm_mis_tstkin 
    select * FROM WMS..ABC.WM_MIS_TABLE1
    commit transaction
    也不行
      

  6.   

    原因:
         原来按照MSSQL的在线文档进行配置,在线文档中只列出的 Oracle8.1以下版本的解决方案,但是MSSQL服务器安装的是ORACLE9I的客户端,造成找不到相关文件。解决办法:
        若要启用用于 Oracle 的 OLE DB 提供程序以与 Oracle 客户端软件一起使用,必须从命令
        行运行注册表文件以修改客户端的注册表。不应同时运行客户端软件的多个实例。这些文件都列在下表
        中并位于同一目录结构中,而该目录结构包含通常在 C:\Program Files\Common Files\System\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 
        9i              mtxoci9x_winnt.reg      mtxoci9x_win2k.reg 
     
    如果 SQL SERVER 服务器安装的ORACLE客户端的版本对照以上表格,执行相应的.reg文件,执行之后需要重新启动 SQL SERVER 数据库
     
    相关资料:http://support.microsoft.com/default.aspx?scid=kb;en-us;280106
             http://blog.csdn.net/lovcal/archive/2005/12/13/550965.aspx   仅对 windows2003server