通过sql server的连接服务器,手动从sql server向oracle插数据可以,但是在触发器中不行,报如下错:服务器: 消息 7391,级别 16,状态 1,行 3
该操作未能执行,因为 OLE DB 提供程序 'MSDAORA' 无法启动分布式事务。
OLE DB 错误跟踪[OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b]
原因:
     原来按照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 数据库请问哪位有mtxoci9x_win2k.reg这个文件,发给我一份,十分感谢!!!!! 

解决方案 »

  1.   

    插数据可以,但是在触发器中不行. 有这事?  sql server 插入oracle的是小写. 
      

  2.   

    该操作未能执行,因为 OLE DB 提供程序 'MSDAORA' 无法启动分布式事务。 
    OLE DB 错误跟踪[OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b] 
    -------------------------------
    触发器是在oracle数据库建立的还是在sql server建的?
    如果是有sql server上建立触发器,说明数据库引擎不支持分布式事务
    那你就要启动sql server的分布式事务:
    企业管理器-->support services-->Distributed Transaction Coordinator-->启动如果已经在oracle上建立触器,那就不清楚是什么回事了?