天天看點

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

至此困擾兩天的問題得以解決!

繼續閱讀