Sql-Server

SQL 代理作業上的連結伺服器錯誤

  • February 2, 2017

我從 SQL Server 代理作業中收到以下錯誤。但是,如果我在作業中手動執行查詢,它可以正常工作。為什麼是這樣?只是需要 MSDTC 的 SQL 代理嗎?我不認為這是權限問題,因為作業在具有系統管理員角色的服務帳戶下執行。

資訊

以使用者身份執行:SERVERS\quinsql_sa。無法執行操作,因為連結伺服器“TestServer”的 OLE DB 提供程序“SQLNCLI10”無法開始分佈式事務。

$$ SQLSTATE 42000 $$(錯誤 7391)連結伺服器“TestServer”的 OLE DB 提供程序“SQLNCLI10”返回消息“事務管理器已禁用對遠端/網路事務的支持。”。$$ SQLSTATE 01000 $$(錯誤 7412)。步驟失敗。

涉及的版本是SQL Server 2008R2和SQL Server 2012。SQL Job在2008R2上

我以前沒有看到過這種情況,您可以手動執行查詢但不能作為代理作業執行似乎很奇怪。儘管SQL Server Central幾年前也有類似的文章,但這並不是聞所未聞的,但其中涉及一些相當複雜的查詢。

您要執行的查詢是什麼?

正如 Tom V 所說,了解您從哪個版本的 SQL Server 執行查詢以及連結伺服器連接的位置會很有幫助

當您手動執行查詢時:

  • 是代理工作正在做的一切嗎(代理工作不超過一個步驟)?
  • 您是否使用與執行代理作業相同的帳戶?

首先,值得檢查兩台伺服器上的 MSDTC 配置。我不知道在這種情況下是否會這樣,但最好先嘗試消除簡單的事情。看看這些網站以獲得一些細節:

https://stackoverflow.com/questions/10130767

MSDN

好的。因此 SQL 代理作業正在呼叫儲存過程。該儲存過程正在執行INSERT SELECT查詢。

執行INSERT SELECT儲存過程的外部工作正常。

執行儲存過程導致錯誤

無法執行操作,因為連結伺服器“TestServer”的 OLE DB 提供程序“SQLNCLI10”無法開始分佈式事務

為了解決這個問題,我必須在呼叫 SQL 作業/儲存過程的伺服器上啟用 MSDTC。

我仍然不太確定為什麼 INSERT SELECT 查詢在儲存過程之外可以正常工作。

引用自:https://dba.stackexchange.com/questions/132363