MSDTC,OLE DB 出错

博客讲述在特定环境下,通过JDBC调用存储过程时出现错误,提示服务器上的MSDTC不可用,且因OLE DB提供程序无法启动分布式事务导致操作未能执行,原因是存储过程中调用了特定SQL方法。

 环境如下,通过jdbc调用存储过程(procedure),出现如下错误:
 [SQLServer 2000 Driver for JDBC][SQLServer]服务器 'FILES-SERVER' 上的 MSDTC 不可用
 [SQLServer 2000 Driver for JDBC][SQLServer]该操作未能执行,因为 OLE DB 提供程序'SQLOLEDB' 无法启动分布式事务。
因为在存储过程中调用了如下的sql方法

None.gif   opendatasource ( ' SQLOLEDB ' , ' Data Source = 192.168.1.1;User ID = sa;Password =psstone ' )
所以就出现了上面的错误。因为存储过程调用的数据库其实是同一台服务器,把我把opendatasource方法去了,调试通过。可我还是不明白(在ms sql的查询分析器中,执行此存储过程没有问题,可为什么通过JDBC调用就会出现如上的错误? 02.gif)。 noidea.gif假如真的是调用另一个服务器上的数据,那怎么办呢?opendatasource方法是通过链接服务来调用分布式事务(调用另一台数据库服务获取数据),可能是因为OLE DB 提供程序'SQLOLEDB' 无法启动分布式事务,那么用什么样子的程序(驱动程序)能启动分布式事务呢?

 等把这个东东做完了,在来好好研究一下吧,时间有限。 red_smile.gif 请赐教,:)

下面是我找到的一些资料, http://community.youkuaiyun.com/Expert/topic/2889/2889213.xml
http://community.youkuaiyun.com/Expert/topic/2835/2835706.xml
EXEC SP_HCP請假資料作廢 'Pre250218143','T00024','2025-02-03 08:00:00','2025-02-07 17:00:00','L26' -- EXEC HCPSalary.dbo.SP_HCP請假資料作廢 'Pre240903202', 'U173276', '2024/08/29 08:00', '2024/09/11 17:00' , 'L10' ALTER PROC [dbo].[SP_HCP請假資料作廢] @P_SERNO VARCHAR(20), --請假單號 @P_ID_NO_SZ varchar(10), --員工代號(必填) @P_DATETIME_B varchar(20), --請假日期時間(起)格式西元YYYY/MM/DD HH24:MI (必填) @P_DATETIME_E varchar(20), --請假日期時間(迄)格式西元YYYY/MM/DD HH24:MI (必填) @P_REASON varchar(5) -- 假別 (必填) AS BEGIN DECLARE @P_SEGMENT_NO VARCHAR(10)='9999', --公司id(必填) @P_ERROR_TYPE VARCHAR(4)='MSG' --訊息類別 'MSG'多語訊息 'CODE'代碼 'FULL' 代碼加訊息 預設為多語訊息 DECLARE @P_ERROR VARCHAR(1000)='' --錯誤原因 ------------ 向HCP資料庫中INSERT資料 Print '@P_SERNO的值是:' + @P_SERNO Print '@P_ID_NO_SZ的值是:' + @P_ID_NO_SZ Print '@P_DATETIME_B的值是:' + @P_DATETIME_B Print '@P_DATETIME_E的值是:' + @P_DATETIME_E Print '@P_REASON的值是:' + @P_REASON Print '@P_SEGMENT_NO的值是:' + @P_SEGMENT_NO Print '@P_ERROR_TYPE的值是:' + @P_ERROR_TYPE DECLARE @P_DATETIME_B_1 VARCHAR(30) = CONVERT(VARCHAR, @P_DATETIME_B, 120) DECLARE @P_DATETIME_E_1 VARCHAR(30) = CONVERT(VARCHAR, @P_DATETIME_E, 120) Print '@P_DATETIME_B_1:' + @P_DATETIME_B_1 Print '@P_DATETIME_E_1:' + @P_DATETIME_E_1 DECLARE @P_DATETIME_B_2 DATETIME = CAST(@P_DATETIME_B_1 AS DATETIME) DECLARE @P_DATETIME_E_2 DATETIME = CAST(@P_DATETIME_E_1 AS DATETIME) --Print '@P_DATETIME_B_2:' + @P_DATETIME_B_2 --Print '@P_DATETIME_E_2:' + @P_DATETIME_E_2 EXECUTE ('BEGIN hcp.P_ABSENCE_DELETE_TW(?,?,?,?,?,?,?,?); END;', @P_SERNO, @P_ID_NO_SZ, @P_DATETIME_B_2, @P_DATETIME_E_2, @P_REASON, @P_SEGMENT_NO, @P_ERROR output, @P_ERROR_TYPE ) AT SAL_HCPPROD Print @P_ERROR END@P_SERNO的值是:Pre250218143 @P_ID_NO_SZ的值是:T00024 @P_DATETIME_B的值是:2025-02-03 08:00:00 @P_DATETIME_E的值是:2025-02-07 17:00:00 @P_REASON的值是:L26 @P_SEGMENT_NO的值是:9999 @P_ERROR_TYPE的值是:MSG @P_DATETIME_B_1:2025-02-03 08:00:00 @P_DATETIME_E_1:2025-02-07 17:00:00 OLE DB provider "OraOLEDB.Oracle" for linked server "SAL_HCPPROD" returned message "ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'P_ABSENCE_DELETE_TW' ORA-06550: line 1, column 7: PL/SQL: Statement ignored". 訊息 7215,層級 17,狀態 1,程序 SP_HCP請假資料作廢,行 42 [批次開始行 0] Could not execute statement on remote server 'SAL_HCPPROD'. 完成時間: 2025-06-06T16:35:03.2292607+08:00
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值