The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

解決 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]
GO
ALTER DATABASE [YourDBName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [YourDBName] SET SINGLE_USER
GO
ALTER DATABASE [YourDBName] SET ENABLE_BROKER
GO
ALTER DATABASE [YourDBName] SET MULTI_USER
GO

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

USE [master]
GO
ALTER DATABASE [YourDBName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [YourDBName] SET SINGLE_USER
GO
ALTER DATABASE [YourDBName] SET NEW_BROKER
GO
ALTER DATABASE [YourDBName] SET MULTI_USER
GO

問題就迎刃而解。

相關連結