當存放SQL Server數據庫的硬盤空間不足或性能、質量不佳時,數據庫情緒自然不會好。為了調動數據庫積極性,最好的辦法莫過於給數據庫找個寬敞、安全的新家。這等搬家的大事,絕不可輕視之。-推薦文章
我們知道,在新建一個數據庫的時候,我們會分別指定其數據文件(.mdf文件)以及事務日志文件(.ldf文件)存放的位置。所以數據庫搬家,也就是把這兩個文件安置到一個新地方去。
在SQL Server中,數據庫有兩大家族:用戶數據庫與系統數據庫。對於它們要分別采用不同的方法來實現。
一、用戶數據庫搬家
操作方法有以下兩種
方法1:在企業管理器中進行
(1)在企業管理器中選定要搬家的數據庫名,在其上單擊鼠標右鍵,出現如圖1所示對話框。
(2)選中“所有任務”,在其子菜單中單擊“分離數據庫”。
(3)將該數據庫的數據文件和日志文件從舊的位置(如D:\MSSQL\Data)拷貝到新的位置(如E:\SQLDataNew)。
(4)再在企業管理器中選中“數據庫”文件夾,在其上單擊鼠標右鍵,在出現的對話框中選中“所有任務”,在其子菜單中單擊“附加數據庫”。
(5)在出現的“附加數據庫”對話框中,選擇數據庫的兩個文件的新位置。
方法2:用SQL系統存儲過程sp_detach_db/sp_attach_db實現
(1)使用下面語句分離數據庫:
USE master
GO
EXEC sp_detach_db 'mydb'
GO
(2)將該數據庫的數據文件和日志文件從舊的位置拷貝到新的位置。
(3)使用下面語句重新附加數據庫:
USE master
GO
EXEC sp_attach_db
'mydb', 'E:\SQLDataNew\mydbdata.mdf', 'E:\SQLDataNew\mydblog.ldf''
GO
二、系統數據庫搬家
1.master數據庫搬家
(1)由於SQL Server每次啟動的時候都需要讀取master數據庫,因此必須在企業管理器中改變SQL Server啟動參數中master數據文件和日志文件的路徑。
在 SQL Server屬性的“常規”選項卡下面有一個叫做“啟動參數”的按鈕,單擊後可以看到所示的界面。
其中,-d用來指定master數據庫文件的路徑,而–l用來指定master數據庫日志文件的路徑。
刪除舊的master數據庫文件和日志文件的路徑,添加新的master數據文件和日志文件所在的路徑,如:
-dE:\ SQLDataNew \master.mdf
-lE:\ SQLDataNew \mastlog.ldf
(2)停止SQL Server服務,將master.mdf文件和mastlog.ldf文件拷貝到新的位置,如E:\ SQLDataNew文件夾中。
(3)重新啟動服務即可。
小技巧:如果在“啟動參數”添加的master數據庫文件和日志文件的路徑或文件名有誤,就會造成SQL Server啟動不起來。而此時想改正錯誤又因SQL Server啟動不了而重設不了“啟動參數”。其實這兩個文件路徑和文件名是放置在注冊表HKEY_LOCAL_MacHINE\SOFWARE\Microsoft\Miccrosoft SQL Server\你安裝SQL服務器的名\MSSQLServer\Parrmeters下的參數SQLArg1和SQLArg2中,修改這兩個參數的值即可。
2. msdb數據庫和model數據庫搬家
(1)對於msdb數據庫和model數據庫,我們不能在企業管理器中實現分離和附加,只能用sp_detach_db和sp_attach_db存儲過程來分離和附加這兩個數據庫。
其中,對於msdb數據庫,還應確保SQL Server代理當前沒有運行,否則sp_detach_db存儲過程將運行失敗,並返回如下消息:
“無法除去數據庫 'msdb' ,因為它當前正在使用。”
(2)調出如圖4所示的“啟動參數”對話框,添加新參數-T3608。這樣,啟動SQL Server,它就不會恢復除master之外的任何數據庫。
(3)重新啟動SQL Server,再用下面命令分離msdb或者model數據庫:
EXEC sp_detach_db 'msdb'
GO
(4)將數據文件和日志文件移到新的位置,然後再用下面命令重新附加msdb數據庫或者model數據庫:
USE master
GO
EXEC sp_attach_db
'msdb', ‘E:\SQLDataNew\msdbdata.mdf', ' E:\SQLDataNew\msdblog.ldf '
GO
(5)在企業管理器中,從“啟動參數”框中刪除-T3608跟蹤標記,再停止並重新啟動SQL Server。
3. tempdb數據庫搬家
對於tempdb數據庫,則可以直接使用ALTER DATABASE語句來為數據文件和日志文件指定新的存放位置,如下所示:
USE master
GO
ALTER DATABASE tempdb MODIF
Y FILE (NAME=tempdev, FILENAME ='E:\SQLDataNew \tempdb.mdf')
GO
ALTER DATABASE tempdb MODIF
Y FILE(NAME=templog, FILENAME=
' E:\SQLDataNew \templog.ldf')
GO
至此,SQL Server 中數據庫全部搬家完成。