Sql-Server

由 sp_MSdetect_nonlogged_shutdown 掩蓋的複制錯誤返回“字元串或二進制數據將被截斷”

  • August 3, 2021

我們的一項複製作業在第 3 步失敗,該步驟執行sp_MSdetect_nonlogged_shutdown,返回一個*‘String or binary data would be truncated’。這當然使我們走上了試圖在數據庫中找到問題的道路。但是,我們比較了這兩個數據庫,它們是相同的。據我所知,該錯誤實際上是sp_MSdetect_nonlogged_shutdown*中的一個錯誤。

最終,我再次檢查了作業,第 2 步也失敗並拋出了一個小型轉儲。當我們查看轉儲時,它說:

執行緒試圖讀取或寫入它沒有適當訪問權限的虛擬地址

執行作業的 id 是一個 SQL id,即 sysadmin,步驟 (2) 是在代理服務帳戶下執行的。服務帳戶有權訪問快照目錄。我們有多個使用相同安全設置的其他復製作業,它們執行良好。

SQL 版本:

Microsoft SQL Server 2016 (SP2-GDR) (KB4532097) - 13.0.5102.14 (X64) 2019 年 12 月 31 日 22:39:35 版權所有 (c) Microsoft Corporation Enterprise Edition:Windows Server 2016 Standard 上基於核心的許可(64 位) 10.0(內部版本 14393:)(管理程序)

有人知道我在哪裡可以找到權限錯誤嗎?或者我可以使用哪些步驟來縮小範圍?

雖然 MS 發布了一個更新檔(不確定是否會這樣做),但這是一個快速修復:

  1. 獲取並保存此程序的原始碼

[distribution].[sys].[sp_MSdetect_nonlogged_shutdown] 2. 編輯原始碼並找到變數@message,將其長度更改為4000。然後在臨時表#JobHistory 中找到列message 並執行相同操作 3. 在管理模式下從 CMD 以單一模式啟動 SQL Server

path_to_binary\sqlservr.exe -m"SQLCMD" 4. 打開另一個控制台視窗並啟動 sqlcmd 以連接到實例

sqlcmd -S . -U sa -P 5. 將目錄置於讀寫狀態

USE mssqlsystemresource GO

alter database mssqlsystemresource set read_write GO 6. 粘貼修改後的程式碼。 7. 將目錄恢復為只讀模式

alter database mssqlsystemresource set read_only GO 8. 關閉單模式實例

SHUTDOWN

GO 9. 照常使用服務控制台啟動實例

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