對於分離一個資料庫來說,我們可以用Manage Studio介面或者預存程序。但是對於每一種方法都必須保證沒有使用者使用這個資料庫.接下來所講的都是對於用命令來分離或附加一個資料庫。對於用Manage Studio自己看著介面操作就可以應付了。
分離資料庫
對於用預存程序來分離資料庫,如果發現無法終止使用者連結,可以使用ALTER DATABASE命令,並利用一個能夠中斷已存在連結的終止選項來把資料庫設定為SINGLE_USER模式,設定為SIGLE_USER代碼如下:
ALTER DATABASE [DatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
下面是分離資料庫的CMD命令
EXEC sp_detach_db DatabaseName
一旦一個資料庫分離成功,從SQL Server角度來看和刪除這個資料庫沒有什麼區別。
附加資料庫
對於附加資料庫,可以使用sp_attach_db預存程序,或者使用帶有FOR ATTACH選項的CREATE DATABASE命令,在SQL Server2005或更高的版本中推薦使用後者,前者是為了向前相容,它正在逐漸淘汰,而後者更提供更多對檔案的控制。
CREATE DATABASE databasenameON (FILENAME = 'D:\Database\dbname.mdf')FOR ATTACH | FOR ATTACH_REBUILD_LOG
然而對於這樣的附加,我們要注意幾個地方。因為涉及到重建日誌。
1.對於一個讀/寫資料庫,如果含有一個可用的記錄檔,無論使用FOR ATTACH ,還是使用FOR ATTACH_REBULD_LOG,都是一樣,都不會對此資料庫重建記錄檔。如果記錄檔不可用或者物理上沒有該記錄檔,使用FOR ATTACH或FOR ATTACH_REBULID_LOG都會重建記錄檔,所以如果我們複製一個帶有大量記錄檔的資料庫到另一台伺服器中,就可以只複製.mdf檔案,不用複製記錄檔,然後使用FOR ATTACH_REBULD_LOG選項重建日誌。條件是這台伺服器將主要使用或只用改資料庫的副本進行讀操作。
2.對於一個唯讀資料庫,就有點區別了,如果記錄檔不可用,那麼就不能更新主檔案,所以也就不能重建日誌,因此當我們附加一個唯讀資料庫是,必須在FOR ATTACH從句中指定記錄檔。
如果使用附加資料庫重建了記錄檔。使用FOR ATTACH_REBUILD_LOG會中斷記錄備份鏈,進行這種操作之前最好做一次資料庫完全備份。
使用sp_detach_db預存程序一個好處就是可以保證一個資料庫是被乾淨的關閉,那記錄檔就不是附加資料庫所必須的,我們可以使用FOR ATTACH_REBUILD_LOG命令重建日誌,得到一個最小的記錄檔。也算是一種快速收縮一個大記錄檔的方法。
下一篇:SQL Server:移動系統資料庫
參考:SQL Server 2005 技術內幕-儲存引擎
Author:興百放
Web:Http://xbf321.cnblogs.com
2010.3.11.22:16