无法登记交易

时间:2016-12-01 15:47:57

标签: sql-server oracle oracle11g transactions linked-server

我遇到问题:我有1个sql server已经在Windows中安装了SQL Server 2014 Express,在另一个服务器中安装了1个Oracle数据库服务器11g。

现在我想通过链接服务器将数据从SQL服务器插入到Oracle数据库中。 我能够成功地进行SELECT,UPDATE,INSERT。 但是当我尝试执行具有事务的存储过程时,我收到以下错误:链接服务器“UGOV”的OLE DB提供程序“OraOLEDB.Oracle”返回消息“无法在事务中登记。”。

程序的结构如下:

USE [payroll]
GO
/****** Object:  StoredProcedure [dbo].[InsertPayrollUGOVDocumentsHead]    Script Date: 12/1/2016 4:27:28 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

--EXEC master.dbo.sp_serveroption @server='UGOV', @optname = 'remote proc transaction promotion', @optvalue = 'false' 
--GO 

ALTER PROCEDURE [dbo].[InsertPayrollUGOVDocumentsHead]
(
@ID_KARAKTERISTIKE INT,
@MUAJI INT,
@VITI INT,
@USER_ID VARCHAR(50)
)
 AS 
BEGIN
BEGIN  TRY
 BEGIN DISTRIBUTED TRANSACTION insertDocumentsHead

INSERT INTO........
...
....

 COMMIT TRANSACTION insertDocumentsHead
     PRINT 'Transaction success'

END TRY
BEGIN CATCH
     ROLLBACK TRANSACTION insertDocumentsHead
     PRINT 'Transaction wrong'
END CATCH
END

如果我在没有事务的情况下执行查询就可以了。当我使用事务时,我得到错误。

我的想法是从我网站上的一个按钮调用此过程,并将数据插入到oracle DB中。

我所做的事情是:

  1. 启用MSDTC服务(分布式事务处理协调器已启动)。
  2. 从控制面板启用网络DTC访问,将组件服务启用为“允许InBound”等。
  3. 我的'OracleMTSRecoveryService'正在我的服务列表中运行。
  4. 请帮我解决这个问题。我真的很感激。 非常感谢你。

    岸堤

1 个答案:

答案 0 :(得分:1)

在“链接服务器”中,进入“服务器”选项,并将启用对分布式事务RPC的升级设置为 False