Applies To
SQL Server 2008 R2 Standard SQL Server 2008 R2 Standard Edition for Small Business SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Web SQL Server 2008 R2 Workgroup

Microsoft 將 Microsoft SQL Server 2008 R2 修正程式作為一個可下載檔案發佈。 由於修補是累積性的,每個新版本都包含了先前 SQL Server 2008 R2 修補釋版本中所有的熱修補與安全修補。

徵兆

請試想下列案例:

  • 你有一個Master Data Services (的 MDS) 模型和實體,在 2008 R2 SQL Server Microsoft 中擁有基於網域的屬性。 基於領域的屬性設計為自我指涉同一屬性。舉例來說,你有一個員工實體,其屬性為 ManagerName。 ManagerName 屬性指的是同一個員工實體本身。注意:經理也是一種員工。

  • 屬性上定義了一個導出階層,用以顯示該領域屬性的遞迴父子關係。

  • 你載入包含一個或多個循環參考的 MDS 暫存表的資料值。 此行為會產生圓形參考,屬性中的第一個節點不屬於圓圈。例如,以下資料模式顯示一個循環參考。 然而,Member1 會員的價值並不屬於這個圓圈:

    Member1 --manager 屬性--> Member2 --manager 屬性--> Member3 --manager 屬性--> Member2 --manager 屬性--> Member3

    insert into mdm.tblStgMemberAttribute(ModelName, EntityName, MemberType_ID, MemberCode, AttributeName, AttributeValue, Status_ID)Values ('EntityTest', 'ModelTest', 1, 'Member3', 'Manager', 'Member2', 0),('EntityTest', 'ModelTest', 1, 'Member2', 'Manager', 'Member3', 0),('EntityTest', 'ModelTest', 1, 'Member3', 'Manager', 'Member2', 0),('EntityTest', 'ModelTest', 1, 'Member2', 'Manager', 'Member1', 0)('EntityTest', 'ModelTest', 1, 'Member1', 'Manager', 'NULL', 0)
  • 你可以使用以下其中一種方法,透過 MDS 暫存程序將資料值載入實體:

    • 管理行政中心(Exec [mdm])。[udpStagingSweep] 程序,透過使用必要的參數來處理分階段資料。

    • 點擊 整合管理 以造訪 MDS 網站首頁。 在 匯入匯出 頁面的 「未批次暫存紀錄 」區塊標題下,點擊 齒輪圖示 以處理特定型號與版本的紀錄。

在此情境中,背景程序在暫存過程中可能遇到無限迴圈,當背景程序內部呼叫 [mdm]。[udpMember遞迴循環檢查] 程序。

原因

此問題發生是因為 udpStagingSweep 與 udpStagingMemberAttributeSave 程序會對每個暫存列呼叫一次 udpMemberRecursiveCircularCheck 程序。 此行為應檢查基於網域的屬性值,若暫存列與現有資料形成循環參考,則會回傳錯誤。 檢查完所有分階段排後,您會得到以下結果:

  • 無錯誤的分段列會被套用。

  • 有錯誤的分階段列會以錯誤代碼標示。

如果「症狀」部分描述的條件為真,則 [mdm]。[udpMemberRecursiveCircularCheck] 程序會無限循環,直到伺服器資源耗盡或發生逾時為止。

解決方案

累積更新資訊

SQL Server 2008 R2 Service Pack 1

這個問題的修正最早是在累積更新 4 中釋出的。 欲了解更多如何取得 SQL Server 2008 R2 SP1 累積更新套件的資訊,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:

2633146 SQL Server 2008 R2 服務包 1 累積更新包 4 備註:由於建置是累積式的,每個新修正釋版本都包含先前 SQL Server 2008 R2 SP1 修正釋包中包含的所有熱修補與安全修補。 我們建議您考慮套用包含此熱修正的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2567616 SQL Server 2008 R2 版本是在 SQL Server 2008 R2 服務包 1 發布之後釋出的版本

狀態

Microsoft 已確認<適用於>一節所列的 Microsoft 產品確實有上述問題。

因應措施 

若要解決這個問題,請使用下列其中一個方法:

  • 為了預防此問題,請遵循以下步驟:

    1. 在執行暫存程序前,手動檢查插入到暫存表中的成員資料值。

    2. 確保所有基於網域屬性的成員值不包含「症狀」區段中描述的循環參考

  • 當「症狀」部分描述的問題發生時,請依照以下步驟來修正:

    1. 找出正在無限迴圈中運行的會話。

    2. 結束會話以停止循環。

    3. 在循環參考再次處理前,從暫存表中刪除循環參考值。

注意事項

  • 要判斷要殺死哪個會話,請使用以下方法之一:

    • 在 Microsoft SQL Server Management Studio 中使用活動監控器。

    • 可從 sys.sysprocesses 或 sys.dm_exec_requests 動態管理檢視 (DMV) 中選擇,以識別 MDS 資料庫中 CPU 與時間快速增加的會話。 確保目前在會話中執行的查詢與「原因」區段描述的程序名稱相符。

  • 要識別目前執行的會話程序,請使用以下方法之一:

    • 在活動監控程序列表中,右鍵點擊每個程序 的詳細選 單。

    • 請使用以下其中一個參數:

      • DBCC 的 INPUTBUFFER (spid) 指令與會話 ID。

      • 當你使用 DMV 輸出時,SELECT * FROM sys.dm_exec_sql_text (sqlhandle) 函式,以及對應的 SQL handle 參數。

參考

欲了解更多如何在 SQL Server Management Studio 開啟活動監控器的資訊,請造訪以下 MSDN 網站:

如何在 SQL Server Management Studio 中開啟活動監控器欲了解更多關於 KILL 語法的資訊,請造訪以下 MSDN 網站:

關於 KILL 語法的一般資訊欲了解更多關於sys.dm_exec_requests車輛管理局的資訊,請造訪以下MSDN網站:

關於sys.dm_exec_requests車輛管理局的一般資訊欲了解更多關於sys.dm_exec_sql_text車輛管理局的資訊,請造訪以下MSDN網站:

關於sys.dm_exec_sql_text車輛管理局的一般資訊欲了解更多關於 DBCC INPUTBUFFER 指令的資訊,請造訪以下 MSDN 網站:

關於 DBCC INPUTBUFFER 指令的一般資訊欲了解更多關於 SQL Server 增量服務模型的資訊,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:

935897 SQL Server 團隊提供增量式服務模型,以提供針對回報問題的熱修補。欲了解更多關於 SQL Server 更新命名結構的資訊,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:

822499 Microsoft SQL Server 軟體更新套件的新命名架構欲了解更多軟體更新術語,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:

824684 描述 Microsoft 軟體更新所使用的標準術語說明

Need more help?

Want more options?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。