前陣子協助客戶啟用 SQL Server 保存工作階段 (SessionState) 狀態資料過程中,客戶提到 正式環境(Production) 有啟用 AlwaysOn 可用性群組。 而在 啟用 SQL Server 保存工作階段 所建立的資料庫,會建立 SQL Agent Job,定期刪除過期資料 (DeleteExpiredSessions)。 因為 Secondary replica database 為 ReadOnly,故會得到錯誤訊息:


Failed to update database "ASPState" because the database is read-only


透過 SSMS 展開該資料庫 (預設名稱為 ASPState,若建立過程中,有自訂名稱則請選擇正確的資料)。在 SQL Server Agent > 作業 (Job) >看見 ASPState_Job_DeleteExpiredSessions 作業。





右鍵點選該 ASPState_Job_DeleteExpiredSessions >  屬性 (Property),可以看見詳細工作事項




點選步驟 > 編輯,即可以看見執行刪除的命令

EXECUTE DeleteExpiredSessions





您可以修改該語法如下:

IF sys.fn_hadr_is_primary_replica('ASPState') = 1

BEGIN

     EXECUTE DeleteExpiredSessions

END




如此一來,若執行 Job 的位置是 Secondary replica database,就不會產生錯誤訊息



參考資料

1.  ASPState Database on SQL AlwaysOn Availability Group