在 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

相關連結

  

此文章由 will 發表於 2008/12/19 下午 02:42:58

永久連結 | 評論 (1) | 此文章的RSSRSS comment feed |

分類: SQL Server | 系統管理

標籤:

收藏:

相關文章

評論

十二月 19. 2008 16:23

rachen

之前用過另外一種作弊的方法,先建立陰影複製,再去 copy 陰影複製中的 mdf 跟 ldf ,這樣可以在資料庫不卸離的狀態進行 copy~

rachen tw

新增評論


(將顯示您的Gravatar圖示)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



線上預覽

二月 9. 2010 13:31