SQL Server 移动数据库
移動(dòng)系統(tǒng)數(shù)據(jù)庫(kù)在下列情況下可能很有用:
-
故障恢復(fù)。例如,數(shù)據(jù)庫(kù)處于可疑模式下或因硬件故障而關(guān)閉。
-
計(jì)劃的重定位。
-
為預(yù)定的磁盤維護(hù)操作而進(jìn)行的重定位。
下列過程適用于在同一 SQL Server 實(shí)例內(nèi)移動(dòng)數(shù)據(jù)庫(kù)文件。若要將數(shù)據(jù)庫(kù)移動(dòng)另一個(gè) SQL Server 實(shí)例中或另一臺(tái)服務(wù)器上,請(qǐng)使用備份和還原或分離和附加操作。
本主題中的過程需要數(shù)據(jù)庫(kù)文件的邏輯名稱。若要獲取該名稱,請(qǐng)?jiān)?sys.master_files?目錄視圖中查詢名稱列。
?
預(yù)先安排的重定位與預(yù)定的磁盤維護(hù)過程若要將移動(dòng)系統(tǒng)數(shù)據(jù)庫(kù)數(shù)據(jù)或日志文件的操作作為預(yù)先安排的重定位或預(yù)定的維護(hù)操作的一部分,請(qǐng)執(zhí)行下列步驟。此過程適用于除 master 和 Resource 數(shù)據(jù)庫(kù)以外的所有系統(tǒng)數(shù)據(jù)庫(kù)。
對(duì)于要移動(dòng)的每個(gè)文件,請(qǐng)運(yùn)行以下語(yǔ)句。
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ì)信息,請(qǐng)參閱停止服務(wù)。
將文件移動(dòng)到新位置。
重新啟動(dòng) SQL Server 實(shí)例或服務(wù)器。有關(guān)詳細(xì)信息,請(qǐng)參閱啟動(dòng)和重新啟動(dòng)服務(wù)。
通過運(yùn)行以下查詢來驗(yàn)證文件更改。
SELECT name ,physical_name AS CurrentLocation ,state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>') ;
如果移動(dòng)了 msdb 數(shù)據(jù)庫(kù)并為數(shù)據(jù)庫(kù)郵件配置了 SQL Server 實(shí)例,則請(qǐng)完成下列附加步驟。
通過運(yùn)行以下查詢,驗(yàn)證是否已為 msdb 數(shù)據(jù)庫(kù)啟用 Service Broker。
SELECT is_broker_enabled FROM sys.databases WHERE name = N'msdb' ;
有關(guān)啟用 Service Broker 的詳細(xì)信息,請(qǐng)參閱?ALTER DATABASE (Transact-SQL)。
通過發(fā)送測(cè)試郵件驗(yàn)證數(shù)據(jù)庫(kù)郵件是否正常運(yùn)行。有關(guān)詳細(xì)信息,請(qǐng)參閱對(duì)數(shù)據(jù)庫(kù)郵件進(jìn)行故障排除。
如果由于硬件故障而必須移動(dòng)文件,則請(qǐng)執(zhí)行下列步驟,將文件重新定位到一個(gè)新位置。此過程適用于除 master 和 Resource 數(shù)據(jù)庫(kù)以外的所有系統(tǒng)數(shù)據(jù)庫(kù)。
| 如果數(shù)據(jù)庫(kù)無法啟動(dòng),即處于可疑模式下或處于未恢復(fù)狀態(tài),則只有 sysadmin 固定角色的成員才可以移動(dòng)該文件。 |
如果啟動(dòng)了 SQL Server 實(shí)例,則將其停止。
通過在命令提示符下輸入下列命令之一,在僅 master 恢復(fù)模式下啟動(dòng) SQL Server 實(shí)例。在這些命令中指定的參數(shù)區(qū)分大小寫。如果未按所示方式指定參數(shù),則命令會(huì)失敗。
-
對(duì)于默認(rèn)的 (MSSQLSERVER) 實(shí)例,請(qǐng)運(yùn)行以下命令:
NET START MSSQLSERVER /f /T3608 -
對(duì)于命名實(shí)例,請(qǐng)運(yùn)行以下命令:
NET START MSSQL$instancename /f /T3608
有關(guān)詳細(xì)信息,請(qǐng)參閱如何啟動(dòng) SQL Server 實(shí)例(net 命令)。
對(duì)于要移動(dòng)的每個(gè)文件,請(qǐng)使用?sqlcmd?命令或 SQL Server Management Studio 運(yùn)行以下語(yǔ)句。
ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' )有關(guān)使用?sqlcmd?實(shí)用工具的詳細(xì)信息,請(qǐng)參閱使用 sqlcmd 實(shí)用工具。
退出?sqlcmd?實(shí)用工具或 SQL Server Management Studio。
停止 SQL Server 實(shí)例。例如,運(yùn)行?NET STOP MSSQLSERVER。
將文件移動(dòng)到新位置。
重新啟動(dòng) SQL Server 實(shí)例。例如,運(yùn)行?NET START MSSQLSERVER。
通過運(yùn)行以下查詢來驗(yàn)證文件更改。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');若要移動(dòng) master 數(shù)據(jù)庫(kù),請(qǐng)按下列步驟進(jìn)行操作。
在“開始”菜單中,依次指向“所有程序”、Microsoft SQL Server?和“配置工具”,再單擊?SQL Server 配置管理器。
在“SQL Server 服務(wù)”節(jié)點(diǎn)中,右鍵單擊 SQL Server 實(shí)例(如?SQL Server (MSSQLSERVER)),并選擇“屬性”。
在“SQL Server (實(shí)例名) 屬性”對(duì)話框中,單擊“高級(jí)”選項(xiàng)卡。
編輯“引導(dǎo)參數(shù)”值以指向 master 數(shù)據(jù)庫(kù)數(shù)據(jù)和日志文件的計(jì)劃位置,然后單擊“確定”。可以選擇移動(dòng)錯(cuò)誤日志文件。
數(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 文件移動(dòng)到新位置。
重新啟動(dòng) SQL Server 實(shí)例。
通過運(yùn)行以下查詢,驗(yàn)證 master 數(shù)據(jù)庫(kù)的文件更改。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID('master'); GOResource 數(shù)據(jù)庫(kù)的位置為 <drive>:\Program Files\Microsoft SQL Server\MSSQL10_50.<instance_name>\MSSQL\Binn\。無法移動(dòng)該數(shù)據(jù)庫(kù)。
示例A. 移動(dòng) tempdb 數(shù)據(jù)庫(kù)
下面的示例將?tempdb?數(shù)據(jù)和日志文件移動(dòng)到一個(gè)新位置,作為預(yù)先安排的重定位的一部分。
| 由于每次啟動(dòng) SQL Server 實(shí)例時(shí)都將重新創(chuàng)建 tempdb,所以不必實(shí)際移動(dòng)數(shù)據(jù)和日志文件。在步驟 3 中重新啟動(dòng)服務(wù)時(shí),將在新位置中創(chuàng)建這些文件。在重新啟動(dòng)服務(wù)之前,tempdb 將繼續(xù)使用現(xiàn)有位置中的數(shù)據(jù)和日志文件。 |
確定?tempdb?數(shù)據(jù)庫(kù)的邏輯文件名稱以及在磁盤上的當(dāng)前位置。
SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID(N'tempdb'); GO使用?ALTER DATABASE?更改每個(gè)文件的位置。
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停止再重新啟動(dòng) SQL Server 的實(shí)例。
驗(yàn)證文件更改。
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?語(yǔ)句的 FILENAME 子句中指定新的文件位置,可以將用戶數(shù)據(jù)庫(kù)中的數(shù)據(jù)、日志和全文目錄文件移動(dòng)到新位置。此方法適用于在同一 SQL Server 實(shí)例中移動(dòng)數(shù)據(jù)庫(kù)文件。若要將數(shù)據(jù)庫(kù)移動(dòng)到另一個(gè) SQL Server 實(shí)例或另一臺(tái)服務(wù)器上,請(qǐng)使用備份和還原或分離和附加操作。
| SQL Server 數(shù)據(jù)庫(kù)引擎的某些功能改變了數(shù)據(jù)庫(kù)引擎在數(shù)據(jù)庫(kù)文件中存儲(chǔ)信息的方式。這些功能僅限于特定的 SQL Server 版本。不能將包含這些功能的數(shù)據(jù)庫(kù)移到不支持這些功能的 SQL Server 版本。使用 sys.dm_db_persisted_sku_features 動(dòng)態(tài)管理視圖可列出當(dāng)前數(shù)據(jù)庫(kù)中啟用的所有特定于版本的功能。 |
本主題中的過程需要數(shù)據(jù)庫(kù)文件的邏輯名稱。若要獲取該名稱,請(qǐng)?jiān)?sys.master_files?目錄視圖中查詢名稱列。
| 將數(shù)據(jù)庫(kù)移動(dòng)到另一個(gè)服務(wù)器實(shí)例上時(shí),若要為用戶和應(yīng)用程序提供一致的體驗(yàn),您可能需要為數(shù)據(jù)庫(kù)重新創(chuàng)建部分或全部元數(shù)據(jù)。有關(guān)詳細(xì)信息,請(qǐng)參閱當(dāng)數(shù)據(jù)庫(kù)在其他服務(wù)器實(shí)例上可用時(shí)管理元數(shù)據(jù)。 |
若要將移動(dòng)數(shù)據(jù)或日志文件作為計(jì)劃的重定位的一部分,請(qǐng)執(zhí)行下列步驟:
運(yùn)行以下語(yǔ)句。
ALTER DATABASE database_name SET OFFLINE ;
將文件移動(dòng)到新位置。
對(duì)于已移動(dòng)的每個(gè)文件,請(qǐng)運(yùn)行以下語(yǔ)句。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' ) ;
運(yùn)行以下語(yǔ)句。
ALTER DATABASE database_name SET ONLINE ;通過運(yùn)行以下查詢來驗(yàn)證文件更改。
SELECT name ,physical_name AS CurrentLocation ,state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>') ;若要將重定位文件作為計(jì)劃的磁盤維護(hù)過程的一部分,請(qǐng)執(zhí)行下列步驟:
對(duì)于要移動(dòng)的每個(gè)文件,請(qǐng)運(yùn)行以下語(yǔ)句。
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ì)信息,請(qǐng)參閱停止服務(wù)。
將文件移動(dòng)到新位置。
重新啟動(dòng) SQL Server 實(shí)例或服務(wù)器。有關(guān)詳細(xì)信息,請(qǐng)參閱啟動(dòng)和重新啟動(dòng)服務(wù)。
通過運(yùn)行以下查詢來驗(yàn)證文件更改。
SELECT name ,physical_name AS CurrentLocation ,state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>') ;如果由于硬件故障而必須移動(dòng)文件,則請(qǐng)執(zhí)行下列步驟,將文件重新定位到一個(gè)新位置。
| 如果數(shù)據(jù)庫(kù)無法啟動(dòng),即處于可疑模式下或處于未恢復(fù)狀態(tài),則只有 sysadmin 固定角色的成員才可以移動(dòng)該文件。 |
如果啟動(dòng)了 SQL Server 實(shí)例,則將其停止。
通過在命令提示符下輸入下列命令之一,在僅 master 恢復(fù)模式下啟動(dòng) SQL Server 實(shí)例。
-
對(duì)于默認(rèn)的 (MSSQLSERVER) 實(shí)例,請(qǐng)運(yùn)行以下命令。
NET START MSSQLSERVER /f /T3608 -
對(duì)于命名實(shí)例,請(qǐng)運(yùn)行以下命令。
NET START MSSQL$instancename /f /T3608
有關(guān)詳細(xì)信息,請(qǐng)參閱如何啟動(dòng) SQL Server 實(shí)例(net 命令)。
對(duì)于要移動(dòng)的每個(gè)文件,請(qǐng)使用?sqlcmd?命令或 SQL Server Management Studio 運(yùn)行以下語(yǔ)句。
ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' );有關(guān)如何使用?sqlcmd?實(shí)用工具的詳細(xì)信息,請(qǐng)參閱使用 sqlcmd 實(shí)用工具。
退出?sqlcmd?實(shí)用工具或 SQL Server Management Studio。
停止 SQL Server 實(shí)例。
將文件移動(dòng)到新位置。
啟動(dòng) SQL Server 實(shí)例。例如,運(yùn)行?NET START MSSQLSERVER。
通過運(yùn)行以下查詢來驗(yàn)證文件更改。SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');若要移動(dòng)全文目錄,請(qǐng)執(zhí)行下列步驟。請(qǐng)注意,指定新的目錄位置時(shí),只指定?new_path,而不是指定?new_path/os_file_name。
運(yùn)行以下語(yǔ)句。
ALTER DATABASE database_name SET OFFLINE將全文目錄移動(dòng)到新位置。
運(yùn)行下列語(yǔ)句,其中:logical_name?是?sys.database_files?中 name 列的值,new_path?是目錄的新位置。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path');運(yùn)行以下語(yǔ)句。
ALTER DATABASE database_name SET ONLINE;另外,也可以使用 CREATE DATABASE 語(yǔ)句的 FOR ATTACH 子句移動(dòng)全文目錄。下面的示例在 AdventureWorks2008R2 數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)全文目錄。若要將全文目錄移動(dòng)到新位置,請(qǐng)分離 AdventureWorks2008R2 數(shù)據(jù)庫(kù),并將全文目錄從物理意義上移動(dòng)到新位置。然后附加數(shù)據(jù)庫(kù),并指定全文目錄的新位置。
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 日志文件移動(dòng)到一個(gè)新位置,作為計(jì)劃的重定位的一部分。
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' ;轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/4317472.html
總結(jié)
以上是生活随笔為你收集整理的SQL Server 移动数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 平安银行由你信用卡年费政策
- 下一篇: 2015-05-27 用正则把oracl