如何(不)管理 SSRS 報告執行歷史保留
SQL Server 2008 R2 Reporting Services 會記錄誰執行了哪些報告,儲存在 ReportServer 數據庫的 ExecutionLogStorage 表中。該歷史數據的預設保留期為 60 天。
幾個月前,我想在我的幾個報告伺服器上增加保留期,所以我搜尋瞭如何做到這一點,並發現了幾篇不同的部落格文章,其中說你更新了 ReportServer 數據庫中的 ConfigurationInfo 表。具體來說,他們說您將“值”列設置為 Name = ‘ExecutionLogDaysKept’ 的行的保留天數,如果將值設置為 0,則執行歷史記錄將無限期保留。所以這就是我所做的,並很快忘記了它。
快進到今天早上,當我對 ExecutionLog 視圖執行 who-launched-what-report-when 查詢時,並立即返回沒有任何行。在調查過程中,我了解了一個 SSMS GUI,您還可以使用它來管理報告執行歷史記錄的保留;GUI 顯然更新了相同的 ConfigurationInfo 行,但它的標籤很明顯,將 ‘ExecutionLogDaysKept’ 值設置為 0 實際上轉換為“刪除早於 0 天的執行日誌條目”,或者基本上,“不保留任何今天之前的歷史”——與“無限期地保留歷史”截然相反。
對儲存過程 ExpireExecutionLogEntries 的檢查證實了這一點,該過程引用了“ExecutionLogDaysKept”值,其中註釋和程式碼本身清楚地表明指示無限期保留歷史的正確值是 -1,而不是 0。
這些部落格的作者將保持匿名,因為他們是我並不特別熟悉的 SQL 人員,因此我不應該如此愉快地遵循他們的建議。我想這篇文章主要是警告不要犯同樣的錯誤。但是,我確實有幾個問題:
- 有沒有其他人經歷過同樣的事情?
- 報告執行歷史保留管理在 SSRS 的後續版本中是否以相同的方式工作?
編輯:向那些未透露姓名的部落格作者道歉,因為錯誤的保留設置資訊似乎實際上源自2008R2線上圖書中的至少一個位置。它仍然存在於2016 年的 BOL 中——不確定是否仍然與底層程式碼斷開連接。送出了要求更正文件的 Microsoft Connect條目。
有趣的發現。直到我建構了一個使用 SSRS 執行歷史表作為報告下載計數的唯一來源的頁面,我才意識到這個設置。令我驚訝的是,有一天計數消失了。那時,我發現了 60 天保留的預設值。我記得在 GUI 中增加了保留設置,但我沒有設置為 0。
我重新設計了我的下載計數以儲存在自定義表中,並使用 SSRS 歷史記錄通過 SQL 代理作業每天更新,以消除任何其他意外。關於“0”完成的內容肯定存在衝突的文件。但是,如果您將保留天數設置為非常大的數字(幾百年),那麼這基本上是一個無限的保留期,應該可以實現您的目標。
是的,-1 是
ExecutionLogDaysKept
. 這就是我的設定。MSDN 文件對於 2012 及更早版本是不正確的,但對於 2014 及更高版本是正確的。轉到伺服器屬性(高級頁面) -顯示 2016 設置的報告服務。如果您將版本更改為 2014,您會看到它也顯示 -1。但是當你去 2012 或 2008 時,它說它是 0,這是不正確的。