a),對數據庫中每個要移動的文件使用帶有MODIFY FILE選項的ALTER DATABASE命令來指定新的文件夾選項。如:
--Move tempdb ALTER DATABASE tempdb MODIFY FILE(NAME='tempdev',FILENAME='D:\Database\tempdb.mdf'); ALTER DATABASE tempdb MODIFY FILE(NAME = 'templog',FILENAME='D:\Database\templog.ldf'); --Move model ALTER DATABASE model MODIFY FILE(NAME='modeldev',FILENAME='D:\Database\model.mdf'); ALTER DATABASE model MODIFY FILE(NAME='modellog',FILENAME='D:\Database\modellog.ldf'); --Move msdb ALTER DATABASE msdb MODIFY FILE(NAME='MSDBData',FILENAME='D:\Database\msdbdata.mdf'); ALTER DATABASE msdb MODIFY FILE(NAME='MSDBLog',FILENAME='D:\Database\msdb_log.ldf'); |
b),在命令提示行下用NET STOP MSSQLSERVER命令停止SQL Server實例;
c),物理移動文件到我們定義的文件夾,比如上面所述D:\Database文件夾;
d),重啓SQL Server實例;
大功告成,然後在用上面的查詢來驗證更改,F5執行,顯示如圖:
ii),由於硬件故障而需要移動系統數據庫
對於由於硬件故障而需要移動系統數據庫,上面的方法就不行了,因爲我們可能無法訪問服務器來運行ALTER DATABASE命令。那我們就另外換一種解決方案!
a),如果SQL Server實例已經啓動,那麼停止該實例;
b),在命令提示行下,輸入下面的命令把SQL Server實例啓動到master-only恢復模式
NET START MSSQLSERVER /f /T3608
c),之後我們就能鏈接到服務器了,接下來就和上面”移動一個沒有損壞的系統數據庫 ”的步驟就一樣了。
注:如果直接用NET START MSSSQL SERVER命令來啓動SQL Server實例,會收到1814的錯誤提示。我們可以到“控制面板”-》“管理工具”-》“事件查看器”中看一下具體的錯誤日誌。
————————————————————————————————————
第二種方法:
---------------------------------------------------------------------------------- -- Author : htl258(Tony) -- Date : 2010-06-26 21:51:30 -- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) -- Jul 9 2008 14:43:34 -- Copyright (c) 1988-2008 Microsoft Corporation -- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2) -- Blog : http://blog.csdn.net/htl258 (轉載保留此信息) -- Subject: SQL查詢與修改數據庫邏輯文件名,移動數據庫存儲路徑示例 ---------------------------------------------------------------------------------- USE mydb GO --1.查詢當前數據庫的邏輯文件名 SELECT FILE_NAME(1) AS 'File Name 1', FILE_NAME(2) AS 'File Name 2'; --或通過以下語句查詢: --SELECT name FROM sys.database_files /* File Name 1 File Name 2 ------------------- -------------------- mydb mydb_log (1 行受影響) */ --2.修改數據文件或日誌文件的邏輯名稱 ALTER DATABASE [mydb] MODIFY FILE ( NAME = mydb, NEWNAME = new_mydb ) ALTER DATABASE [mydb] MODIFY FILE ( NAME = mydb_log, NEWNAME = new_mydb_log ) --查詢更改後的名稱: SELECT FILE_NAME(1) AS 'File Name 1', FILE_NAME(2) AS 'File Name 2'; /* File Name 1 File Name 2 ------------------- -------------------- new_mydb new_mydb_log (1 行受影響) */ --3.若要將數據文件或日誌文件移至新位置,先OFFLINE把文件MOVE到相應的位置,然後再ONLINE -- 詳細參考以下步驟 --3.1 查詢數據文件或日誌文件當前存放路徑: SELECT physical_name FROM sys.database_files /* physical_name ------------------------------------------------------------------------------------------- D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mydb.mdf D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mydb_log.ldf (2 行受影響) */ --3.2 移動路徑 USE [master] GO --3.2.1 關閉所有進程 DECLARE @str VARCHAR(500); SET @str = ''; SELECT @str = @str + 'KILL '+RTRIM(spid)+';'+CHAR(13)+CHAR(10) FROM master.dbo.sysprocesses WHERE dbid=DB_ID('mydb'); EXEC(@str); GO --3.2.2 設置數據庫脫機 ALTER DATABASE [mydb] SET OFFLINE GO --3.2.3 移動數據文件與日誌文件(爲確保數據安全,建議改move爲copy,複製成功後再刪除源文件) EXEC master..xp_cmdshell 'move "D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mydb.mdf" "E:\DBTEST"',NO_OUTPUT EXEC master..xp_cmdshell 'move "D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mydb_log.LDF" "E:\DBTEST"',NO_OUTPUT GO --3.2.4 設置新的存儲路徑 ALTER DATABASE [mydb] MODIFY FILE (NAME = new_mydb,FILENAME = 'E:\DBTEST\mydb.mdf') ALTER DATABASE [mydb] MODIFY FILE (NAME = new_mydb_log,FILENAME = 'E:\DBTEST\mydb_log.ldf') GO --3.2.5 設置數據庫聯機 ALTER DATABASE [mydb] SET ONLINE GO --3.2.6 查詢新的路徑 USE mydb GO SELECT physical_name FROM sys.database_files /* physical_name ------------------------------ E:\DBTEST\mydb.mdf E:\DBTEST\mydb_log.ldf (2 行受影響) */