适用于:SQL Server
本主题说明如何在 SQL Server 中将分离的数据库移至其他位置,并将其重新附加到相同或不同的服务器实例。 但是,我们建议您使用 ALTER DATABASE 计划重定位过程来移动数据库,而不要使用分离和附加的方法。 有关详细信息,请参阅 Move User Databases。
重要
不建议附加或还原来自未知或不受信任的源的数据库。 此类数据库可能包含恶意代码,这些代码可能会执行非预期的 Transact-SQL 代码,或者通过修改架构或物理数据库结构导致错误。 使用来自未知源或不可信源的数据库前,请在非生产服务器上针对数据库运行 DBCC CHECKDB ,然后检查数据库中的代码,例如存储过程或其他用户定义代码。
过程
通过分离和附加移动数据库
分离数据库。 有关详细信息,请参阅 分离数据库。
在 Windows 资源管理器或 Windows“命令提示符”窗口中,将分离的数据库文件和日志文件移至新位置。
即使打算创建新的日志文件,也应该移动日志文件。 在某些情况下,重新附加数据库需要使用其现有的日志文件。 因此,除非在不使用分离日志文件的情况下可以成功附加数据库,否则,请始终保留所有分离的日志文件。
注意
如果您尝试在不指定日志文件的情况下附加数据库,则附加操作将会在其原始位置查找该日志文件。 如果原始位置还有一份日志,则附加该日志。 若要避免使用原始日志文件,请指定新日志文件的路径,或在日志文件复制到新位置之后,删除其原始副本。
附加复制的文件。 有关详细信息,请参阅 Attach a Database。
示例
以下示例创建名为 MyAdventureWorksAdventureWorks2025 数据库的一个副本。 Transact-SQL 语句在连接到附加了该数据库副本的服务器实例的查询编辑器窗口中执行。
通过执行以下 Transact-SQL 语句来分离 AdventureWorks2025 数据库:
USE master;
GO
EXEC sp_detach_db @dbname = N'AdventureWorks2022';
GO
使用您选择的方法,将数据库文件(AdventureWorks208R2_Data.mdf 和 AdventureWorks208R2_log)分别复制到:C:\MySQLServer\AdventureWorks208R2_Data.mdf 和 C:\MySQLServer\AdventureWorks208R2_Log.ldf。
重要
对于生产数据库,请将数据库和事务日志存放在不同的磁盘上。
若要通过网络将文件复制到远程计算机的磁盘上,请使用远程位置的通用命名约定 (UNC) 名称。 UNC 名称采用以下格式: \\服务器名称\共享名\路径\文件名。 将文件写入本地硬盘时,必须对 SQL Server 实例使用的用户帐户授予读写远程磁盘文件所需的相应权限。
通过执行以下 Transact-SQL 语句来附加移动的数据库及其日志(日志为可选项):
USE master;
GO
CREATE DATABASE MyAdventureWorks
ON (FILENAME = 'C:\MySQLServer\AdventureWorks2022_Data.mdf'),
(FILENAME = 'C:\MySQLServer\AdventureWorks2022_Log.ldf')
FOR ATTACH;
GO
在 SQL Server Management Studio 中,新附加的数据库在对象资源管理器中不是立即可见的。 若要查看数据库,请在对象资源管理器中,单击 “查看” ,再单击 “刷新”。 在对象资源管理器中展开 “数据库” 节点后,新附加的数据库即显示在数据库列表中。
另请参阅
数据库分离和附加 (SQL Server)