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

若要將移動系統(tǒng)數(shù)據(jù)庫數(shù)據(jù)或日志文件的操作作為預(yù)先安排的重定位或預(yù)定的維護(hù)操作的一部分,請執(zhí)行下列步驟。此過程適用于除 master 和 Resource 數(shù)據(jù)庫以外的所有系統(tǒng)數(shù)據(jù)庫。
-
對于要移動的每個文件,請運(yùn)行以下語句。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
-
停止 SQL Server 實(shí)例或關(guān)閉系統(tǒng)以執(zhí)行維護(hù)。有關(guān)詳細(xì)信息,請參閱 停止服務(wù) 。
-
將文件移動到新位置。
-
重新啟動 SQL Server 實(shí)例或服務(wù)器。有關(guān)詳細(xì)信息,請參閱 啟動和重新啟動服務(wù) 。
-
通過運(yùn)行以下查詢來驗證文件更改。
SELECT name , physical_name AS CurrentLocation , state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>') ;
如果移動了 msdb 數(shù)據(jù)庫并為 數(shù)據(jù)庫郵件 配置了 SQL Server 實(shí)例,則請完成下列附加步驟。
-
通過運(yùn)行以下查詢,驗證是否已為 msdb 數(shù)據(jù)庫啟用 Service Broker。
SELECT is_broker_enabled FROM sys.databases WHERE name = N'msdb' ;
有關(guān)啟用 Service Broker 的詳細(xì)信息,請參閱? ALTER DATABASE (Transact-SQL) 。
-
通過發(fā)送測試郵件驗證數(shù)據(jù)庫郵件是否正常運(yùn)行。有關(guān)詳細(xì)信息,請參閱 對數(shù)據(jù)庫郵件進(jìn)行故障排除 。
如果由于硬件故障而必須移動文件,則請執(zhí)行下列步驟,將文件重新定位到一個新位置。此過程適用于除 master 和 Resource 數(shù)據(jù)庫以外的所有系統(tǒng)數(shù)據(jù)庫。
?重要提示 |
---|
如果數(shù)據(jù)庫無法啟動,即處于可疑模式下或處于未恢復(fù)狀態(tài),則只有 sysadmin 固定角色的成員才可以移動該文件。 |
-
如果啟動了 SQL Server 實(shí)例,則將其停止。
-
通過在命令提示符下輸入下列命令之一,在僅 master 恢復(fù)模式下啟動 SQL Server 實(shí)例。在這些命令中指定的參數(shù)區(qū)分大小寫。如果未按所示方式指定參數(shù),則命令會失敗。
-
對于默認(rèn)的 (MSSQLSERVER) 實(shí)例,請運(yùn)行以下命令:
NET START MSSQLSERVER /f /T3608
-
對于命名實(shí)例,請運(yùn)行以下命令:
NET START MSSQL$instancename /f /T3608
有關(guān)詳細(xì)信息,請參閱 如何啟動 SQL Server 實(shí)例(net 命令) 。
-
-
對于要移動的每個文件,請使用? sqlcmd ?命令或 SQL Server Management Studio 運(yùn)行以下語句。
ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
有關(guān)使用? sqlcmd ?實(shí)用工具的詳細(xì)信息,請參閱 使用 sqlcmd 實(shí)用工具 。
-
退出? sqlcmd ?實(shí)用工具或 SQL Server Management Studio。
-
停止 SQL Server 實(shí)例。例如,運(yùn)行? NET STOP MSSQLSERVER 。
-
將文件移動到新位置。
-
重新啟動 SQL Server 實(shí)例。例如,運(yùn)行? NET START MSSQLSERVER 。
-
通過運(yùn)行以下查詢來驗證文件更改。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
若要移動 master 數(shù)據(jù)庫,請按下列步驟進(jìn)行操作。
-
在 “開始” 菜單中,依次指向 “所有程序” 、 Microsoft SQL Server ?和 “配置工具” ,再單擊? SQL Server 配置管理器 。
-
在 “SQL Server 服務(wù)” 節(jié)點(diǎn)中,右鍵單擊 SQL Server 實(shí)例(如? SQL Server (MSSQLSERVER) ),并選擇 “屬性” 。
-
在 “SQL Server ( 實(shí)例名 ) 屬性” 對話框中,單擊 “高級” 選項卡。
-
編輯 “引導(dǎo)參數(shù)” 值以指向 master 數(shù)據(jù)庫數(shù)據(jù)和日志文件的計劃位置,然后單擊 “確定” 。可以選擇移動錯誤日志文件。
數(shù)據(jù)文件的參數(shù)值必須跟在? -d ?參數(shù)的后面,日志文件的參數(shù)值必須跟在? -l ?參數(shù)的后面。下面的示例顯示 master 數(shù)據(jù)和日志文件默認(rèn)位置的參數(shù)值。
-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 數(shù)據(jù)和日志文件預(yù)先安排的重定位是? E:\SQLData ,則參數(shù)值將更改為:
-dE:\SQLData\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\LOG\ERRORLOG;-lE:\SQLData\mastlog.ldf
-
通過右鍵單擊實(shí)例名稱并選擇 “停止” ,停止 SQL Server 實(shí)例。
-
將 master.mdf 和 mastlog.ldf 文件移動到新位置。
-
重新啟動 SQL Server 實(shí)例。
-
通過運(yùn)行以下查詢,驗證 master 數(shù)據(jù)庫的文件更改。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID('master'); GO
A. 移動 tempdb 數(shù)據(jù)庫
下面的示例將? tempdb ?數(shù)據(jù)和日志文件移動到一個新位置,作為預(yù)先安排的重定位的一部分。
注意 |
---|
由于每次啟動 SQL Server 實(shí)例時都將重新創(chuàng)建 tempdb,所以不必實(shí)際移動數(shù)據(jù)和日志文件。在步驟 3 中重新啟動服務(wù)時,將在新位置中創(chuàng)建這些文件。在重新啟動服務(wù)之前,tempdb 將繼續(xù)使用現(xiàn)有位置中的數(shù)據(jù)和日志文件。 |
-
確定? tempdb ?數(shù)據(jù)庫的邏輯文件名稱以及在磁盤上的當(dāng)前位置。
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 的實(shí)例。
-
驗證文件更改。
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 子句中指定新的文件位置,可以將用戶數(shù)據(jù)庫中的數(shù)據(jù)、日志和全文目錄文件移動到新位置。此方法適用于在同一 SQL Server 實(shí)例中移動數(shù)據(jù)庫文件。若要將數(shù)據(jù)庫移動到另一個 SQL Server 實(shí)例或另一臺服務(wù)器上,請使用 備份和還原 或 分離和附加操作 。
注意 SQL Server 數(shù)據(jù)庫引擎的某些功能改變了數(shù)據(jù)庫引擎在數(shù)據(jù)庫文件中存儲信息的方式。這些功能僅限于特定的 SQL Server 版本。不能將包含這些功能的數(shù)據(jù)庫移到不支持這些功能的 SQL Server 版本。使用 sys.dm_db_persisted_sku_features 動態(tài)管理視圖可列出當(dāng)前數(shù)據(jù)庫中啟用的所有特定于版本的功能。
本主題中的過程需要數(shù)據(jù)庫文件的邏輯名稱。若要獲取該名稱,請在? sys.master_files ?目錄視圖中查詢名稱列。
注意 將數(shù)據(jù)庫移動到另一個服務(wù)器實(shí)例上時,若要為用戶和應(yīng)用程序提供一致的體驗,您可能需要為數(shù)據(jù)庫重新創(chuàng)建部分或全部元數(shù)據(jù)。有關(guān)詳細(xì)信息,請參閱 當(dāng)數(shù)據(jù)庫在其他服務(wù)器實(shí)例上可用時管理元數(shù)據(jù) 。
若要將移動數(shù)據(jù)或日志文件作為計劃的重定位的一部分,請執(zhí)行下列步驟:
-
運(yùn)行以下語句。
ALTER DATABASE database_name SET OFFLINE ;
-
將文件移動到新位置。
-
對于已移動的每個文件,請運(yùn)行以下語句。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' ) ;
-
運(yùn)行以下語句。
ALTER DATABASE database_name SET ONLINE ;
-
通過運(yùn)行以下查詢來驗證文件更改。
SELECT name , physical_name AS CurrentLocation , state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>') ;
若要將重定位文件作為計劃的磁盤維護(hù)過程的一部分,請執(zhí)行下列步驟:
-
對于要移動的每個文件,請運(yùn)行以下語句。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' );
-
停止 SQL Server 實(shí)例或關(guān)閉系統(tǒng)以執(zhí)行維護(hù)。有關(guān)詳細(xì)信息,請參閱 停止服務(wù) 。
-
將文件移動到新位置。
-
重新啟動 SQL Server 實(shí)例或服務(wù)器。有關(guān)詳細(xì)信息,請參閱 啟動和重新啟動服務(wù) 。
-
通過運(yùn)行以下查詢來驗證文件更改。
SELECT name , physical_name AS CurrentLocation , state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>') ;
如果由于硬件故障而必須移動文件,則請執(zhí)行下列步驟,將文件重新定位到一個新位置。
?重要提示 如果數(shù)據(jù)庫無法啟動,即處于可疑模式下或處于未恢復(fù)狀態(tài),則只有 sysadmin 固定角色的成員才可以移動該文件。
-
如果啟動了 SQL Server 實(shí)例,則將其停止。
-
通過在命令提示符下輸入下列命令之一,在僅 master 恢復(fù)模式下啟動 SQL Server 實(shí)例。
-
對于默認(rèn)的 (MSSQLSERVER) 實(shí)例,請運(yùn)行以下命令。
NET START MSSQLSERVER /f /T3608
-
對于命名實(shí)例,請運(yùn)行以下命令。
NET START MSSQL$instancename /f /T3608
有關(guān)詳細(xì)信息,請參閱 如何啟動 SQL Server 實(shí)例(net 命令) 。
-
-
對于要移動的每個文件,請使用? sqlcmd ?命令或 SQL Server Management Studio 運(yùn)行以下語句。
ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' );
有關(guān)如何使用? sqlcmd ?實(shí)用工具的詳細(xì)信息,請參閱 使用 sqlcmd 實(shí)用工具 。
-
退出? sqlcmd ?實(shí)用工具或 SQL Server Management Studio。
-
停止 SQL Server 實(shí)例。
-
將文件移動到新位置。
-
啟動 SQL Server 實(shí)例。例如,運(yùn)行? NET START MSSQLSERVER 。
-
通過運(yùn)行以下查詢來驗證文件更改。SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
若要移動全文目錄,請執(zhí)行下列步驟。請注意,指定新的目錄位置時,只指定? new_path ,而不是指定? new_path/os_file_name 。
-
運(yùn)行以下語句。
ALTER DATABASE database_name SET OFFLINE
-
將全文目錄移動到新位置。
-
運(yùn)行下列語句,其中: logical _ name ?是? sys.database_files ?中 name 列的值, new _ path ?是目錄的新位置。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path');
-
運(yùn)行以下語句。
ALTER DATABASE database_name SET ONLINE;
另外,也可以使用 CREATE DATABASE 語句的 FOR ATTACH 子句移動全文目錄。下面的示例在 AdventureWorks2008R2 數(shù)據(jù)庫中創(chuàng)建一個全文目錄。若要將全文目錄移動到新位置,請分離 AdventureWorks2008R2 數(shù)據(jù)庫,并將全文目錄從物理意義上移動到新位置。然后附加數(shù)據(jù)庫,并指定全文目錄的新位置。
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' ;
-
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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