数据库分离和附加 (SQL Server)
本文内容
权限
分离数据库
附加数据库
相关任务
相关内容
适用于: SQL Server
可以分离数据库的数据和事务日志文件,然后将其重新附加到同一或其他 SQL Server 实例。 如果要将数据库更改到同一计算机上的不同 SQL Server 实例或要移动数据库,分离和附加数据库会很有用。
文件访问权限可在很多数据库操作过程中设置,其中包括分离或附加数据库。
重要
建议附加或还原来自未知或不受信任的源的数据库。 此类数据库可能包含恶意代码,这些代码可能会执行非预期的 Transact-SQL 代码,或者通过修改架构或物理数据库结构导致错误。
使用来自未知源或不可信源的数据库前,请在非生产服务器上针对数据库运行 DBCC CHECKDB (Transact-SQL) ,然后检查数据库中的代码,例如存储过程或其他用户定义代码。
分离数据库是指将数据库从 SQL Server 实例中移除,但会完整保留数据库及其数据文件和事务日志文件。 然后可以使用这些文件将数据库附加到任何 SQL Server 实例,包括分离该数据库的服务器。
如果存在下列任何情况,则不能分离数据库:
分离只读数据库将会丢失有关差异备份的差异基准的信息。 有关详细信息,请参阅差异备份 (SQL Server) 。
分离数据库时生成的错误会阻止完全关闭数据库和重新生成事务日志。 收到错误消息后,请执行下列更正操作:
重新附加与数据库关联的所有文件,而不仅仅是主文件。
解决导致生成错误消息的问题。
再次分离数据库。
可以附加复制的或分离的 SQL Server 数据库。 将包含全文目录文件的 SQL Server 2005 (9.x) 数据库附加到 SQL Server 服务器实例时,与在 SQL Server 2005 (9.x) 中一样,目录文件与其他数据库文件一起从旧位置附加。 有关详细信息,请参阅 全文搜索升级 。
附加数据库时,所有数据文件(.mdf
和 .ndf
文件)都必须可用。 如果任何数据文件的路径不同于首次创建数据库或上次附加数据库时的路径,则必须指定文件的当前路径。
备注
如果附加的主数据文件是只读的,则数据库引擎假定数据库也是只读的。
当加密的数据库首次附加到 SQL Server 实例时,数据库所有者必须通过执行下面的语句打开数据库主密钥 (DMK):OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'
。 建议通过执行下面的语句对 DMK 启用自动解密:ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
。 有关详细信息,请参阅 CREATE MASTER KEY (Transact-SQL) 和 ALTER MASTER KEY (Transact-SQL) 。
附加日志文件的要求在某些方面取决于数据库是读写的还是只读的,如下所示:
对于读写数据库,通常可以附加新位置中的日志文件。 不过,在某些情况下,重新附加数据库需要使用其现有的日志文件。 因此,请务必保留所有分离的日志文件,直到在不需要这些日志文件的情况下成功附加了数据库。
如果读写数据库具有单个日志文件,并且您没有为该日志文件指定新位置,附加操作将在旧位置中查找该文件。 如果找到了旧日志文件,则无论数据库上次是否完全关闭,都将使用该文件。 但是,如果未找到旧文件日志,数据库上次是完全关闭且现在没有活动日志链,则附加操作将尝试为数据库创建新的日志文件。
如果附加的主数据文件是只读的,则数据库引擎假定数据库也是只读的。 对于只读数据库,日志文件在数据库主文件中指定的位置上必须可用。 由于 SQL Server 无法更新存储在主文件中的日志位置,因此无法生成新的日志文件。
分离再重新附加只读数据库后,会丢失有关当前差异基准的备份信息。 “差异基准” 是数据库或其文件或文件组子集中所有数据的最新完整备份。 如果没有基准备份信息,master
数据库会变得与只读数据库不同步,这样之后进行的差异备份可能会产生意外结果。 因此,如果对只读数据库使用差异备份,在重新附加数据库后,应通过进行完整备份来建立新的差异基准。 有关差异备份的信息,请参阅 差异备份 (SQL Server) 。
附加时,数据库会启动。 通常,附加数据库时会将数据库重置为它分离或复制时的状态。 但是,附加和分离操作都会禁用数据库的跨数据库所有权链接。 有关如何启用链接的详细信息,请参阅 cross db ownership chaining 服务器配置选项 。
与任何完全或部分脱机的数据库一样,不能附加正在还原文件的数据库。 如果停止了还原顺序,则可以附加数据库。 然后,可以重新启动还原顺序。
将数据库附加到其他服务器实例时,为了给用户和应用程序提供一致的体验,您最好在其他服务器实例上为数据库重新创建部分或全部元数据。 此元数据包括登录名和作业。 有关元数据的详细信息,请参阅使数据库在其他服务器上可用时管理元数据 。
展开表