移动系统数据库
來源:http://msdn.microsoft.com/zh-cn/library/ms345408.aspx
本主题说明如何在 SQL Server 中移动系统数据库。 移动系统数据库在下列情况下可能很有用:
-
故障恢复。 例如,数据库处于可疑模式下或因硬件故障而关闭。
-
计划的重定位。
-
为预定的磁盘维护操作而进行的重定位。
下列过程适用于在同一 SQL Server 实例内移动数据库文件。 若要将数据库移动另一个 SQL Server 实例中或另一台服务器上,请使用备份和还原或分离和附加操作。
本主题中的过程需要数据库文件的逻辑名称。 若要获取该名称,请在 sys.master_files 目录视图中查询 name 列。
重要提示 |
|---|
| 如果移动系统数据库并随后重新生成 master 数据库,则必须再次移动系统数据库,因为重新生成操作会将所有系统数据库安装到其默认位置。 |
若要将移动系统数据库数据或日志文件的操作作为预先安排的重定位或预定的维护操作的一部分,请按照下列步骤操作。 此过程适用于除 master 和 Resource 数据库以外的所有系统数据库。
-
对于要移动的每个文件,请运行以下语句。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
-
停止 SQL Server 实例或关闭系统以执行维护。 有关详细信息,请参阅启动、停止、暂停、继续、重新启动数据库引擎、SQL Server 代理或 SQL Server Browser 服务。
-
将文件移动到新位置。
-
重新启动 SQL Server 实例或服务器。 有关详细信息,请参阅启动、停止、暂停、继续、重新启动数据库引擎、SQL Server 代理或 SQL Server Browser 服务。
-
通过运行以下查询来验证文件更改。
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 代理或 SQL Server Browser 服务。
-
-
对于要移动的每个文件,请使用 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 (instance_name) 属性”对话框中,单击“启动参数”选项卡。
-
在“现有参数”框中,选择 –d 参数以移动 master 数据文件。 单击“更新”以保存更改。
在“指定启动参数”框中,将该参数更改为 master 数据库的新路径。
-
在“现有参数”框中,选择 –l 参数以移动 master 日志文件。 单击“更新”以保存更改。
在“指定启动参数”框中,将该参数更改为 master 数据库的新路径。
数据文件的参数值必须跟在 -d 参数的后面,日志文件的参数值必须跟在 -l 参数的后面。 下面的示例显示用于 master 数据文件默认位置的参数值。
-dC:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\master.mdf
-lC:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
如果 master 数据文件预先安排的重定位是 E:\SQLData,则参数值将做如下更改:
-dE:\SQLData\master.mdf
-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
如果已将所有系统数据库都移到新的驱动器/卷或移到使用不同驱动器盘符的另一个服务器,请进行下列更新。
-
更改 SQL Server 代理日志路径。 如果不更新此路径,SQL Server 代理将无法启动。
-
更改数据库默认位置。 如果指定为默认位置的驱动器盘符和路径不存在,则可能无法创建新的数据库。
更改 SQL Server 代理日志路径
-
从 SQL Server Management Studio 的对象资源管理器中,展开“SQL Server 代理”。
-
右键单击“错误日志”,然后单击“配置”。
-
在“配置 SQL Server 代理错误日志”对话框中,指定 SQLAGENT.OUT 文件的新位置。 默认位置为:C:\Program Files\Microsoft SQL Server\MSSQL11.<实例名称>\MSSQL\Log\。
更改数据库默认位置
-
从 SQL Server Management Studio 的对象资源管理器中,右键单击 SQL Server 所在服务器,然后单击“属性”。
-
在“服务器属性”对话框中,选择“数据库设置”。
-
在“数据库默认位置”下,找到数据文件和日志文件的新位置。
-
先停止然后启动 SQL Server 服务以完成更改。
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 文件从其原始位置删除。
重要提示
1447

被折叠的 条评论
为什么被折叠?



