移動系統數據庫在下列情況下可能很有用:
-
故障恢復。例如,數據庫處於可疑模式下或因硬件故障而關閉。
-
計划的重定位。
-
為預定的磁盤維護操作而進行的重定位。
移動 Master 數據庫
-
在“開始”菜單中,依次指向“所有程序”、Microsoft SQL Server 和“配置工具”,再單擊 SQL Server 配置管理器。
-
在“SQL Server 服務”節點中,右鍵單擊 SQL Server 實例(如 SQL Server (MSSQLSERVER)),並選擇“屬性”。
-
在“SQL Server (實例名) 屬性”對話框中,單擊“高級”選項卡。
-
編輯“引導參數”值以指向 master 數據庫數據和日志文件的計划位置,然后單擊“確定”。可以選擇移動錯誤日志文件。
數據文件的參數值必須跟在 -d 參數的后面,日志文件的參數值必須跟在 -l 參數的后面。下面的示例顯示 master 數據和日志文件默認位置的參數值。
-dC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\ master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\ LOG\ERRORLOG;-lC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\ DATA\mastlog.ldf
如果 master 數據和日志文件預先安排的重定位是 E:\SQLData,則參數值將更改為:
-dE:\SQLData\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\LOG\ERRORLOG;-lE:\SQLData\mastlog.ldf
-
ALTER DATABASE [master] MODIFY FILE(NAME='tempdev',FILENAME='E:\SQLData\master.mdf')
- 通過右鍵單擊實例名稱並選擇“停止”,停止 SQL Server 實例。
-
將 master.mdf 和 mastlog.ldf 文件移動到新位置(這個位置就是上面參數所指定的位置,即:E:\SQLData)。
-
重新啟動 SQL Server 實例。
-
通過運行以下查詢,驗證 master 數據庫的文件更改。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID('master'); GO
移動 Resource 數據庫
Resource 數據庫的位置為 <drive>:\Program Files\Microsoft SQL Server\MSSQL10_50.<instance_name>\MSSQL\Binn\。無法移動該數據庫。
移動其它系統數據庫
注意:由於每次啟動 SQL Server 實例時都將重新創建 tempdb,所以不必實際移動數據和日志文件。在重新啟動服務時,將在新位置中創建這些文件。在重新啟動服務之前,tempdb 將繼續使用現有位置中的數據和日志文件。
以下為移動系統數據庫步驟:
1. 確定系統數據庫的邏輯文件名稱以及在磁盤上的當前位置。
-- 如tempdb SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID(N'tempdb'); GO
2. 使用 ALTER DATABASE 更改每個文件的位置。
USE master; GO ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf'); GO ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'E:\SQLLog\templog.ldf'); GO
3. 停止服務並移動文件到更改位置
4. 重新啟動 SQL Server 的實例服務。
5. 驗證文件更改。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files
再將系統文件,如 tempdb.mdf 和 templog.ldf 文件從其原始位置刪除。
備一個腳本,可以對多實例的時候使用:
select 'ALTER DATABASE ['+db_name([database_id])+'] MODIFY FILE(NAME='''+name+''',FILENAME='''+REPLACE([physical_name],'C:\Program Files\Microsoft SQL Server\','E:\SQLData\')+''')' from sys.master_files where physical_name like 'c:%' AND [database_id]<>1