Sql-Server
連結伺服器記憶體不足
所以我有一個呼叫 AS400 連結伺服器的儲存過程。現在,儲存過程將成功執行。但是,它在 SQL 代理作業中使用,並且每次作業執行時,它都會給出
Linked Server has Run out of Memory
異常。為什麼它在作業環境中執行這一事實使其與作為原始 SQL 程式碼執行不同?我將如何解決/解決這個問題?
開發了一種解決方法,從批處理文件呼叫儲存過程並通過命令行執行它。詳細資訊可以在這裡找到,總結如下:
我對此進行了大量研究,但無濟於事。我發現的少數解決方案風險太大,無法在生產機器上嘗試,因此我想出了一種替代方法。我創建了一個包含要執行的 SQL 命令的批處理文件,然後將其執行插入到伺服器中已經存在的作業計劃中。我做了這樣的事情:
- 在標准文本文件中,我使用以下程式碼來執行要呼叫的儲存過程:
sqlcmd -Q “exec ServerName.DatabaseName.dbo.ProcedureName” timeout /t 5
這允許通過命令行從系統執行儲存過程。超時用於測試目的以查看日誌,但不是必需的。 2. 在 Job 命令中,我編寫了以下行來查找批處理文件並相應地執行:
exec master..xp_cmdshell ‘filePath\batchFileName.bat
這再次從系統級別呼叫,以在給定路徑上以給定名稱執行批處理文件。 3. 在儲存過程中,我放置了列印語句,這些語句被記錄在作業歷史記錄中以正確記錄執行細節以進行審計。從那以後它就沒有失敗過。
那可能是權限問題。當作為作業步驟執行時,程式碼在 SQL Server 代理服務帳戶下執行。當您自己執行它時,它會在您的帳戶下執行。
確保 QSL 伺服器服務帳戶在連結伺服器上具有適當的權限。您也可以嘗試通過使用來模擬該帳戶
EXECUTE AS LOGIN='Domain\ServiceAccount';
在執行您的程式碼之前。這可能會揭示額外的錯誤細節,並且應該使故障排除更容易。