有一天一台SQL 2019 主機安裝CU27後,SQL AGENT無法啟動,查看SQLAGENT.OUT記錄檔錯誤如下
2024-08-06 12:00:08 - ! [298] SQLServer 錯誤: 208,無效的物件名稱 'syssubsystems'。 [SQLSTATE 42S02] (ConnCacheSubsystems)
2024-08-06 12:00:08 - ! [449] 無法列舉子系統 (原因: 無效的物件名稱 'syssubsystems'。 [SQLSTATE 42S02] (錯誤 208))
再安裝CU28也是一樣問題無法啟動。
於是找了另外一台正常的DB查看,確實有syssubsystems這個資料表存在。
直接轉出create語法在有問題的那台DB把資料表建起來,重啟SQL AGENT服務就正常了。
CREATE TABLE [dbo].[syssubsystems](
[subsystem_id] [int] NOT NULL,
[subsystem] [nvarchar](40) NOT NULL,
[description_id] [int] NULL,
[subsystem_dll] [nvarchar](255) NULL,
[agent_exe] [nvarchar](255) NULL,
[start_entry_point] [nvarchar](30) NULL,
[event_entry_point] [nvarchar](30) NULL,
[stop_entry_point] [nvarchar](30) NULL,
[max_worker_threads] [int] NULL
) ON [PRIMARY]
GO
重啟後,這個資料表就會自動長出一些資料。
看了二篇文章似乎都跟msdb有做什麼變動造成的。回想一下為什麼有這個錯,我有改過msdb嗎?? 好像也沒有...
https://www.dbaservices.com.au/the-ssis-subsystem-failed-to-load/
The problem is most likely that the location of your SQL Server installation directory differs from that of the old serve
https://byronhu.wordpress.com/2011/07/04/sql-agent-job-%E6%9A%AB%E5%81%9Csuspend/
因為從原來全部安裝在 C:\ 的 SQL Server 備份 msdb 後,restore 到安裝在 D:\ 的 SQL Server,除要注意 SQL Server 的 Build No 外,若有 Job 呼叫到外部子系統(例如 SSIS、Replication…等),也要一併注意 msdb.dbo.syssubsystems 的設定
二篇都說到執行,但我是連這個資料表都沒有,就直接重建了。
use msdb
go
delete from msdb.dbo.syssubsystems
exec msdb.dbo.sp_verify_subsystems 1
go