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

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

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

如下 T-SQL 語法供參：

```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;
```

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