Answers:
我们将从分离开始。在SQL Server中分离数据库时,您使数据库脱机并将其从要分离数据库的SQL Server实例中删除。数据库数据和日志文件保持原样,并保持一致状态,因此您可以在以后将数据库附加到另一个SQL Server实例。附加将已正确分离(或从完全关闭的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
对于系统存储过程sp_detach_db,有两个参数可以选择传入:
@skipchecks
-可接受的输入为'True'
,'False'
如果为'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
您还可以在在线书籍中查看有关“ 创建数据库”语句的更多信息。
实际上是一样的。如果您使用的是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 Server2012。不能使用SQL Server 2000到SQL Server 2012)。您根本无法通过备份/还原或分离/附加来回退-您必须编写对象脚本并编写插入脚本,然后手动执行此操作或使用执行此操作的工具执行。对于版本,通常可以在SQL Server的主要SKU之间移动-例如,您可以将数据库从标准移动到企业,而无需进行额外的工作。但是,如果您使用的是企业功能(说,压缩或分区),则需要先禁用这些功能。您可以了解自己的功能