Microsoft 發佈 Microsoft SQL Server 2012 修正成一個可下載的檔案。 因為修正程式是累加的,所以每個新發行版本本都包含舊版 SQL Server 2012 修正版本中包含的所有修復程式及所有安全性修正程式。
徵狀
請試想下列案例:
-
您可以在 Microsoft SQL Server 2012 中建立一個或多個資料品質用戶端的資料品質專案。
-
您已安裝 SQL Server 2012 (SQL Server 2012 CU1)的累積更新1,然後執行 DQSInstaller 檔案,以升級 Data Quality Services (DQS)目錄並新增物件。
-
您嘗試使用資料品質用戶端刪除其中一個已建立的資料品質專案。
在這種情況下,資料品質用戶端會停止回應,而 SQL Server 資料庫引擎會進入無限迴圈。 此外,sqlservr 程式也會遇到高 CPU 使用量。 注意事項
-
若要從此問題復原,請重新開機資料品質用戶端和 DQS。
-
只有在您安裝 SQL Server 2012 CU1 之前建立的資料品質專案,才會發生此問題。
原因
之所以會發生這個問題,是因為更新迴圈計數器不正確,導致系統儲存程式中發生無限迴圈。注意這個問題是由 SQL Server 2012 CU1 中的回歸所造成。
解決方案
累積更新資訊
SQL Server 2012 的 Service pack 資訊
若要解決此問題,請取得最新的 SQL Server 2012 service pack。如需詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
2755533 如何取得最新的 SQL Server service pack 2012
SQL Server 2012
此問題的修正程式是在 SQL Server 2012 的累積更新2中第一次發行。如需如何取得此 SQL Server 累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
2703275 SQL Server 2012 的累積更新套件2注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
2692828 在發行 SQL Server 2012 之後發行的 SQL Server 2012 組建
因應措施
若要暫時略過這個問題,請使用下列其中一個方法。方法 1若要新增可讓儲存程式無限迴圈繼續並正確結束的啞元程式,請依照下列步驟進行:
-
執行下列查詢,找出您嘗試刪除之受影響之專案的架構名稱:
SELECT 'KnowledgeManagement'+CAST(ID AS NVARCHAR) AS SchemaName, Name FROM DQS_MAIN.dbo.A_KNOWLEDGEBASE WHERE TYPE=2
-
使用傳回的 SchemaName 值,然後在 SQL Server Management Studio 中執行類似下列所示的語句,以提供相符的架構名稱和資料品質專案識別碼。 系統會針對架構及對應的資料品質專案建立新的虛擬程式。 因此,無限迴圈會正常運作。
USE DQS_PROJECTSGOCREATE PROCEDURE DQProject<ID>.NewIndexParseTrigramsFromLexiconAS BEGINPRINT 'THIS IS A DUMMY PROCEDURE TO MAKE DELETE WORK for Microsoft KB Article 2705571';END
注意 <識別碼> 代表所要刪除之資料品質專案的內部識別碼。
-
確認已從資料品質用戶端(如預期)刪除資料品質專案。
方法 2如果您必須快速終止迴圈程式以節省 CPU 資源,請執行下列語句來找出正確的會話。 不過,取消迴圈程式並不會乾淨地刪除資料品質專案。 下列 Transact-sql 語句可協助識別及終止正確的會話。 如果正在執行多個來自資料品質用戶端的會話,您可能必須多次執行語句:
DECLARE @session smallint, @text nvarchar(2000), @killcommand nvarchar(200)SELECT TOP 1 @session=s.session_id, @text=st.textFROM sys.dm_exec_sessions sFULL OUTER JOIN sys.dm_exec_requests r ON s.session_id=r.session_idCROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS stWHERE program_name like 'DQ Services Client: Client Id = %, KB Id = %, Proxy = KnowledgebaseManagementEntryPointClient'AND s.status='running';SELECT 'Killing this DQS session:', @session SessionID, @text QueryText;SET @killcommand=N'Kill '+ cast(@session as nvarchar)+';'EXEC sp_executesql @killcommand;
注意: 如果您使用方法2來終止 DQS 連線,您可能會在資料品質用戶端中收到下列錯誤訊息:
SQL Server Data Quality Services--------------------------------------------------------------------------------<MessageId>:發生 ApplicationUnhandledExceptionAn 未處理的例外狀況。 如需更多詳細資料,請參閱 Data Quality Services 用戶端--------------------------------------------------------------------------------記錄 SqlClient。 SqlException (0x80131904):目前命令發生嚴重錯誤。 結果(如果有的話)應該捨棄。
狀態
Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。
參考
如需如何升級 DQS 的詳細資訊,請前往下列 Microsoft TechNet 網站: