移動系統數據庫在下列情況下可能很有用:
-
故障恢復。例如,數據庫處于可疑模式下或因硬件故障而關閉。
-
計劃的重定位。
-
為預定的磁盤維護操作而進行的重定位。
下列過程適用于在同一 SQL Server 實例內移動數據庫文件。若要將數據庫移動另一個 SQL Server 實例中或另一臺服務器上,請使用 備份和還原 或 分離和附加 操作。
本主題中的過程需要數據庫文件的邏輯名稱。若要獲取該名稱,請在? sys.master_files ?目錄視圖中查詢名稱列。
?

若要將移動系統數據庫數據或日志文件的操作作為預先安排的重定位或預定的維護操作的一部分,請執行下列步驟。此過程適用于除 master 和 Resource 數據庫以外的所有系統數據庫。
-
對于要移動的每個文件,請運行以下語句。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
-
停止 SQL Server 實例或關閉系統以執行維護。有關詳細信息,請參閱 停止服務 。
-
將文件移動到新位置。
-
重新啟動 SQL Server 實例或服務器。有關詳細信息,請參閱 啟動和重新啟動服務 。
-
通過運行以下查詢來驗證文件更改。
SELECT name , physical_name AS CurrentLocation , state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>') ;
如果移動了 msdb 數據庫并為 數據庫郵件 配置了 SQL Server 實例,則請完成下列附加步驟。
-
通過運行以下查詢,驗證是否已為 msdb 數據庫啟用 Service Broker。
SELECT is_broker_enabled FROM sys.databases WHERE name = N'msdb' ;
有關啟用 Service Broker 的詳細信息,請參閱? ALTER DATABASE (Transact-SQL) 。
-
通過發送測試郵件驗證數據庫郵件是否正常運行。有關詳細信息,請參閱 對數據庫郵件進行故障排除 。
如果由于硬件故障而必須移動文件,則請執行下列步驟,將文件重新定位到一個新位置。此過程適用于除 master 和 Resource 數據庫以外的所有系統數據庫。
?重要提示 |
---|
如果數據庫無法啟動,即處于可疑模式下或處于未恢復狀態,則只有 sysadmin 固定角色的成員才可以移動該文件。 |
-
如果啟動了 SQL Server 實例,則將其停止。
-
通過在命令提示符下輸入下列命令之一,在僅 master 恢復模式下啟動 SQL Server 實例。在這些命令中指定的參數區分大小寫。如果未按所示方式指定參數,則命令會失敗。
-
對于默認的 (MSSQLSERVER) 實例,請運行以下命令:
NET START MSSQLSERVER /f /T3608
-
對于命名實例,請運行以下命令:
NET START MSSQL$instancename /f /T3608
有關詳細信息,請參閱 如何啟動 SQL Server 實例(net 命令) 。
-
-
對于要移動的每個文件,請使用? sqlcmd ?命令或 SQL Server Management Studio 運行以下語句。
ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
有關使用? sqlcmd ?實用工具的詳細信息,請參閱 使用 sqlcmd 實用工具 。
-
退出? sqlcmd ?實用工具或 SQL Server Management Studio。
-
停止 SQL Server 實例。例如,運行? NET STOP MSSQLSERVER 。
-
將文件移動到新位置。
-
重新啟動 SQL Server 實例。例如,運行? NET START MSSQLSERVER 。
-
通過運行以下查詢來驗證文件更改。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
若要移動 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
-
通過右鍵單擊實例名稱并選擇 “停止” ,停止 SQL Server 實例。
-
將 master.mdf 和 mastlog.ldf 文件移動到新位置。
-
重新啟動 SQL Server 實例。
-
通過運行以下查詢,驗證 master 數據庫的文件更改。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID('master'); GO
A. 移動 tempdb 數據庫
下面的示例將? tempdb ?數據和日志文件移動到一個新位置,作為預先安排的重定位的一部分。
注意 |
---|
由于每次啟動 SQL Server 實例時都將重新創建 tempdb,所以不必實際移動數據和日志文件。在步驟 3 中重新啟動服務時,將在新位置中創建這些文件。在重新啟動服務之前,tempdb 將繼續使用現有位置中的數據和日志文件。 |
-
確定? tempdb ?數據庫的邏輯文件名稱以及在磁盤上的當前位置。
SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID(N'tempdb'); GO
-
使用? 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 = 'F:\SQLLog\templog.ldf'); GO
-
停止再重新啟動 SQL Server 的實例。
-
驗證文件更改。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'tempdb');
-
將? tempdb.mdf ?和? templog.ldf ?文件從其原始位置刪除。
在 SQL Server 中,通過在? ALTER DATABASE ?語句的 FILENAME 子句中指定新的文件位置,可以將用戶數據庫中的數據、日志和全文目錄文件移動到新位置。此方法適用于在同一 SQL Server 實例中移動數據庫文件。若要將數據庫移動到另一個 SQL Server 實例或另一臺服務器上,請使用 備份和還原 或 分離和附加操作 。
注意 SQL Server 數據庫引擎的某些功能改變了數據庫引擎在數據庫文件中存儲信息的方式。這些功能僅限于特定的 SQL Server 版本。不能將包含這些功能的數據庫移到不支持這些功能的 SQL Server 版本。使用 sys.dm_db_persisted_sku_features 動態管理視圖可列出當前數據庫中啟用的所有特定于版本的功能。
本主題中的過程需要數據庫文件的邏輯名稱。若要獲取該名稱,請在? sys.master_files ?目錄視圖中查詢名稱列。
注意 將數據庫移動到另一個服務器實例上時,若要為用戶和應用程序提供一致的體驗,您可能需要為數據庫重新創建部分或全部元數據。有關詳細信息,請參閱 當數據庫在其他服務器實例上可用時管理元數據 。
若要將移動數據或日志文件作為計劃的重定位的一部分,請執行下列步驟:
-
運行以下語句。
ALTER DATABASE database_name SET OFFLINE ;
-
將文件移動到新位置。
-
對于已移動的每個文件,請運行以下語句。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' ) ;
-
運行以下語句。
ALTER DATABASE database_name SET ONLINE ;
-
通過運行以下查詢來驗證文件更改。
SELECT name , physical_name AS CurrentLocation , state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>') ;
若要將重定位文件作為計劃的磁盤維護過程的一部分,請執行下列步驟:
-
對于要移動的每個文件,請運行以下語句。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' );
-
停止 SQL Server 實例或關閉系統以執行維護。有關詳細信息,請參閱 停止服務 。
-
將文件移動到新位置。
-
重新啟動 SQL Server 實例或服務器。有關詳細信息,請參閱 啟動和重新啟動服務 。
-
通過運行以下查詢來驗證文件更改。
SELECT name , physical_name AS CurrentLocation , state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>') ;
如果由于硬件故障而必須移動文件,則請執行下列步驟,將文件重新定位到一個新位置。
?重要提示 如果數據庫無法啟動,即處于可疑模式下或處于未恢復狀態,則只有 sysadmin 固定角色的成員才可以移動該文件。
-
如果啟動了 SQL Server 實例,則將其停止。
-
通過在命令提示符下輸入下列命令之一,在僅 master 恢復模式下啟動 SQL Server 實例。
-
對于默認的 (MSSQLSERVER) 實例,請運行以下命令。
NET START MSSQLSERVER /f /T3608
-
對于命名實例,請運行以下命令。
NET START MSSQL$instancename /f /T3608
有關詳細信息,請參閱 如何啟動 SQL Server 實例(net 命令) 。
-
-
對于要移動的每個文件,請使用? sqlcmd ?命令或 SQL Server Management Studio 運行以下語句。
ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' );
有關如何使用? sqlcmd ?實用工具的詳細信息,請參閱 使用 sqlcmd 實用工具 。
-
退出? sqlcmd ?實用工具或 SQL Server Management Studio。
-
停止 SQL Server 實例。
-
將文件移動到新位置。
-
啟動 SQL Server 實例。例如,運行? NET START MSSQLSERVER 。
-
通過運行以下查詢來驗證文件更改。SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
若要移動全文目錄,請執行下列步驟。請注意,指定新的目錄位置時,只指定? new_path ,而不是指定? new_path/os_file_name 。
-
運行以下語句。
ALTER DATABASE database_name SET OFFLINE
-
將全文目錄移動到新位置。
-
運行下列語句,其中: logical _ name ?是? sys.database_files ?中 name 列的值, new _ path ?是目錄的新位置。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path');
-
運行以下語句。
ALTER DATABASE database_name SET ONLINE;
另外,也可以使用 CREATE DATABASE 語句的 FOR ATTACH 子句移動全文目錄。下面的示例在 AdventureWorks2008R2 數據庫中創建一個全文目錄。若要將全文目錄移動到新位置,請分離 AdventureWorks2008R2 數據庫,并將全文目錄從物理意義上移動到新位置。然后附加數據庫,并指定全文目錄的新位置。
USE AdventureWorks2008R2 ; CREATE FULLTEXT CATALOG AdvWksFtCat AS DEFAULT ; GO USE master ; GO --Detach the AdventureWorks2008R2 database. sp_detach_db AdventureWorks2008R2 ; GO --Physically move the full-text catalog to the new location. --Attach the AdventureWorks2008R2 database and specify the new location of the full-text catalog. CREATE DATABASE AdventureWorks2008R2 ON (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_Data.mdf'), (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_log.ldf'), (FILENAME = 'c:\myFTCatalogs\AdvWksFtCat') FOR ATTACH ; GO
下面的示例將 AdventureWorks2008R2 日志文件移動到一個新位置,作為計劃的重定位的一部分。
USE master ; GO -- Return the logical file name. SELECT name , physical_name AS CurrentLocation , state_desc FROM sys.master_files WHERE database_id = DB_ID(N'AdventureWorks2008R2') AND type_desc = N'LOG' ; GO ALTER DATABASE AdventureWorks2008R2 SET OFFLINE ; GO -- Physically move the file to a new location. -- In the following statement, modify the path specified in FILENAME to -- the new location of the file on your server. ALTER DATABASE AdventureWorks2008R2 MODIFY FILE ( NAME = AdventureWorks2008R2_Log, FILENAME = 'C:\NewLoc\AdventureWorks2008R2_Log.ldf') ; GO ALTER DATABASE AdventureWorks2008R2 SET ONLINE ; GO --Verify the new location. SELECT name , physical_name AS CurrentLocation , state_desc FROM sys.master_files WHERE database_id = DB_ID(N'AdventureWorks2008R2') AND type_desc = N'LOG' ;
-
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
