【茶包射手日記】Reporting Service訂閱呈現Pending,無法寄送郵件

Reporting Service(SSRS)有個訂閱功能,允許針對特定報表指定查詢參數、收件對象以及排程時間,建立訂閱(Subscription)後可定期用電子郵件寄日報表、週報表給相關人員,十分方便。

接獲報案,某張日報表設有兩個訂閱,每天先發預覽版給檢核人員,方便有錯緊急更正,15分鐘後再發正式版給長官。遇到狀況為預覽版正確寄出,正式版的訂閱項目執行狀況呈現 PENDING,收件者未收到信件。

找到 SSRS Log(%programfiles%\Microsoft SQL Server\<SQL Server Instance>\Reporting Services\LogFiles),查到寄送正式版訂閱時有存取被拒錯誤,訊息裡出現某個離職同事的 AD 帳號。推敲原因是建立該訂閱的同事離職,擁有者 AD 帳號失效,導致訂閱無法執行。但有點很可疑,AD 理在上個月底失效,訂閱仍正常跑了十來天。

有趣的是,SSRS 的訂閱管理介面查不到導致 PENDING 的原因(SQLAgent,看不出訂閱的擁有者是誰,也無從修改。被迫直接查詢 SSRS 資料庫,由 dbo.Subscriptions 查出該訂閱的 OwnerID,比對 dbo.Users UserID,證實正式版的 OwnerID 屬於職離同事,與預覽版 OwnerID 不同,這解釋兩個訂閱為何一個成功一個失敗。訂閱管理介面看不到也無法修改擁有者,試著重新儲存訂閱則因擁有者 AD 帳號不存在而失敗,感覺換掉 Subscription.OwnerID 是最直覺有效的解法,但直接改資料又覺得毛毛的。

最後查到這篇 MSDN 部落格文章(情境類似,也提到 AD 失效幾天後才發作的現象),看到微軟的 RD 也這麼幹,我就放心了,Just Do It!

DECLARE @OldUserID uniqueidentifier
DECLARE @NewUserID uniqueidentifier
SELECT @OldUserID = UserID FROM dbo.Users WHERE UserName = 'DOMAINA\OldUser'
SELECT @NewUserID = UserID FROM dbo.Users WHERE UserName = 'DOMAINA\NewUser'
UPDATE dbo.Subscriptions SET OwnerID = @NewUserID WHERE OwnerID = @OldUserID
歡迎推文分享:
Published 15 November 2016 07:31 AM 由 Jeffrey
Filed under:
Views: 2,795



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<November 2016>
SunMonTueWedThuFriSat
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication