我在開始事務並嘗試提交在SQL Server上啓動的事務時遇到了問題。SQL Server和Oracle之間的分佈式事務
DECLARE @return_value int,
@ERROR_MESSAGE nvarchar(2000)
BEGIN TRANSACTION
EXEC @return_value = [dbo].[SEND_EMAIL]
@SUBJECT = N'subject',
@BODY = N'body',
@RECEIVERS = N'[email protected]',
@ERROR_MESSAGE = @ERROR_MESSAGE OUTPUT
SELECT @ERROR_MESSAGE AS N'@ERROR_MESSAGE'
COMMIT TRANSACTION
SELECT 'Return Value' = @return_value
GO
,並返回這一點: 「無法在交易中爭取」
OLE DB提供程序 「OraOLEDB.Oracle」 鏈接服務器 「linked_server」 返回的消息。
(1行(S)的影響)
消息3930,級別16,狀態1,第16行
當前事務無法提交,無法支持寫入日誌文件的操作。回滾事務。(1行(一個或多個)受影響)
消息3998,級別16,狀態1,行在一批結束檢測3
提交的事務。事務回滾。
在SQL Server中我的存儲過程是這樣的:
BEGIN TRY
EXECUTE('Call Schema.Package.StoredProcedure(?,?,?,?,?)', @subject, @body, @receivers, @vcSendBy, @ERROR_MESSAGE OUT) AT [linked_server]
END TRY
BEGIN CATCH
SET @ERROR_MESSAGE = error_meessage();
END CATCH
這項工作沒有BEGIN TRANSACTION和COMMIT,但我不知道爲什麼。
在此先感謝。
爲什麼您使用交易發送電子郵件?事務用於保持數據處於一致狀態。發送電子郵件的操作不應改變數據庫狀態。 –
uncommitable事務是我在Jdeveloper 12c中的一個callablestament中的同一個問題,當我試圖獲取一些參數時,上面的代碼是一種手動重現問題的方法 – csuazo
我解決了我在Oracle中執行存儲過程的問題,在我的SQL Server中的存儲過程中,我調用該函數 – csuazo