分离数据库

适用于: SQL Server

本文介绍了解如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中分离数据库。 分离后的文件不会被删除,而是保留在文件系统中。 可使用 CREATE DATABASE ... FOR ATTACHFOR ATTACH_REBUILD_LOG 选项重新附加文件。 还可将文件移动到另一个服务器,并将其附加到具有相同或更高版本的实例。

限制

有关限制和局限的列表,请参阅数据库分离和附加 (SQL Server)

权限

要求具有 db_owner 固定数据库角色中的成员资格。

使用 SQL Server Management Studio

移动数据库之前

如果要移动数据库,请在将它与其现有 SQL Server 实例分离之前,使用“数据库属性”页查看与数据库关联的文件及其当前位置。

  1. 在 SQL Server Management Studio 对象资源管理器中,连接到 SQL Server 数据库引擎 实例,再展开该实例。

  2. 展开 “数据库”,并选择要分离的用户数据库的名称。

  3. 右键单击数据库名称,并选择“属性”。 选择“文件”页,并查看“数据库文件:”表中的条目。

分离、移动和附加之前,请务必考虑与数据库关联的所有文件。 然后,继续执行下一部分中的分离步骤。 若要详细了解如何将数据库附加到新位置,请参阅附加数据库

分离数据库

  1. 在 SQL Server Management Studio 对象资源管理器中,连接到 SQL Server 数据库引擎 实例,再展开该实例。

  2. 展开 “数据库”,并选择要分离的用户数据库的名称。

  3. 右键单击数据库名称,指向“任务”,然后选择“分离”。 将出现 “分离数据库” 对话框。

    • 要分离的数据库:列出要分离的数据库。

    • 数据库名称:显示要分离的数据库的名称。

    • 删除连接:断开与指定数据库的连接。

      注意

      不能分离连接为活动状态的数据库。

    • 更新统计信息:默认情况下,分离操作将在分离数据库时保留过期的优化统计信息;若要更新现有的优化统计信息,请选择此复选框。

    • 保留全文目录:默认情况下,分离操作保留所有与数据库关联的全文目录。 若要删除全文目录,请清除 “保留全文目录” 复选框。 只有从 SQL Server 2005 (9.x) 升级数据库时,才会显示此选项。

    • 状态:显示以下状态之一: “就绪”或“未就绪”。

    • 消息:将出现消息列可显示关于数据库的如下信息:

      • 当数据库进行了复制操作,则“状态”“未就绪”“消息”列将显示 “已复制数据库”

      • 如果数据库有一个或多个活动连接,则“状态”为“未就绪”,且“消息”列会显示“<number_of_active_connections> 个活动连接”。 例如:1 个活动连接。 必须选择“删除连接”来断开所有活动连接,然后才可分离数据库。

      若要获取消息的详细信息,请选择相应的超链接文本打开活动监视器。

  4. 分离数据库准备就绪后,请选择“确定”。

注意

新分离的数据库将一直显示在对象资源管理器的 “数据库” 节点中,直到刷新该视图。 可以随时刷新视图:选择对象资源管理器窗格,然后从菜单栏依次选择“视图”“刷新”

使用 Transact-SQL

移动数据库之前

如果要移动数据库,请在将它与其现有 SQL Server 实例分离之前,使用 sys.database_files 系统目录视图查看与数据库关联的文件及其当前位置。 有关详细信息,请参阅 sys.database_files (Transact-SQL)

  1. 在 SQL Server Management Studio 中,选择“新建查询”以打开查询编辑器

  2. 将以下 Transact-SQL 脚本复制到查询编辑器中,然后选择“执行”。 此脚本显示物理数据库文件的位置。 通过分离/附加来移动数据库时,请务必考虑所有文件。

    USE [database_name]
    GO
    
    SELECT type_desc, name, physical_name
    FROM sys.database_files;
    

分离、移动和附加之前,请务必考虑与数据库关联的所有文件。 然后,继续执行下一部分中的分离步骤。 若要详细了解如何将数据库附加到新位置,请参阅附加数据库

分离数据库

  1. 连接到 数据库引擎。

  2. 在标准栏上,选择“新建查询”。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。 此示例将分离 AdventureWorks2022 数据库,同时将 skipchecks 选项设置为 true。 有关详细信息,请参阅 sp_detach_db

    EXEC sp_detach_db 'AdventureWorks2022', 'true';