天天看点

CMN_1022: [FreeTDS][SQL Server]The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION

以前一直把Oracle作为Informatica的目标库,一直很正常,没有出现什么问题,前几天有需求需要把sqlserver作为目标库,数据连接采用的odbc,当按往常配置好映射、会话、工作流后,执行如下报错:

消息代码: CMN_1022

消息: Database driver error...

CMN_1022 [

[FreeTDS][SQL Server]The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.

Database driver error...

Function Name : Commit

Database driver error...

Function Name : AutoCommitOff]

度娘谷歌各种查,也查阅了Informatica的问题库(https://search.informatica.com/KBHome)和微软的sqlserver社区,没有找到任何线索。

看来只能从报错信息分析,错误消息是说Informatica在执行完映射逻辑并提交目标库数据后,会自动追加COMMIT命令,以便完成交付任务,但此时却报由“COMMIT而没有相对应的BEGION,建议关闭AutoCommit”异常,说明问题应该出现在[AutoCommit]上,即系统Informatica隐式自动COMMIT上。

系统隐式自动COMMIT对于Oracle来说没有任何问题,因为Oracle需要显示的COMMIT以完成事务,但sqlserver既有显示BEGION COMMIT类型,同时也有自己的隐式COMMIT。

问题就出现在这里,Informatica自己的隐式COMMIT和sqlserver的两种模式都不匹配,与第一种比,少了BEGION,与第二种多了COMMIT,因此就报了关键字匹配的错误。

找到问题点,就好处理了,只要匹配sqlserver一种就可以,由于没有找到屏蔽Informatica自己COMMIT的控制项,我们采用了在数据连接对象定义的Connection Environment SQL属性里填写“BEGIN TRANSACTION”值方式,配置图如下:

CMN_1022: [FreeTDS][SQL Server]The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION

至此困扰两天的问题得以解决!

继续阅读