SQL Server 移動數據庫

移動系統數據庫在下列情況下可能很有用:

故障恢復。例如,數據庫處於可疑模式下或因硬件故障而關閉。

計劃的重定位。

爲預定的磁盤維護操作而進行的重定位。

下列過程適用於在同一 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 實例或服務器。有關詳細信息,請參閱啓動和重新啓動服務。

通過運行以下查詢來驗證文件更改。

[sql] view plaincopyprint?

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。

[sql] view plaincopyprint?

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 數據庫

若要移動 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

移動 Resource 數據庫

Resource 數據庫的位置爲 <drive>:\Program Files\Microsoft SQL Server\MSSQL10_50.<instance_name>\MSSQL\Binn\。無法移動該數據庫。

示例

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 目錄視圖中查詢名稱列。

注意

將數據庫移動到另一個服務器實例上時,若要爲用戶和應用程序提供一致的體驗,您可能需要爲數據庫重新創建部分或全部元數據。有關詳細信息,請參閱當數據庫在其他服務器實例上可用時管理元數據。

計劃的重定位過程

若要將移動數據或日誌文件作爲計劃的重定位的一部分,請執行下列步驟:

運行以下語句。

[sql] view plaincopyprint?

ALTER DATABASE database_name SET OFFLINE ;  

 

 

將文件移動到新位置。

對於已移動的每個文件,請運行以下語句。

[sql] view plaincopyprint?

ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' ) ;  

 

 

運行以下語句。

[sql] view plaincopyprint?

ALTER DATABASE database_name SET ONLINE ;  

通過運行以下查詢來驗證文件更改。

[sql] view plaincopyprint?

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 實例或服務器。有關詳細信息,請參閱啓動和重新啓動服務。

通過運行以下查詢來驗證文件更改。

[sql] view plaincopyprint?

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) 實例,請運行以下命令。

[sql] view plaincopyprint?

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 數據庫,並將全文目錄從物理意義上移動到新位置。然後附加數據庫,並指定全文目錄的新位置。

[sql] view plaincopyprint?

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 日誌文件移動到一個新位置,作爲計劃的重定位的一部分。

[sql] view plaincopyprint?

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' ;  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章