有关在 SQL Server 中附加数据库的一些常见问题:
- 附加或分离数据库是什么意思?
- 如何分离数据库?
- 如何附加数据库?
- 附加和重建日志是什么意思?
- 如何在 SQL Server Express 中执行此操作?
- 我什么时候可以考虑分离和附加?
- 是否存在任何风险或警告?
- 在 SQL Server 的版本和版本之间附加怎么样?(标准到企业?2000 年到 2008 年?2012 年到 2008 年?)
Mik*_*lsh 33
我们将从分离开始。在 SQL Server 中分离数据库时,您将数据库脱机并将其从要分离的 SQL Server 实例中删除。数据库数据和日志文件保持原样并保持一致状态,因此您可以稍后将数据库附加到另一个 SQL Server 实例。Attach将数据和日志文件从已正确分离(或从完全关闭的 SQL Server 实例复制)的数据库连接到 SQL Server 实例并使数据库联机。
您可以在 T-SQL 中或从 SQL Server Management Studio GUI 中执行此操作。
在 GUI 中,右键单击要分离的数据库,选择All Tasks并单击Detach。从那里你会得到分离对话框。您可以选择首先断开连接以强制断开任何活动连接并回滚它们在执行过程中的工作。您还可以选择在分离之前更新统计信息。

在 T-SQL 中:
-- You don't want to be in the database you are trying to detach
USE Master
GO
-- Optional step to drop all active connections and roll back their work
ALTER DATABASE DatabaseName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
-- Perform the detach
EXEC sp_detach_db 'DatabaseName'
GO
Run Code Online (Sandbox Code Playgroud)
对于系统存储过程 sp_detach_db,您可以选择传入两个参数:
@skipchecks- 可接受的输入是'True'or 'False'if 'True',SQL Server 将在分离前更新统计信息。如果 ' False',则不会。如果您未在此处指定任何内容,则统计信息将在 SQL Server 2005 或更高版本中更新。
@keepfulltextindexfile- 这里的默认值是'True'- 如果设置为 true,则在分离期间不会删除全文索引元数据。看到了很多关于分离及以下我将强调的风险更多细节,联机丛书文章的sp_detach_db是一个良好的开端。
您也可以在 T-SQL 或 SQL Server Management Studio GUI 中执行此操作。
(注意:如果您的数据库中的数据和日志文件未正确分离,则您的附加可能无法工作。发生分离时,数据库将脱机,日志和数据文件将处于一致状态。这也当服务完全关闭时发生。)
在 GUI 中,右键单击Databases实例的顶级文件夹并选择Attach。在下一个对话框中,您将选择要附加的数据库的主数据文件 (.MDF),并确保您选择了其他文件并指定了它们的适当位置,然后单击确定,附加您的数据库。
在 T-SQL 中,在 SQL Server 2005 中执行此操作的最佳方法是通过CREATE DATABASE命令。这是 SQL Server 2012 以外支持的方法。如果您想了解如何使用sp_attach_db,可以在有关[sp_attach_db][3]或[sp_attach_single_file_db][4]
当您有可用的日志文件和数据文件并且它们一致时,这就是 T-SQL 方法:
-- 使用创建数据库和 FOR ATTACH 子句进行附加
CREATE DATABASE DatabaseName
ON (FILENAME = 'FilePath\FileName.mdf'), -- Main Data File .mdf
(FILENAME = 'FilePath\LogFileName.ldf'), -- Log file .ldf
(FILENAME = 'FilePath\SecondaryDataFile.ndf) -- Optional - any secondary data files
FOR ATTACH
GO
Run Code Online (Sandbox Code Playgroud)
您也可以在联机书籍中看到有关Create Database语句的更多信息。
其实是一样的。如果您使用的是 SQL Server Management Studio Express,则可以使用上述 GUI 中的分离/附加对话框,或者也可以通过上述 SSMS Express 使用 T-SQL 步骤。与 Express 没有区别。
如果你没有 SSMS Express,你可以下载它(这里是 SQL Server 2012 Express 版本)。
您可以进入SQLCMD会话并使用上述相同的 T-SQL 结构。
首先要说明什么是分离和附加不打算用于:备份和恢复分离和附加不是为了日常恢复目的而备份数据库的方法。这种方式没有事务日志备份,它会将您的数据库置于数据库文件可能会被意外删除的状态,并且根本不是用于此目的的好方法。
也就是说,分离和附加适用于一些用例(并非详尽无遗,请随意编辑以添加或创建更多新答案):
同样,在线书籍在这里是一个很好的资源,但我会提出一些特定的注意事项,以便在分离或附加数据库时牢记 -
分离
附加 - 就像您不应该从 Internet 运行脚本或在机场接受陌生人的包裹一样,您也不应该在没有经过验证的步骤的情况下附加从其他人那里获得的数据库。该数据库可能在触发器、存储过程等中包含代码,这可能会危害您的环境。您应该在安全的防火墙环境中查看要附加的数据库,而不是您的生产系统。
这些与在版本之间恢复数据库的规则没有什么不同。您通常最多可以恢复到 3 个版本的下一个版本(例如,SQL Server 2008 到 SQL Server 2012 可以使用。SQL Server 2000 到 SQL Server 2012 则不行)。您根本无法通过备份/恢复或分离/附加来倒退 - 您必须编写对象脚本并编写插入脚本,然后手动或使用执行此操作的工具来完成。对于版本,您通常可以在 SQL Server 的主要 SKU 之间移动 - 例如,您可以将数据库从 Standard 移动到 Enterprise,而无需额外工作。但是,如果您正在使用企业功能(例如,压缩或分区),则需要在移动之前禁用这些功能。您可以了解您的功能
| 归档时间: |
|
| 查看次数: |
67381 次 |
| 最近记录: |