我在MSSQL里做了一个ORACLE的链接服务器,从MS里 向ORACLE里写数据,用到了分布式事务,代码如下:
--删除本地临时中转表的数据
Delete From SQDataTemp
--从本地视图中将准备传递的数据写到本地临时中转表中
Insert Into SQDataTemp(AutoID,nodeid,loopid,dateid,timeid,xk,dk,xh,zh,dh,tg,mt,tlg,speedk) 
Select top 100 AutoID,nodeid,loopid,dateid,timeid,xk,dk,xh,zh,dh,tg,mt,tlg,speedk From v_SQDATA
--如果没有需要传递的数据则退出
if @@ROWCOUNT = 0
begin
  return
end
--开始事务
Set XACT_ABORT on
BEGIN DISTRIBUTED TRANSACTION 
--将本地临时中转表中的数据全部写入远程的Oracle数据库 
insert Into OpenQuery(linkdb,'select nodeid,loopid,dateid,timeid,xk,dk,xh,zh,dh,tg,mt,tlg,speedk from System.SQData') 
select nodeid,loopid,dateid,timeid,xk,dk,xh,zh,dh,tg,mt,tlg,speedk from SQDataTemp 
--判断是否成功
--if @@ERROR > 0 
--begin
--  rollback 
--  return 
--end
--对已转存成功的数据在源表中做标记
Update nMinuteVehicleInfoStat Set SendToDB = 1 
Where AutoID in(Select AutoID from SQDataTemp)
--提交事务 
Commit执行后出现下面的问题:
服务器: 消息 7391,级别 16,状态 1,行 21
该操作未能执行,因为 OLE DB 提供程序 'OraOLEDB.Oracle' 无法启动分布式事务。
OLE DB 错误跟踪[OLE/DB Provider 'OraOLEDB.Oracle' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
问题:怎么让ORACLE支持分布式事务呢?SQL SERVER 2000、ORACLE 8.1.6

解决方案 »

  1.   

    1。记得要配置 mssqlserver 的一个DLL,和存储过程,默认安装的MSSQLSERVER是不支持XA分布试事务的
    2。配好以后还要开 sqlserver上的 dts服务
      

  2.   

    MSSQL的分布式事务处理已经启用了啊。现在根据提示的信息好像是说ORACLE不能启动事务啊,有谁做过这个?
      

  3.   

    将oracle设置成MTS格式,你的现在应该dedicate
      

  4.   

    to :GerryYang(轻尘) 
    怎么设置为MTS格式?
    现在问题大了,我是在WIN2003上安装的ORACLE8.1.6,用了几天都是好的,现在把机器重启了一遍,ORACLE就不能用了,用SQL PLUS登陆提示:ORACLE NOT AVILABLE,郁闷啊。算了,再开个贴问问吧。