﻿# 解決 SQL Server 資料庫無法啟用 Service Broker 的問題

我們今天有個案子遇到一個很緊張的狀況，因為正式機的 SQL Server 資料庫沒人管一段時間了 (因為網站還沒正式對外上線)，結果資料庫的交易記錄竟然把硬碟給塞爆了，這導致資料庫再也無法寫入資料而網站也自然無法使用，我們得知狀況後立即告知負責管理資料庫的 DBA 處理狀況。

由於透過 T-SQL 清除交易記錄失敗 (也許是硬碟已滿的關係)，他就試著直接將 \*.ldf 交易記錄檔直接刪除，再將 \*.mdf 掛回資料庫，但掛回去之後卻讓我們原本運作的 Service Broker 失效了。

這時用我常用的 T-SQL 語法卻無法啟用資料庫的 Service Broker 功能，發生的錯誤訊息如下：

**無法在資料庫 "<DBName>" 中啟用 Service Broker，因為資料庫 (<GUID>) 中的 Service Broker GUID 與 sys.databases (<GUID>) 中的不相符。**

英文的錯誤訊息是：

**Cannot enable the Service Broker in database "<DBName>" because the Service Broker GUID in the database (<GUID>) does not match the one in sys.databases (<GUID>).**

以下是我經常用來啟用 Service Broker 的 T-SQL 語法 ( ENABLE\_BROKER )：

```
USE [master]GOALTER DATABASE [YourDBName] SET  SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE [YourDBName] SET  SINGLE_USER GOALTER DATABASE [YourDBName] SET ENABLE_BROKER GOALTER DATABASE [YourDBName] SET  MULTI_USER GO
```

但由於 GUID 不一致，原本的 Service Broker 已經無法使用了，這時必須設定一組新的 Service Broker 才行，所以必須修改成以下 T-SQL 語法 ( NEW\_BROKER )：

```
USE [master]GOALTER DATABASE [YourDBName] SET  SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE [YourDBName] SET  SINGLE_USER GOALTER DATABASE [YourDBName] SET NEW_BROKER GOALTER DATABASE [YourDBName] SET  MULTI_USER GO
```

問題就迎刃而解。

**相關連結**

-   [ALTER DATABASE SET 選項 (Transact-SQL)](http://technet.microsoft.com/zh-tw/library/bb522682.aspx)
