The Will Will Web

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

在 SQL Server 中如何成功卸離資料庫

有時後我們為了要將資料庫的資料檔(*.mdf)與紀錄檔(*.ldf)複製出來,會需要先暫時卸離資料庫(Detach Database),因為卸離資料庫需要有資料庫的獨佔存取權,但是不管是在測試機或正式機上,資料庫往往都會因為還有連線存在導致資料庫無法卸離,對於這點我通常有兩種作法。

第一種:若連線不多的話,我會手動將現有連線強制關閉

Management Studio - 活動監視器

只要跟要卸離的資料庫相關的連線都被清除了之後,就可以成功卸離資料庫了。

第二種:設定資料庫屬性的選項,將限制存取切換到 SINGLE_USER 單人模式

資料庫屬性的選項

將限制存取切換到 SINGLE_USER 單人模式

將資料庫切換到 SINGLE_USER 單人模式後,所有現有的連線就會被中斷,這樣一來也就可以成功卸離資料庫了。

而我也用之前 "查詢透過Management Studio 的GUI 所執行的T-SQL 指令" 文章所講的技巧,查出了 T-SQL 的用法,以後直接下 T-SQL 就可以成功卸離了。

1. 切換到 SINGLE_USER 單人模式

USE [master]
GO
ALTER DATABASE [DBName] SET  SINGLE_USER WITH NO_WAIT
GO
ALTER DATABASE [DBName] SET  SINGLE_USER 
GO

2. 卸離資料庫

USE [master]
GO
EXEC master.dbo.sp_detach_db @dbname = N'DBName', @skipchecks = 'false', 
                             @keepfulltextindexfile=N'true'
GO

之後若要附加資料庫可以用以下 T-SQL,預設附加上去後就是 MULTI_USER 多人模式了:

USE [master]
GO
CREATE DATABASE [DBName] ON 
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\DBName.mdf' ),
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\DBName_log.LDF' )
 FOR ATTACH
GO
若要手動將資料庫調回 MULTI_USER 多人模式也可以用以下 T-SQL 語法:
USE [master]
GO
ALTER DATABASE [DBName] SET  MULTI_USER WITH NO_WAIT
GO
ALTER DATABASE [DBName] SET  MULTI_USER 
GO

相關連結