移动系统数据库

本主题介绍如何在 SQL Server 中移动系统数据库。 在以下情况下,移动系统数据库可能很有用:

  • 故障恢复。 例如,数据库处于可疑模式,或者由于硬件故障而关闭。

  • 计划搬迁。

  • 计划磁盘维护的迁移。

以下过程适用于在同一 SQL Server 实例内移动数据库文件。 若要将数据库移到 SQL Server 的另一个实例或另一台服务器,请使用 备份和还原分离和附加 作。

本主题中的过程需要数据库文件的逻辑名称。 若要获取名称,请查询 sys.master_files 目录视图中的名称列。

重要

如果移动系统数据库,然后重新生成 master 数据库,则必须再次移动系统数据库,因为重新生成作会将所有系统数据库安装到其默认位置。

本主题内容

计划内重定位和计划磁盘维护过程

若要在计划的重定位或计划性维护作过程中移动系统数据库数据或日志文件,请执行以下步骤。 此过程适用于除 master 数据库和资源数据库以外的所有系统数据库。

  1. 对于要移动的每个文件,请运行以下语句。

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )  
    
  2. 停止 SQL Server 实例或关闭系统以执行维护。 有关详细信息,请参阅 “启动”、“停止”、“暂停”、“恢复”、“重启数据库引擎”、“SQL Server 代理”或“SQL Server 浏览器服务”。

  3. 将文件或文件移动到新位置。

  4. 重启 SQL Server 或服务器的实例。 有关详细信息,请参阅 “启动”、“停止”、“暂停”、“恢复”、“重启数据库引擎”、“SQL Server 代理”或“SQL Server 浏览器服务”。

  5. 通过运行以下查询来验证文件更改。

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    

如果移动了 msdb 数据库,并且为 数据库邮件配置了 SQL Server 实例,请完成以下附加步骤。

  1. 通过运行以下查询验证是否为 msdb 数据库启用了 Service Broker。

    SELECT is_broker_enabled   
    FROM sys.databases  
    WHERE name = N'msdb';  
    

    有关启用 Service Broker 的详细信息,请参阅 ALTER DATABASE (Transact-SQL)

  2. 通过发送测试邮件来验证数据库邮件是否正常工作。

故障恢复过程

如果由于硬件故障而必须移动文件,请按照以下步骤将文件重定位到新位置。 此过程适用于除 master 数据库和资源数据库以外的所有系统数据库。

重要

如果无法启动数据库,即处于可疑模式或未恢复状态,则只有 sysadmin 固定角色的成员才能移动该文件。

  1. 如果 SQL Server 已启动,请停止该实例。

  2. 在命令提示符处输入以下命令之一,在仅主恢复模式下启动 SQL Server 实例。 这些命令中指定的参数区分大小写。 如果未指定参数,命令将失败,如下所示。

    • 对于默认实例(MSSQLSERVER),运行以下命令:

      NET START MSSQLSERVER /f /T3608  
      
    • 对于命名实例,请运行以下命令:

      NET START MSSQL$instancename /f /T3608  
      

    有关详细信息,请参阅 “启动”、“停止”、“暂停”、“恢复”、“重启数据库引擎”、“SQL Server 代理”或“SQL Server 浏览器服务”。

  3. 对于要移动的每个文件,请使用 sqlcmd 命令或 SQL Server Management Studio 运行以下语句。

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

    有关使用 sqlcmd 实用工具的详细信息,请参阅 “使用 sqlcmd 实用工具”。

  4. 退出 sqlcmd 实用工具或 SQL Server Management Studio。

  5. 停止 SQL Server 的实例。 例如,运行 NET STOP MSSQLSERVER

  6. 将文件或文件移动到新位置。

  7. 重新启动 SQL Server实例。 例如,运行 NET START MSSQLSERVER

  8. 通过运行以下查询来验证文件更改。

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    

移动主数据库

若要移动 master 数据库,请执行以下步骤。

  1. “开始 ”菜单中,指向 “所有程序”,指向 Microsoft SQL Server,指向 “配置工具”,然后单击“ SQL Server 配置管理器”。

  2. SQL Server 服务 节点中,右键单击 SQL Server 实例(例如 SQL Server(MSSQLSERVER)并选择 “属性”。

  3. “SQL Server(instance_name)属性 ”对话框中,单击“ 启动参数 ”选项卡。

  4. “现有参数 ”框中,选择 -d 参数以移动主数据文件。 单击“ 更新 ”保存更改。

    “指定启动参数 ”框中,将参数更改为 master 数据库的新路径。

  5. “现有参数 ”框中,选择 -l 参数以移动主日志文件。 单击“ 更新 ”保存更改。

    “指定启动参数 ”框中,将参数更改为 master 数据库的新路径。

    数据文件的参数值必须遵循 -d 参数,日志文件的值必须遵循 -l 参数。 以下示例显示了主数据文件的默认位置的参数值。

    -dC:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\master.mdf

    -lC:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\mastlog.ldf

    如果主数据文件的计划重定位为 E:\SQLData,参数值将按如下所示更改:

    -dE:\SQLData\master.mdf

    -lE:\SQLData\mastlog.ldf

  6. 右键单击实例名称并选择 “停止”来停止 SQL Server 的实例。

  7. 将 master.mdf 和 mastlog.ldf 文件移动到新位置。

  8. 重新启动 SQL Server实例。

  9. 通过运行以下查询验证 master 数据库的文件更改。

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID('master');  
    GO  
    

移动资源数据库

资源数据库的位置为 <drive>:\Program Files\Microsoft SQL Server\MSSQL<版本>。<instance_name>\MSSQL\Binn\. 无法移动数据库。

后续处理:移动所有系统数据库后

如果已将所有系统数据库移动到新的驱动器或卷或其他具有不同驱动器号的服务器,请进行以下更新。

  • 更改 SQL Server 代理日志路径。 如果不更新此路径,SQL Server 代理将无法启动。

  • 更改数据库默认位置。 如果指定为默认位置的驱动器号和路径不存在,则创建新数据库可能会失败。

更改 SQL Server 代理日志路径

  1. 在 SQL Server Management Studio 中,在对象浏览器中,展开 SQL Server 代理

  2. 右键单击 “错误日志 ”,然后单击“ 配置”。

  3. 在“配置 SQL Server 代理错误日志”对话框中,指定 SQLAGENT.OUT 文件的新位置。 默认位置为 C:\Program Files\Microsoft SQL Server\MSSQL12。<>instance_name\MSSQL\Log\。

更改数据库默认位置

  1. 在 SQL Server Management Studio 中,在对象资源管理器中,右键单击 SQL Server 服务器,然后单击“ 属性”。

  2. 在“ 服务器属性 ”对话框中,选择 “数据库设置”。

  3. “数据库默认位置”下,浏览到数据和日志文件的新位置。

  4. 停止并启动 SQL Server 服务以完成更改。

例子

答: 移动 tempdb 数据库

以下示例在计划的重定位过程中,将数据 tempdb 和日志文件移动到新位置。

注释

由于每次启动 SQL Server 实例时都会重新创建 tempdb,因此无需以物理方式移动数据和日志文件。 在步骤 3 中重新启动服务时,这些文件将在新位置创建。 在重新启动服务之前,tempdb 将继续使用现有位置中的数据和日志文件。

  1. 确定tempdb数据库的逻辑文件名及其在磁盘上的当前位置。

    SELECT name, physical_name AS CurrentLocation  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'tempdb');  
    GO  
    
  2. 使用 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  
    
  3. 停止并重启 SQL Server 实例。

  4. 验证文件更改。

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'tempdb');  
    
  5. 删除tempdb.mdftemplog.ldf文件从原始位置。

另请参阅

资源数据库
tempdb 数据库
master 数据库
msdb 数据库
model Database
移动用户数据库
移动数据库文件
启动、停止、暂停、继续、重新启动数据库引擎、SQL Server 代理或 SQL Server Browser 服务
ALTER DATABASE (Transact-SQL)
重新生成系统数据库