由 sp_MSdetect_nonlogged_shutdown 掩蓋的複制錯誤返回“字元串或二進制數據將被截斷”
我們的一項複製作業在第 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 發布了一個更新檔(不確定是否會這樣做),但這是一個快速修復:
- 獲取並保存此程序的原始碼
[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. 照常使用服務控制台啟動實例