有時後我們為了要將資料庫的資料檔(*.mdf)與紀錄檔(*.ldf)複製出來,會需要先暫時卸離資料庫(Detach Database),因為卸離資料庫需要有資料庫的獨佔存取權,但是不管是在測試機或正式機上,資料庫往往都會因為還有連線存在導致資料庫無法卸離,對於這點我通常有兩種作法。
第一種:若連線不多的話,我會手動將現有連線強制關閉
只要跟要卸離的資料庫相關的連線都被清除了之後,就可以成功卸離資料庫了。
第二種:設定資料庫屬性的選項,將限制存取切換到 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
相關連結