本文提供在 Microsoft BizTalk Server 中連接到 BizTalkMsgBoxDb 資料庫時,解決 SQL Server 問題的資訊。
原始產品版本: BizTalk Server
原始 KB 編號: 917845
徵兆
在 BizTalk Server 中,當您嘗試連線到 BizTalkMsgBoxDb 資料庫時,可能會遇到封鎖、死結狀況或其他Microsoft SQL Server 問題。
原因
如果有下列一或多個條件成立,即可能發生此問題:
- 資料庫上已啟用 [
BizTalkMsgBoxDb] 選項。 - 資料庫] 選項。
- 最大平行處理度 選項設定為 1 以外的數值,針對此資料庫或裝載此資料庫的 SQL 實例。
- 當 BizTalk Server 正在處理數據時,您要重組或重建資料庫中的
BizTalkMsgBoxDb索引。
解決方案 1:停用 [自動建立統計數據] 選項和 [自動更新統計數據] 選項
若要解決此問題,請停用 SQL Server 中資料庫的 [自動建立統計數據 ] 和 [ 自動更新統計數據 ] 選項 BizTalkMsgBoxDb 。
解決方案 2:將平行處理原則的最大程度選項設定為 1
若要解決此問題,請在資料庫設定或裝載此資料庫的 SQL 實例中,將平行處理原則的最大程度選項設定為 BizTalkMsgBoxDb。
解決方案 3:當 BizTalk Server 正在處理數據時,請勿重建索引
若要解決此問題,請勿執行 bts_RebuildIndexes 預存程式或任何在 BizTalk Server 處理數據時重建 BizTalk Server 資料庫中索引的 SQL 命令。
注意
不支持重組 BizTalk Server 資料庫中的索引。
bts_RebuildIndexes預存程式
重建資料庫中索引 BizTalkMsgBoxDb 的唯一支援方法是執行 bts_RebuildIndexes 預存程式。 在 BizTalk Server 2006 和更新版本上,您可以執行 dtasp_RebuildIndexes 預存程式來重建資料庫中的 BizTalkDTADb 索引。
大部分的 BizTalk 索引是以 GUID 為基礎。 許多測試都顯示,只要未掃描數據表,GUID 型索引就能比 BizTalk 特定工作負載的身分識別型索引執行得更好。 這可能會導致碎片化。 不過,由於數據流以穩定的速度進出數據表,因此分散可能不會造成任何問題。 如果預期資料庫中會累積大量BizTalkMsgBox數據,您可以在計劃中的停機時間定期重建索引。 相同的指導方針適用於追蹤資料庫。
您可以使用 DBCC DBREINDEX SQL 命令,在其他 BizTalk Server 資料庫中重建索引。 如需如何使用 DBCC DBREINDEX SQL 命令的範例,請以滑鼠右鍵按兩下 bts_RebuildIndexes 預存程式,然後按兩下 [ 屬性]。
Microsoft只支援在 BizTalk Server 停機期間重建資料庫索引。 重建索引之前,您應該停止所有主機實例和 SQL Server Agent。 當您在 BizTalk Server 2006 和更新版本中執行 bts_RebuildIndexes 預存程式時,您可能會收到下列其中一個錯誤訊息:
錯誤訊息 1
Msg 5239, Level 16, State 1, Procedure bts_RebuildIndexes, Line 4 無法處理物件 ID 674101442 (物件 'TrackingData')
此資料庫一致性檢查程式 (DBCC) 命令不支援這種物件。錯誤訊息 2
訊息 5239、層級 16、狀態 1、程式bts_RebuildIndexes、第 4 行無法處理物件標識符722101613(物件 'TrackingData'),因為此 DBCC 命令不支援此類型的物件。
發生此問題的原因是 TrackingData 物件是 BizTalk Server 2006 和更新版本中的檢視。 若要解決此問題,請執行下列動作,然後執行 bts_RebuildIndexes 預存程式:
將預存程式中的
bts_RebuildIndexes下列這一行註解掉。DBCC DBREINDEX ('[dbo].[TrackingData]') WITH NO_INFOMSGS將下列幾行新增至
bts_RebuildIndexes預存程式。DBCC DBREINDEX ('[dbo].[TrackingData_0_0]') WITH NO_INFOMSGS DBCC DBREINDEX ('[dbo].[TrackingData_0_1]') WITH NO_INFOMSGS DBCC DBREINDEX ('[dbo].[TrackingData_0_2]') WITH NO_INFOMSGS DBCC DBREINDEX ('[dbo].[TrackingData_0_3]') WITH NO_INFOMSGS DBCC DBREINDEX ('[dbo].[TrackingData_1_0]') WITH NO_INFOMSGS DBCC DBREINDEX ('[dbo].[TrackingData_1_1]') WITH NO_INFOMSGS DBCC DBREINDEX ('[dbo].[TrackingData_1_2]') WITH NO_INFOMSGS DBCC DBREINDEX ('[dbo].[TrackingData_1_3]') WITH NO_INFOMSGS