The Will Will Web

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

如何讓使用中的資料庫中斷所有連線以執行資料庫更新動作

最近有個專案由於需要對資料庫修正設定,必須開啟 SQL Server 2005 的查詢通知(Query Notification)功能,由於開啟查詢通知功能要啟用 Service Broker,而設定時需要中斷所有與該資料庫的連線才能設定成功,我們一般的實務作法是先將資料庫轉為「單人模式」再進行操作,但因為網站並沒有斷線,所以當透過 Management Studio 的 GUI 介面對資料庫切換至單人模式後,這個「單人」卻立即被網站的連線給搶走!

我最後的解決方法並不是先將 IIS 停機,而是透過先寫好的 T-SQL 指令碼批次執行所有動作,跟網站比賽搶人的速度,看是誰先搶到這個「單人」。 ^_^

如下 T-SQL 語法供參:

USE [master]

ALTER DATABASE [DBName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [DBName] SET SINGLE_USER;

-- 開始 -- 執行資料庫變更作業
ALTER DATABASE [DBName] SET ENABLE_BROKER;
-- 結束 -- 完成資料庫變更作業

ALTER DATABASE [DBName] SET MULTI_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [DBName] SET MULTI_USER;

總之就是先將資料庫轉成「單人模式」後,立即進行資料庫變更作業,然後再立即變回「多人模式」。