【发布时间】:2017-04-16 08:16:01
【问题描述】:
我有问题:我有 1 台 sql 服务器已经在 Windows 中设置了 SQL Server 2014 Express,在 Linux 中在另一台服务器中设置了 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 数据库中。
我做过的事情是:
- 启用 MSDTC 服务(分布式事务协调器已启动)。
- 从控制面板启用网络 DTC 访问,将组件服务设置为“允许入站”等。
- 我的“OracleMTSRecoveryService”正在我的服务列表中运行。
请帮我解决这个问题。我真的很感激。 非常感谢。
安迪
【问题讨论】:
标签: sql-server oracle oracle11g transactions linked-server